Ошибка входа SSH ChrootDirectory: /dev/pts/2: Нет такого файла или каталога

Вопрос или проблема

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

/var/www/daniel (корневая папка с правильными правами)
/var/www/daniel/home (принадлежит daniel:daniel и имеет права 755) 

В

/etc/ssh/sshd_config (я включил внутренний sftp)

Match User daniel
  PasswordAuthentication yes
  AllowTCPForwarding no
  ForceCommand internal-sftp
  ChrootDirectory %h
  X11Forwarding no

перезапустил службу ssh

затем, когда я пытаюсь войти, я вижу в

auth.log

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

Accepted password for daniel ssh2
pam_unix(sshd:session): session opened for user daniel by (uid=0)
systemd-logind[508]: New session 63 of user daniel.
pam_unix(systemd-user:session): session opened for user daniel by (uid=0)
error: /dev/pts/2: No such file or directory
pam_unix(sshd:session): session closed for user daniel
Session 63 logged out. Waiting for processes to exit.

Есть идеи?

ОБНОВЛЕНИЕ

Я выполнил следующее с https://unix.stackexchange.com/questions/160461/chroot-gone-wrong-cant-ssh-with-user:

mount --bind /dev /var/daniel/dev
mount --bind /dev/pts /var/daniel/dev/pts

Ошибка, похоже, исчезла, но меня сразу же выкидывает после аутентификации

Accepted password for daniel
pam_unix(sshd:session): session opened for user daniel by (uid=0)
systemd-logind[508]: New session 130 of user daniel.
systemd: pam_unix(systemd-user:session): session opened for user daniel by (uid=0)
pam_unix(sshd:session): session closed for user daniel
systemd-logind[508]: Session 130 logged out. Waiting for processes to exit.

Проверьте /etc/passwd.

Обычно домашний каталог пользователя – это /home/USER, и переменная %h соответствует пути к файлу /home/daniel в этом случае.

Также вам нужно указать путь к /bin/bash или подобной оболочке внутри chroot, если пользователь должен иметь возможность входить через SSH.

Я использую это уже много лет на Ubuntu.

Subsystem sftp /usr/lib/openssh/sftp-server
Match Group sftp
    AllowTcpForwarding no
    ChrootDirectory %h
    ForceCommand internal-sftp
    PasswordAuthentication yes
    X11Forwarding no

Директория chroot должна принадлежать root и не должна иметь прав на запись для пользователя. Внутренние директории могут быть записываемыми. Это было сделано для того, чтобы избежать наличия домашних файлов, которые могут изменить предзагрузку библиотек. Но вы получите ошибки в auth.log, если это неправильно.

Также вы должны ограничить своего клиента sftp и не открывать обычную ssh сессию с терминалом.

Ответ или решение

При использовании SSH и конфигурации ChrootDirectory для ограничения доступа пользователей, может возникать ряд проблем, как это показано в вашем вопросе. Конкретно, ошибка «/dev/pts/2: Нет такого файла или каталога» указывает на то, что для работы с псевдоустройствами терминала требуется специальная настройка. Давайте детально разберем вашу ситуацию и предложим решение.

1. Основные требования к конфигурации Chroot

При использовании ChrootDirectory, особенно при настройке SFTP, необходимо учитывать следующие аспекты:

  • Права доступа к директории. Корневая директория Chroot должна принадлежать пользователю root и не должна иметь права на запись для пользователя, который является частью Chroot. В вашем случае /var/www/daniel должна быть владельцем root и иметь права 755.

  • Структура каталогов. Внутри Chroot необходимо создать подкаталоги, которые будут доступны для пользователя. Например, если у вас есть каталог /var/www/daniel/home, он должен принадлежать пользователю daniel и иметь подходящие права доступа (например, 755).

2. Создание необходимых подкаталогов

Как вы уже делали, вам нужно выполнить команды для монтирования /dev и /dev/pts в пределах Chroot. Это решает первую ошибку. Убедитесь в правильности команд:

mkdir -p /var/www/daniel/dev/pts
mount --bind /dev /var/www/daniel/dev
mount --bind /dev/pts /var/www/daniel/dev/pts

3. Изменение конфигурации SSH

Проверьте ваш файл /etc/ssh/sshd_config. Для правильной работы с SFTP ваша секция должна выглядеть примерно так:

Match User daniel
    PasswordAuthentication yes
    AllowTcpForwarding no
    ForceCommand internal-sftp
    ChrootDirectory /var/www/daniel
    X11Forwarding no

4. Проверка конфигурации пользователя

Убедитесь, что в файле /etc/passwd путь к домашнему каталогу пользователя daniel правильно указывает на ChrootDirectory:

daniel:x:1001:1001::/var/www/daniel/home:/usr/sbin/nologin

Имейте в виду, что если у вас используется internal-sftp, то для входа через SSH нормального shell-подхода не требуется (вы можете использовать /usr/sbin/nologin или /bin/false для предотвращения нормального входа).

5. Проверка прав доступа

После внесения всех изменений необходимо убедиться, что все права доступа установлены правильно:

# Убедитесь, что родительская директория принадлежит root
chown root:root /var/www/daniel
chmod 755 /var/www/daniel

# Убедитесь, что домашняя директория принадлежит пользователю daniel
chown daniel:daniel /var/www/daniel/home
chmod 700 /var/www/daniel/home

6. Перезапуск SSH

После всех изменений не забудьте перезапустить службу SSH:

sudo systemctl restart sshd

Заключение

Если вы все сделали правильно, то ошибка входа должна исчезнуть, и пользователь daniel сможет успешно войти в систему с помощью SFTP, имея доступ только к своему набору файлов. Если проблемы все еще сохраняются, проверьте системные журналы (/var/log/auth.log) на наличие каких-либо новых ошибок или подсказок, которые помогут в диагностике.

Оцените материал
Добавить комментарий

Капча загружается...