chroot 감옥을 만든 후 su에 실패했습니다.

chroot 감옥을 만든 후 su에 실패했습니다.

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에 어떻게 연결하느냐는 것입니다.

PS 다음은 일부 파일의 권한입니다. 이는 솔루션을 제공하는 데 도움이 될 수 있습니다.

-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

make_chroot_jail.sh를 완전히 버리지 않고 문제를 해결하려면 라이브러리 could not open session도 복사해야 합니다 /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. 그리고 해당 OS의 경우 감옥에 빈 /etc/profile 파일을 추가해야 했습니다(이 파일을 사용하여 PS1 프롬프트에 넣을 수 있습니다).

답변2

해결책을 찾았습니다.

우선 make_chroot_jail.sh를 잊어버리고 사용해야 합니다.제일키트.

나는 그것을 사용하는 동안 몇 가지 문제에 직면했지만 결국 모든 것이 작동합니다.

Jailkit을 사용하는 방법과 발생한 문제를 해결하는 방법은 다음과 같습니다.

A. ./configure; make; make install에 설명된 대로 수행하십시오 INSTALL.txt.

B. 아직 없는 경우 /usr/sbin추가 합니다.$PATH

C. 이렇게 하세요:

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_lshC단계에서 목록에 추가할 수도 있습니다.

E. 이제 customer01에 연결을 시도하면 실행 직후 연결이 종료될 수 있습니다. 이 문제를 해결하려면 /home/jail/etc/passwdcustomer01의 셸을 변경하고 다음과 같이 bash로 설정하세요.

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

대신에:

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

관련 정보