пользователь chroot 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. создал новую группу secureftp
  2. создал нового пользователя sftp , присоединился к группам secureftp и www-data также с помощью оболочки nologin . Homedir is /
  3. отредактировал sshd_config с
Subsystem sftp internal-sftp 
AllowTcpForwarding no 
Match Group <secureftp> 
      ChrootDirectory /var/www 
      ForceCommand internal-sftp

Я могу войти с пользователем sftp, перечислить файлы, но действие записи не разрешено. Пользователь Sftp находится в группе www-data, но разрешения для / var / www для бита группы читаются / читаются + x, так что ... Это не работает.

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

Что я могу сделать здесь?

Я думал, что смогу включить пользовательские www-данные для входа в систему как sftp, чтобы он мог изменять файлы / каталоги, которыми владеют www-данные в / var / www. Но по некоторым причинам я думаю, что это было бы глупо с точки зрения безопасности.

bashintosh
источник
Я не думаю, что это возможно без изменения разрешения.
Унникришнан

Ответы:

15

Что я сделал, так это привязал моих пользователей к их домашним каталогам, а затем использовал их mount --bindдля создания ссылки на них в своих домашних каталогах.

Затем я использовал setfaclдля проверки www-dataправ доступа maintans новые файлы в каталоге. Этот эффект будет повторяться /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. Это связано с монтированием --bind. Большое спасибо!
Башинтош
2
Где я могу заплатить тебе пиво? Похоже, все хорошо, и Apache, похоже, не жалуется на sftp-пользователя как владельца / var / www. Я был очень близок к вашему решению, когда пошел по пути ACL, но я оставил часть suid вне: вы волшебны, спасибо!
Башинтош