내 컴퓨터에 해당 버전이 debootstraped
있고 비밀번호를 변경하고 싶습니다.wheezy
Archlinux
root
echo "root:toor" | chpasswd --root /home/containers/wheezy/
하지만 오류가 발생합니다.
chpasswd: PAM: Permission denied
root
내 로컬 사용자에서는 잘 작동합니다( --root
옵션 없음).
이 man
페이지에는 다음 사항이 명확하게 명시되어 있습니다.
-R, --root CHROOT_DIR
CHROOT_DIR 디렉터리에 변경 사항을 적용하고 CHROOT_DIR 디렉터리의 구성 파일을 사용합니다.
그럼 내가 뭘 잘못하고 있는 걸까요? 어떻게 PAM
참여하나요? 다른 방법이 있나요?
편집하다
# echo "root:toor" | sudo strace -f -efile,execve chpasswd --root /home/containers/wheezy/
아래는 불평을 시작하는 출력입니다 chpasswd
.
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
open("/usr/share/locale/en_GB.UTF-8/LC_MESSAGES/Linux-PAM.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_GB.utf8/LC_MESSAGES/Linux-PAM.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_GB/LC_MESSAGES/Linux-PAM.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.UTF-8/LC_MESSAGES/Linux-PAM.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.utf8/LC_MESSAGES/Linux-PAM.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/Linux-PAM.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_GB.UTF-8/LC_MESSAGES/shadow.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_GB.utf8/LC_MESSAGES/shadow.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_GB/LC_MESSAGES/shadow.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.UTF-8/LC_MESSAGES/shadow.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.utf8/LC_MESSAGES/shadow.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/shadow.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
chpasswd: PAM: Permission denied
+++ exited with 1 +++
편집 2
chpasswd
대상 컨테이너에 예상되는 파일이 다음을 제외한 다른 많은 언어로 찾을 수 있음 을 발견했습니다 .영어:
# find /usr/share/locale/ -iname '*Linux-PAM.mo*'
/usr/share/locale/hu/LC_MESSAGES/Linux-PAM.mo
/usr/share/locale/zh_CN/LC_MESSAGES/Linux-PAM.mo
/usr/share/locale/it/LC_MESSAGES/Linux-PAM.mo
/usr/share/locale/zu/LC_MESSAGES/Linux-PAM.mo
/usr/share/locale/ko/LC_MESSAGES/Linux-PAM.mo
/usr/share/locale/or/LC_MESSAGES/Linux-PAM.mo
/usr/share/locale/nl/LC_MESSAGES/Linux-PAM.mo
/usr/share/locale/sk/LC_MESSAGES/Linux-PAM.mo
/usr/share/locale/ja/LC_MESSAGES/Linux-PAM.mo
/usr/share/locale/da/LC_MESSAGES/Linux-PAM.mo
/usr/share/locale/uk/LC_MESSAGES/Linux-PAM.mo
...
/usr/share/locale/pt_BR/LC_MESSAGES/Linux-PAM.mo
/usr/share/locale/ta/LC_MESSAGES/Linux-PAM.mo
참고: 대상 컨테이너 와 동일한 기대치는 en_GB
무엇 chpasswd
입니까 ? uk
..
필요한 파일이 포함된 것으로 보이는 패키지를 다시 설치해 보았습니다.
apt-get install --reinstall libpam-runtime login locales locales-all
그러나 그것은 전혀 도움이 되지 않습니다.
편집 3
대상 컨테이너에서 실행 하면 strace
다음 파일을 찾지 않습니다.
# echo "root:toor2" | strace -f -e open chpasswd --root /
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib/x86_64-linux-gnu/libpam.so.0", O_RDONLY) = 3
open("/lib/x86_64-linux-gnu/libpam_misc.so.0", O_RDONLY) = 3
open("/lib/x86_64-linux-gnu/libselinux.so.1", O_RDONLY) = 3
open("/lib/x86_64-linux-gnu/libcrypt.so.1", O_RDONLY) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY) = 3
open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY) = 3
open("/proc/filesystems", O_RDONLY) = 3
open("/etc/pam.d/chpasswd", O_RDONLY) = 3
open("/etc/pam.d/common-password", O_RDONLY) = 4
open("/lib/x86_64-linux-gnu/security/pam_unix.so", O_RDONLY) = 5
open("/etc/ld.so.cache", O_RDONLY) = 5
open("/lib/x86_64-linux-gnu/libnsl.so.1", O_RDONLY) = 5
open("/lib/x86_64-linux-gnu/security/pam_deny.so", O_RDONLY) = 5
open("/lib/x86_64-linux-gnu/security/pam_permit.so", O_RDONLY) = 5
open("/etc/pam.d/other", O_RDONLY) = 3
open("/etc/pam.d/common-auth", O_RDONLY) = 4
open("/etc/pam.d/common-account", O_RDONLY) = 4
open("/etc/pam.d/common-password", O_RDONLY) = 4
open("/etc/pam.d/common-session", O_RDONLY) = 4
open("/etc/passwd", O_RDONLY) = 3
open("/etc/passwd", O_RDONLY) = 3
open("/etc/nsswitch.conf", O_RDONLY) = 3
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib/x86_64-linux-gnu/libnss_compat.so.2", O_RDONLY) = 3
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib/x86_64-linux-gnu/libnss_nis.so.2", O_RDONLY) = 3
open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY) = 3
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
open("/etc/shadow", O_RDONLY|O_CLOEXEC) = 3
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
open("/etc/shadow", O_RDONLY|O_CLOEXEC) = 3
open("/etc/passwd", O_RDONLY) = 3
open("/etc/passwd", O_RDONLY) = 3
open("/etc/.pwd.lock", O_WRONLY|O_CREAT|O_CLOEXEC, 0600) = 3
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 4
open("/etc/shadow", O_RDONLY|O_CLOEXEC) = 4
open("/dev/urandom", O_RDONLY) = 4
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 4
open("/etc/passwd", O_RDONLY) = 4
open("/etc/nshadow", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 4
open("/etc/shadow", O_RDONLY) = 5
open("/etc/localtime", O_RDONLY) = 4
Process 7760 attached
Process 7759 suspended
Process 7759 resumed
Process 7760 detached
--- SIGCHLD (Child exited) @ 0 (0) ---
편집 4
Debian Jessie
마지막으로 동일한 컨테이너에서 동일한 명령을 실행했습니다.일했다. 이 경우 는 다른 구현으로
해결되었습니다 .Wheezy
Archlinux
chpasswd
내 생각에 이 문제에 대한 가장 좋은 휴대용 솔루션은 다음과 같습니다.@petercordes:
echo 'root:toor' | chroot /home/containers/wheezy/ /usr/sbin/chpasswd
답변1
Selinux/Ubuntu 대안이 될 수 있습니다.
selinux를 올바르게 사용하는 방법에 대한 훌륭한 비디오: https://www.youtube.com/watch?v=bQqX3RWn0Yw
저는 우분투(의복인 것 같아요?) 전문가가 아니기 때문에 도움을 드릴 수 없습니다.
답변2
PAM에는 비밀번호 강도 확인과 같은 작업을 수행하는 방식인 비밀번호 변경이 포함됩니다. password
PAM 구성의 항목은 수행되는 작업을 제어합니다.
이 경우 내 가설은 Arch와 Debian 사이에 이상한 상호 작용이 있다는 것입니다. 당신은 Arch를 실행하고 있으며 chpasswd
, 많은 작업(주로 공유 라이브러리 로드)을 수행한 다음 Wheezy 컨테이너로 이동하여 구성을 조정하려고 시도합니다.
--root
내 생각에 당신은 그 옵션을 포기 chpasswd
하고 chroot
그 앞에 콜을 하는 것만으로도 훨씬 더 나은 행운을 얻을 수 있다고 생각합니다.
또한 완전성을 위해예루트로 실행하세요 chpasswd
. 그렇죠? (웃다)