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

100

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

Я создал пользователя с именем 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 09.05.2012 в 15:43
источник

3 ответа

104

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

И bam, вы можете войти и написать в /writable .

    
ответ дан Oli 09.05.2012 в 16:21
источник
49

Чтобы chroot каталог SFTP, вы должны

  1. Создайте пользователя и запустите root, чтобы быть его владельцем

    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
    
ответ дан josircg 25.10.2012 в 19:54
источник
4

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

Так оно и было, оно работало без каких-либо дальнейших изменений. Обратите внимание, что у меня есть только доступные для записи разрешения user , а не group , как и многие другие решения в Интернете. Я смог создавать / удалять / редактировать / переименовывать файлы / папки без проблем.

При доступе к использованию sshfs с пользователем netdrive из-за конфигурации chroot я бы только видел вещи, хранящиеся в каталоге /home/netdrive/ сервера, идеально. Повторная структура каталогов /home/netdrive/home/netdrive/ - это то, что заставило меня работать с чистым решением chroot ssh writeable .

Теперь я объясню ниже проблемы, которые у меня были:

Вероятно, вы не должны выполнять следующие абзацы :

Посмотрев на вышеупомянутые решения (и многие другие в сети, которые даже использовали acl (списки управления доступом)) Мне все еще не удалось заставить его работать, потому что я сделал следующее:

Для меня работала НЕ :

sudo mkdir /home/netdrive/writable/
sudo chown netdrive:netdrive /home/netdrive/writable/
sudo chmod 755 /home/netdrive/writable/

Так как пользователь netdrive все еще не мог писать в этом каталоге /home/netdrive/writable/ , несмотря на то, что он владел папкой и имел разрешения. Затем я сделал:     sudo chmod 775 / home / netdrive / записываемый / И теперь я могу создать каталог и удалить его, но я не смог его отредактировать, потому что он создавался без разрешений для групповой записи. Здесь, из того, что я видел в сети, люди используют acl , чтобы исправить это. Но я был недоволен тем, что мне пришлось установить acl , затем настроить точки монтирования и т. Д. Также я понятия не имею, почему мне понадобится разрешение group для записи в папку, принадлежащую тот же пользователь.

Похоже, что по какой-то причине создав /home/netdrive/home/netdrive и предоставив право собственности на последнюю папку netdrive , я смог заставить все работать, не входя в разрешения group .

    
ответ дан mihai.ile 18.07.2015 в 19:58
источник

Ознакомьтесь с другими вопросами по меткам