Как я могу привязать пользователей SSH только по sftp к своим домам?

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

Я создал пользователя с именем 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
137
задан 12 March 2014 в 23:03

4 ответа

Вся эта боль благодаря нескольким проблемам безопасности как описана здесь . В основном 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.

120
ответ дан 12 March 2014 в 23:03

К chroot каталог SFTP Вы должны

  1. , Создают пользователя и вынуждают корень быть владельцем его

    cd /home
    mkdir john
    useradd -d /home/john -M -N -g users john
    sudo chown root:root /home/john
    sudo chmod 755 /home/john
    
  2. , Изменяют местоположение подсистемы на/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
    
57
ответ дан 12 March 2014 в 23:03

Я провел целый день, пытаясь получить сетевой ресурс на моей малине. Я хотел заблокировать пользователя так, чтобы это не могло перейти через целую файловую систему, никакой доступ входа в систему 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 папка я смог заставить все работать, не смешивая с полномочиями группы.

6
ответ дан 22 November 2019 в 22:56

Я следовал этой статье, но она не работала. Это начало работать после того, как я делал это изменение (предложенным в вышеупомянутых ответах):

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

Плюс сделанный корневой ownable корневой каталог, в соответствии с которым у меня был пользователь перезаписываемый подкаталог (как описано выше).

Новая и полезная вещь, которую я хочу добавить с этим ответом, состоит в том, что можно упростить конфигурацию просто путем определения %h как пользовательский корневой каталог:

ChrootDirectory %h

Я обнаружил его благодаря этой ссылке.

1
ответ дан 22 November 2019 в 22:56

Другие вопросы по тегам:

Похожие вопросы: