Я хочу предоставить клиентский доступ к моему серверу, но я хочу ограничить этих пользователей их домашними каталогами. Я буду монтировать любые файлы, которые я хочу, чтобы они могли видеть.
Я создал пользователя bob
и добавил его в новую группу под названием sftponly
. У них есть домашний каталог / home / bob
. Я изменил их оболочку на / bin / false
, чтобы остановить вход по SSH. Вот их строка / etc / passwd
:
bob:x:1001:1002::/home/bob:/bin/false
Я также изменил / etc / ssh / sshd_config
, включив в него следующее:
Match Group sftponly
ChrootDirectory /home/%u
ForceCommand internal-sftp
AllowTcpForwarding no
Когда я пытаюсь войти в систему как и они, вот что я вижу
$ sftp bob@server
bob@server's password:
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer
Если я закомментирую строку ChrootDirectory
, я могу ввести SFTP, но тогда у них будет полная свобода действий на сервере. Я обнаружил, что ChrootDirectory / home
работает, но по-прежнему дает им доступ к любому домашнему каталогу. Я явно пробовал ChrootDirectory / home / bob
, но это тоже не сработало.
Что я делаю не так? Как я могу ограничить bob
до / home / bob /
?
---- EDIT -----
Хорошо, я только что взглянул на ] /var/log/auth.log
и увидел следующее:
May 9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session opened for user bob by (uid=0)
May 9 14:45:48 nj sshd[5091]: fatal: bad ownership or modes for chroot directory component "/home/bob/"
May 9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session closed for user bob
Я не совсем уверен, что там происходит, но это говорит о том, что что-то не так с каталогом пользователя.Вот результат ls -h / home
:
drwxr-xr-x 26 oli oli 4096 2012-01-19 17:19 oli
drwxr-xr-x 3 bob bob 4096 2012-05-09 14:11 bob
Я создал сценарий из ответа @Oli:
#!/bin/bash
# 1. adds a user to the group sftponly, which have only access to their home directory
# 2. creates a writable folder in the users home directory
# 3. mounts a folder into the users home directory with bind
# see https://askubuntu.com/questions/134425/how-can-i-chroot-sftp-only-ssh-users-into-their-homes
if [ "$1" == "" ]; then
echo "usage: $0 [username] [path to share] [local foldername]"
exit 0
fi
U=$1
if [ "$2" == "" ]; then
echo "no 2. param path to share given (without trailing slash)"
exit 0
fi
PATH_TO_SHARE="$2"
if [ "$3" == "" ]; then
echo "no 3. param local foldername given"
exit 0
fi
LOCAL_FOLDER_NAME="$3"
set -ex
adduser $U
adduser $U sftponly
sudo chown root /home/$U
sudo chmod go-w /home/$U
sudo mkdir /home/$U/writable
sudo chown $U:sftponly /home/$U/writable
sudo chmod ug+rwX /home/$U/writable
mkdir -p "/home/$U/$LOCAL_FOLDER_NAME/"
mount --bind "$PATH_TO_SHARE/" "/home/$U/$LOCAL_FOLDER_NAME/"
echo "$PATH_TO_SHARE/ /home/$U/$LOCAL_FOLDER_NAME/ none defaults,bind 0 0">>/etc/fstab