Я хочу предоставить клиенту доступ к моему серверу, но я хочу ограничить этих пользователей их домашними каталогами. Я буду подключать любые файлы, которые я хочу, чтобы они могли видеть.
Я создал пользователя с именем 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/
?
---- РЕДАКТИРОВАТЬ -----
Хорошо, так что я только что взглянул на /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
Вся эта боль благодаря нескольким проблемам безопасности как описана здесь . В основном chroot каталог должен принадлежать root
и не может быть никаким доступом для записи группы.Прекрасно. Таким образом, по существу необходимо превратить chroot в ячейку содержания и в , что у Вас может быть свое доступное для редактирования содержание.
sudo chown root /home/bob
sudo chmod go-w /home/bob
sudo mkdir /home/bob/writable
sudo chown bob:sftponly /home/bob/writable
sudo chmod ug+rwX /home/bob/writable
И обман, можно войти в систему и записать в /writable
.
К chroot каталог SFTP Вы должны
, Создают пользователя и вынуждают корень быть владельцем его
cd /home
mkdir john
useradd -d /home/john -M -N -g users john
sudo chown root:root /home/john
sudo chmod 755 /home/john
, Изменяют местоположение подсистемы на/etc/ssh/sshd_config:
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
и создают пользовательский раздел в конце файла (ssh, может умереть, повторно меча икру, если помещено после строки Подсистемы):
Match User john
ChrootDirectory /home/john
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
Я провел целый день, пытаясь получить сетевой ресурс на моей малине. Я хотел заблокировать пользователя так, чтобы это не могло перейти через целую файловую систему, никакой доступ входа в систему ssh, и я хотел иметь доступ для записи к сетевому ресурсу.
Сначала я создал пользователя:
sudo useradd netdrive
Затем отредактированный /etc/passwd
и удостоверился, что это имеет /bin/false
для пользователя, таким образом, строка была:
netdrive:x:1001:1004:Net Drive User,,,:/home/netdrive:/bin/false
Я отредактировал /etc/ssh/sshd_config
включать:
Match User netdrive
ChrootDirectory /home/netdrive
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
Измененный владелец корневого каталога и полномочия:
sudo chown root:root /home/netdrive/
sudo chmod 755 /home/netdrive/
Хорошо так, в конце концов, это я смог соединить использование sshfs
но в режиме только для чтения. Что я должен был сделать для получения перезаписываемой папки:
sudo mkdir -p /home/netdrive/home/netdrive/
sudo chown netdrive:netdrive /home/netdrive/home/netdrive/
sudo chmod 755 /home/netdrive/home/netdrive/
Это было этим, это работало без дальнейших изменений. Обратите внимание, что у меня есть только перезаписываемые полномочия пользователю, не группе как много других решений онлайн. Я смог создавать/удалять/редактировать/переименовывать файлы/папки без проблем.
При доступе к использованию sshfs
с пользователем сетевого диска из-за chroot конфигурации я только видел бы вещи, сохраненные в сервере /home/netdrive/
каталог, прекрасный. Повторное /home/netdrive/home/netdrive/
структура каталогов - то, что заставило ее работать на меня в наличии чистого chroot ssh перезаписываемое решение.
Вы не должны, вероятно, выполнять следующие параграфы:
После взгляда на вышеупомянутые решения (и многие другие в сети, которая даже использовала acl (списки управления доступом)) я все еще не смог получить его работа, потому что то, что я сделал затем, было:
Следующее НЕ работало на меня:
sudo mkdir /home/netdrive/writable/
sudo chown netdrive:netdrive /home/netdrive/writable/
sudo chmod 755 /home/netdrive/writable/
Поскольку пользователь сетевого диска все еще не смог записать в этом /home/netdrive/writable/
каталог несмотря на владение папкой и наличие полномочий. Затем я сделал: sudo chmod 775/home/netdrive/writable/И теперь я мог создать каталог и удалить его, но я не смог отредактировать его, потому что он создавался без группы перезаписываемые полномочия. Здесь от того, что я видел на сетевых людях использование acl
зафиксировать его. Но я не был доволен этим начиная с него, я должен был установить acl
, затем настройте точки монтирования, И т.д. Также я понятия не имею, почему мне было бы нужно разрешение группы записать в папку, принадлежавшую тому же пользователю.
Это кажется этим по некоторым причинам создание /home/netdrive/home/netdrive
и давая владение последнему netdrive
папка я смог заставить все работать, не смешивая с полномочиями группы.
Я следовал этой статье, но она не работала. Это начало работать после того, как я делал это изменение (предложенным в вышеупомянутых ответах):
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Плюс сделанный корневой ownable корневой каталог, в соответствии с которым у меня был пользователь перезаписываемый подкаталог (как описано выше).
Новая и полезная вещь, которую я хочу добавить с этим ответом, состоит в том, что можно упростить конфигурацию просто путем определения %h как пользовательский корневой каталог:
ChrootDirectory %h
Я обнаружил его благодаря этой ссылке.