У меня есть веб-сайт на моем VPS. Я устанавливаю Debian 7 на этот VPS. Мой http-документ находится в каталоге, /var/www/example.com
на котором я установил Nginx на этом сервере, а каталог /var/www/example.com
принадлежит пользователю www-data
и группе www-data
. Я хочу добавить пользователя без прав root (назовем его someone
), чтобы иметь возможность загружать или выгружать документы в этот каталог через FTP или SFTP-клиент, такой как FileZilla.
я нашелэтотиэтотруководство, объясняющее, что это можно сделать с помощью chroot
. Я пытаюсь настроить его, но это не сработало. Вот некоторые команды, которые я использовал до сих пор.
useradd someone
groupadd sftpusers
usermod -G sftpusers someone
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
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
Итак, после проб и ошибок, кажется, вот ответ.
adduser someone
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
service ssh restart
chmod -R 777 /var/www/example.com
. Это позволит кому-либо загружать/скачивать файлы и разрешит веб-серверу/php обрабатывать файлы в этом каталоге.