Связку chroot + sftp применяют когда необходимо запереть пользователя в определенной папке. Как правило такие задачи возникают на серверах с хостингом.
Задача - предоставить пользователям user1 и user2 доступ по sftp к каталогам в которых лежат их сайты и запереть их там. Пользователю user3 предоставить доступ к произвольному каталогу.
1. Определяем место где будут лежать сайты пользователей, создаем необходимые папки.
# mkdir -p /var/www/user1/mysite
# mkdir -p /var/www/user2/mysite
# mkdir -p /mnt/sdc1/project
user1 и user2 не должны подниматься выше /var/www/user1 и /var/www/user2 соответственно. user3 не должен подниматься выше /mnt/sdc1/project.
2. Создаем группу sftp_only (скорее всего она уже есть) для пользователей user1 и user2.
Создаем группу sftp_user3 для пользователя user3.
# groupadd sftp_only
# groupadd sftp_user3
3. Создаем пользователя, задаем ему домашнюю директорию, шелл и добавляем его в группу.
# useradd -d /var/www/user1/mysite -s /sbin/nologin -G sftp_only user1
# useradd -d /var/www/user2/mysite -s /sbin/nologin -G sftp_only user2
# useradd -d /mnt/sdc1/project -s /sbin/nologin -G sftp_user3 user3
Командой passwd задаем пользователям пароли.
В файлах /etc/group и /etc/passwd проверяем, что пользователи создались правильно.
4. Вносим изменения в конфигурацию sshd (файл /etc/ssh/sshd_config).
Коментируем строчку
#Subsystem sftp /usr/libexec/openssh/sftp-server
И под ней добавляем новую строчку
Subsystem sftp internal-sftp
Определяем пользователей и ip адреса с которых на сервер можно зайти по ssh.
AllowUsers root@1.1.1.1 user1@2.2.2.2,3.3.3.3 user2@4.4.4.*,4.4.5.0/24 user3
##AllowUsers root - очень и очень.. нет, просто супертурбо очень плохо=)
В конец файла добавляем для группы sftp_only
Match Group sftp_only
ChrootDirectory /var/www/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
И для группы sftp_user3
Match Group sftp_only
ChrootDirectory /mnt/sdc1/project
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
Задача - предоставить пользователям user1 и user2 доступ по sftp к каталогам в которых лежат их сайты и запереть их там. Пользователю user3 предоставить доступ к произвольному каталогу.
1. Определяем место где будут лежать сайты пользователей, создаем необходимые папки.
# mkdir -p /var/www/user1/mysite
# mkdir -p /var/www/user2/mysite
# mkdir -p /mnt/sdc1/project
user1 и user2 не должны подниматься выше /var/www/user1 и /var/www/user2 соответственно. user3 не должен подниматься выше /mnt/sdc1/project.
2. Создаем группу sftp_only (скорее всего она уже есть) для пользователей user1 и user2.
Создаем группу sftp_user3 для пользователя user3.
# groupadd sftp_only
# groupadd sftp_user3
3. Создаем пользователя, задаем ему домашнюю директорию, шелл и добавляем его в группу.
# useradd -d /var/www/user1/mysite -s /sbin/nologin -G sftp_only user1
# useradd -d /var/www/user2/mysite -s /sbin/nologin -G sftp_only user2
# useradd -d /mnt/sdc1/project -s /sbin/nologin -G sftp_user3 user3
Командой passwd задаем пользователям пароли.
В файлах /etc/group и /etc/passwd проверяем, что пользователи создались правильно.
4. Вносим изменения в конфигурацию sshd (файл /etc/ssh/sshd_config).
Коментируем строчку
#Subsystem sftp /usr/libexec/openssh/sftp-server
И под ней добавляем новую строчку
Subsystem sftp internal-sftp
Определяем пользователей и ip адреса с которых на сервер можно зайти по ssh.
AllowUsers root@1.1.1.1 user1@2.2.2.2,3.3.3.3 user2@4.4.4.*,4.4.5.0/24 user3
##AllowUsers root - очень и очень.. нет, просто супертурбо очень плохо=)
В конец файла добавляем для группы sftp_only
Match Group sftp_only
ChrootDirectory /var/www/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
И для группы sftp_user3
Match Group sftp_only
ChrootDirectory /mnt/sdc1/project
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
Сохраняем файл и перезапускаем sshd.
5. Выставляем права на папки.
5. Выставляем права на папки.
Папки /var/www/user1, /var/www/user2 и /var/www/user2 и /mnt/sdc1/project должны принадлежать пользователю и группе root.
Папка /var/www/user1/mysite должна принадлежать пользователю и группе user1, а /var/www/user2/mysite должна принадлежать user2.
После этого все должно работать.
---
---
При написании заметки использовались материалы:
http://kb.skullboxx.net//?q=node/546