Разрешить пользователю, не являющемуся пользователем root, загружать/скачивать данные в каталоге веб-сайта

Разрешить пользователю, не являющемуся пользователем root, загружать/скачивать данные в каталоге веб-сайта

У меня есть веб-сайт на моем VPS. Я устанавливаю Debian 7 на этот VPS. Мой http-документ находится в каталоге, /var/www/example.comна котором я установил Nginx на этом сервере, а каталог /var/www/example.comпринадлежит пользователю www-dataи группе www-data. Я хочу добавить пользователя без прав root (назовем его someone), чтобы иметь возможность загружать или выгружать документы в этот каталог через FTP или SFTP-клиент, такой как FileZilla.

я нашелэтотиэтотруководство, объясняющее, что это можно сделать с помощью chroot. Я пытаюсь настроить его, но это не сработало. Вот некоторые команды, которые я использовал до сих пор.

  1. useradd someone
  2. groupadd sftpusers
  3. usermod -G sftpusers someone
  4. vi /etc/ssh/sshd_config

Я добавил этот код

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

И в конце файла я добавил

Match group sftpusers
    ChrootDirectory /var/www/example.com
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
  1. service ssh restart

Но когда я подключился через FileZilla, он выдал мне ошибку. Я подозреваю, что эта ошибка из-за /var/www/example.comпринадлежит пользователю www-dataи группе www-data.

Вопрос: Как разрешить пользователю без прав root загружать или выгружать документы в /var/www/example.comкаталог через FTP или SFTP-клиент, например FileZilla. Этот пользователь без прав root не должен иметь доступа к родительскому каталогу, например/var/www/

решение1

О, ради всего милого и приятного, не устанавливайте права доступа 777 на ВСЕ, что доступно world+dog (т. е. каталоги вашего веб-сайта, анонимные папки FTP).

Современные Linux и BSD имеют ACL для каждого пользователя, которые вы можете настроить, и они работают отлично! Вы можете использовать это, чтобы добавить rwx для определенных пользователей и определенных групп. Это очень легко сделать, как только вы поймете их!

TLDR; используйте команду setfacl следующим образом: #setfacl -m someuser:rwx /public_html SHAZAM! Теперь someuser может читать/писать/выполнять в вашем каталоге public_html. Я бы рекомендовал вам прочитать страницу руководства для setfacl или хотя бы HOWTO, чтобы ознакомиться с его функционалом. Вот простое введение в ACL файловой системы: https://www.redhat.com/sysadmin/linux-access-control-lists

Это отлично подходит для веб-серверов, где необходимо разрешить доступ определенным разработчикам, имеющим собственные учетные записи, без предоставления rwx для world+dog.

решение2

вот как я настроил свой sftp для конкретного пользователя

1] создать пользователя

 adduser {USER}

2] отредактировать /etc/ssh/sshd_config

 PasswordAuthentication yes 

 Subsystem sftp
 internal-sftp -u 0007 -f AUTH -l VERBOSE 
 Match Group {USER}
     ChrootDirectory {FOLDER}
     ForceCommand internal-sftp -u 0007
     AllowTcpForwarding no
     GatewayPorts no
     X11Forwarding no

3] установить права для пользователя

 chmod -R 777 {FOLDER}

4] перезапустить ssh

service ssh restart

замените {USER} на вашего пользователя, а {FOLDER} на вашу папку, и это должно сработать! ;)

решение3

Итак, после проб и ошибок, кажется, вот ответ.

  1. adduser someone
  2. vi /etc/ssh/sshd_config Я использую конфигурацию Froggiz, поэтому мой код выглядит так:

    PasswordAuthentication yes 
    
    Subsystem sftp internal-sftp -u 0007 -f AUTH -l VERBOSE 
         Match Group someone
         ChrootDirectory /var/www
         ForceCommand internal-sftp -u 0007
         AllowTcpForwarding no
         GatewayPorts no
         X11Forwarding no
    
  3. service ssh restart

  4. chmod -R 777 /var/www/example.com. Это позволит кому-либо загружать/скачивать файлы и разрешит веб-серверу/php обрабатывать файлы в этом каталоге.

Связанный контент