chrooted sftp користувач з дозволом на запис в / var / www


10

Мене плутає ця настройка, яку я намагаюся розгорнути. Я сподіваюся, що хтось із вас може допомогти мені: дуже вдячний.

Довідкова інформація

Сервер - Debian 6.0, ext3, з Apache2 / SSL та Nginx спереду як зворотний проксі. Мені потрібно надати sftp доступ до кореневої директорії Apache (/ var / www), переконуючись, що користувач sftp записаний на цей шлях з дозволами RWX.

Все це без зміни дозволу за замовчуванням у / var / www.

drwxr-xr-x  9 root root  4096 Nov  4 22:46 www

Всередині / var / www

-rw-r----- 1 www-data www-data     177 Mar 11  2012 file1
drwxr-x--- 6 www-data www-data    4096 Sep 10  2012 dir1
drwxr-xr-x 7 www-data www-data    4096 Sep 28  2012 dir2
-rw------- 1 root     root          19 Apr  6  2012 file2
-rw------- 1 root     root     3548528 Sep 28  2012 file3
drwxr-x--- 6 www-data www-data    4096 Aug 22 00:11 dir3
drwxr-x--- 5 www-data www-data    4096 Jul 15  2012 dir4
drwxr-x--- 2 www-data www-data  536576 Nov 24  2012 dir5
drwxr-x--- 2 www-data www-data    4096 Nov  5 00:00 dir6
drwxr-x--- 2 www-data www-data    4096 Nov  4 13:24 dir7

Що я спробував

  1. створили новий груповий захист
  2. створив нового користувача sftp, приєднався до secureftp та www-даних груп також із оболонкою nologin . Гомедір /
  3. редагував sshd_config с
Subsystem sftp internal-sftp 
AllowTcpForwarding no 
Match Group <secureftp> 
      ChrootDirectory /var/www 
      ForceCommand internal-sftp

Я можу ввійти в систему з користувачем sftp, перераховувати файли, але ніяких дій на запис не дозволено. Користувач Sftp знаходиться у групі даних www, але дозволи в / var / www читаються / читаються + x для бітової групи, так що ... Це не працює.

Я також пробував з ACL, але оскільки я застосовую дозволи ACL RWX для користувача sftp до / var / www (dirs та файли рекурсивно), він також змінить дозволи Unix, а це те, чого я не хочу.

Що я можу зробити тут?

Я думав, що можу дозволити користувачеві www-data ввійти як sftp, так що він зможе змінювати файли / dirs, якими є www-data в / var / www. Але я чомусь думаю, що це було б дурним кроком на безпеці.


Я не думаю, що це можливо без зміни дозволу.
Unnikrishnan

Відповіді:


15

Що я зробив, це хронізувати моїх користувачів до їхніх домашніх каталогів, а потім використовувати mount --bindдля створення посилання на нього у своїх домашніх довідниках.

Тоді я setfaclпереконувавсь, що www-dataмейтани записують дозволи в нові файли в каталог. Цей ефект повториться /var/www, що саме ви хочете зробити.

Встановивши g+sв каталозі, всі нові файли та каталоги, створені в ньому, успадкують право власності на групу від свого батьківського.

useradd someuser
mkdir -p /home/someuser/www
mount --bind /var/www /home/someuser/www
chmod g+s /home/someuser/www
chown -R someuser:www-data /home/someuser/www
setfacl -d -m g::rwx /home/someuser/www

Це повинно зробити трюк.

Зробіть кріплення стійким

Очевидно, ви хочете, щоб ваші кріплення все ще були там, коли ви перезавантажуєте сервер. Це так само просто, як додати кріплення до свого /etc/fstab. Не всі провайдери дозволяють торкнутися цього файлу, але більшість - це.

Просто додайте такі рядки:

/var/www        /home/someuser/www        none        bind        0        0

Ви можете перезавантажити, щоб переконатися, що воно працює.


1
Факт полягає в тому, що коли ви chmod g + s / home / someuser / www і порушуєте someuser: www-data / home / someuser / www, він також передасть ті самі дозволи та власник: group в / var / www. Це пов’язано з кріпленням - прив'язкою. Дуже дякую!
bashintosh

2
Де я можу заплатити вам пивом? Схоже, це все добре, і Apache, схоже, не скаржиться на sftp-користувача як власника / var / www. Я був дуже близький до вашого рішення, коли я пішов шляхом ACL, але я покинув суїдну частину: ти магія, дякую!
bashintosh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.