Несколько пользователей sftp и доступ к подкаталогу /var/www

У меня есть несколько пользователей на моем сервере Ubuntu с vsftpd установлены.
Сервер используется в качестве веб-сервера и имеет общий каталог sftp, к которому обращаются публичные клиенты (предоставляя им пользователя и пароль).

Из-за этой архитектуры моя цель состояла в том, чтобы ограничить пользователя общедоступного клиента только доступом к его домашнему каталогу и ограничить доступ к другим каталогам. Я сделал это с помощью ChrootDirectory следующим образом:

  • создайте публичного пользователя: public_sftp с домашним каталогом: /home/public_sftp/
  • /home/public_sftp принадлежит root
  • внутри /home/public_sftpЕсть два каталога, принадлежащих public_sftp: www-data
  • создать группу sftponly
  • добавьте public_sftp в группу sftponly
  • Изменить /etc/ssh/sshd_config и добавить в конце

    Match group sftponly
        ChrootDirectory %h
        X11Forwarding no
        AllowTcpForwarding no
        ForceCommand internal-sftp -u 73
    

Это прекрасно работает, за исключением сценария, который мне нужно запустить с другого сервера, используя пользователя www-data. При запуске этого скрипта, который будет подключаться к серверу sftp с пользователем www-data, я получаю:

Write failed: Broken pipe
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(605) [sender=3.0.9]

Домашний каталог моего пользователя www-data /var/www/ и rsync Scrypt пытается записать в подкаталог из /var/www,

1 ответ

POSIX ACL (списки контроля доступа) полезны для того, что вы описываете. Они допускают более детализированную модель разрешений по сравнению с моделью user:group:other. Я обнаружил, что их легче держать в голове, поскольку я могу быть более явным, а также могу установить поведение «по умолчанию» для ветви файловой системы.

Например, вы можете явно указать разрешения для каждого пользователя:

      setfacl -Rm d:u:userA:rwX,u:userA:rwX /var/www
setfacl -Rm d:u:userB:rwX,u:userB:rwX /var/www

Или вы можете сделать это на основе некоторой общей группы:

      setfacl -Rm d:g:groupA:rwX,u:groupA:rwX /var/www

И, возможно, вы хотите, чтобы пользователь вашего веб-сервера был доступен только для чтения

      setfacl -Rm d:u:www-data:rX,u:www-data:rX /var/www

Справочные страницы:

http://linux.die.net/man/1/setfacl http://linux.die.net/man/1/getfaclhttps://websistent.com/linux-acl-tutorial/

Другие вопросы по тегам