Не удалось выполнить su после создания chroot-окружения

Не удалось выполнить su после создания chroot-окружения

На 64-битном хосте CentOS я использую скриптmake_chroot_jail.shпоместить пользователя в тюрьму, не позволяя ему видеть ничего, кроме своего дома /home/jail/home/user1.

Я сделал это, набрав следующее:

sudo ./make_chroot_jail.sh user1

после этого при первой попытке подключиться к user1 я получал ошибку типа:

/bin/su: user guest does not exist

Я исправил это, скопировав некоторые пропущенные библиотеки:

sudo cp /lib64/libnss_compat.so.2 /lib64/libnss_files.so.2 /lib64/libnss_dns.so.2 /lib64/libxcrypt.so.2 /home/jail/lib64/
sudo cp -r /lib64/security/ /home/jail/lib64/

Но теперь, когда я пытаюсь подключиться к пользователю user1, набирая его имя su user1, а затем вводя его пароль, я получаю эту ошибку:

could not open session

Итак, вопрос в том, как подключиться к user1 в этой ситуации?

P.S. Вот разрешения некоторых файлов, это может быть полезно для поиска решения:

-rwsr-xr-x 1 root root /home/jail/bin/su
drwxr-xr-x 4 root root /home/jail/etc
-rw-r--r-- 1 root root /home/jail/etc/pam.d/su
-rw-r--r-- 1 root root /home/jail/etc/passwd
-rw------- 1 root root /home/jail/etc/shadow

ОБНОВЛЕНИЕ1

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

Вот запись в журнале для действия закрытия /val/log/secure:

Oct  6 15:19:42 localhost su: pam_unix(su:session): session closed for user user1

Что заставляет сессию завершаться сразу после запуска?

решение1

Чтобы исправить could not open sessionпроблему, не отказываясь полностью от make_chroot_jail.sh, вам также нужно скопировать /usr/lib/libcrack*библиотеки. Отредактируйте скрипт, где он имеет:

# If you are using a 64 bit system and have strange problems with login comment
# the following lines in, perhaps it will work (motto: if you can't find the
# needed library just copy all of them)
#
# cp /lib/*.* ${JAILPATH}/lib/
# cp /lib/lib64/*.* ${JAILPATH}/lib/lib64/

Изменить на:

cp /lib/*.* ${JAILPATH}/lib/
cp /lib64/*.* ${JAILPATH}/lib64/
cp -rp /lib64/security ${JAILPATH}/lib64/
cp /usr/lib64/libcrack* ${JAILPATH}/usr/lib64/

Просто небольшое дополнение, вышеизложенное исправило эту проблему с 64-битной SuSE - SLES 11 sp2. Я также переименовал в $JAILPATH/lib. $JAILPATH/lib64И для этой ОС мне пришлось добавить пустой файл /etc/profile в джейл (вы можете использовать его для вставки приглашения PS1).

решение2

Я нашел решение.

Прежде всего, вам следует забыть о make_chroot_jail.sh и использоватьJailkit.

У меня возникли некоторые проблемы при использовании, но в итоге все заработало.

Вот шаги, которые я выполнил с помощью Jailkit и как я исправил возникавшие проблемы:

А. Сделайте ./configure; make; make installтак, как описано в INSTALL.txt.

Б. Добавить, /usr/sbinесли $PATHего еще нет.

В. Сделайте это:

jk_init -v -j /home/jail basicshell editors extendedshell netutils ssh sftp scp

Это может привести к сбою с таким сообщением об ошибке:

`ERROR: configfile /usr/jk_init.ini does not exist`

Чтобы исправить это, /usr/sbin/jk_initизмените INIPREFIX='/usr'на INIPREFIX='/etc/jailkit' и повторите попытку.

D. Сделайте это:

jk_jailuser -v -m -j /home/jail customer01

Это может привести к сбою с таким сообщением об ошибке:

invalid shell, /home/jail/usr/sbin/jk_lsh does not exist

Чтобы исправить, сделайте следующее:

jk_init -v -j /home/jail jk_lsh

и попробуйте еще раз. Вместо этого вы можете добавить jk_lshв список на шаге C.

E. Теперь при попытке подключения к customer01 соединение может выйти сразу после запуска. Чтобы исправить эту проблему, /home/jail/etc/passwdизмените оболочку customer01 и установите ее на bash следующим образом:

customer01:x:518:601::/home/customer01:/bin/bash

вместо этого:

customer01:x:518:601::/home/customer01:/usr/sbin/jk_lsh

Связанный контент