최근에 서버를 다시 시작했는데 ecryptfs 마운트가 실패했습니다.
...
사용자 키링에서 서명을 찾을 수 없습니다.
대화식 "ecryptfs-mount-private"
user@host:~$를 시도해 보세요.
비밀번호가 변경되었기 때문인가요?
하지만,
1. There's no mount password
2. We might have login password
마운트된 디렉터리를 복원하려고 하면 다음이 출력됩니다.
user@host:~$ ls
Access-Your-Private-Data.desktop README.txt
user@host:~$ ecryptfs-mount-private
Enter your login passphrase:
Error: Unwrapping passphrase and inserting into the user session keyring failed [-5]
Info: Check the system log for more information from libecryptfs
ERROR: Your passphrase is incorrect
Enter your login passphrase:
user@host:~$ sudo ecryptfs-mount-private
[sudo] password for user:
Enter your login passphrase:
Inserted auth tok with sig [ad21fabcda6abfeab] into the user session keyring
fopen: No such file or directory
user@host:~$
보시다시피 이상한 오류가 표시됩니다. fopen: No such file or directory
그리고 ecryptfs-mount-private
- 없이 실행하면 sudo
실패합니다. 로그인 비밀번호를 사용하여 폴더를 마운트하면 ecrypts-recover-private
참처럼 작동하여 임시 폴더에 마운트됩니다.
또한 시도했지만 ecryptfs-rewrap-password
성공하지 못했습니다.아니요 sudo
. 따라서 sudo ecryptfs-rewrap-password
repackage를 사용하면 성공하지만 재부팅 후에도 동일한 상황이 지속됩니다.
요약하자면, 로그인 시 암호화된 홈 디렉토리의 자동 마운트를 수정하는 방법은 무엇입니까?
답변1
ecryptfs 개인 폴더를 설정하고 테스트를 위해 래핑된 비밀번호 파일에서 읽기 및 쓰기 권한을 제거했습니다... 메시지를 본 후 즉시 syslog를 확인했다면
Info: Check the system log for more information from libecryptfs
다음과 같은 줄이 표시됩니다.
1월 15일 00:21:48 sys ecryptfs-insert-wrapped-passphrase-into-keyring: 래핑된 암호 버전을 감지할 수 없습니다:허가가 거부되었습니다
1월 15일 00:21:48 sys ecryptfs-insert-wrapped-passphrase-into-keyring:실수비밀번호를 잠금해제해 보세요.파일에서 [/home/user/.ecryptfs/wrapped-passphrase];rc = [-13]
이는 ~/.ecryptfs/wrapped-passphrase 파일의 권한 확인을 가리키는 매우 강력한 화살표가 될 것입니다. (sudo 또는 strace가 필요하지 않음)
전체적으로, ecryptfs-mount-private
마운트하려는 동일한 사용자와 동일한 디렉토리에서 명령을 실행하고 있고 wrapped-passphrase
파일에 다음이 있는지 확인하십시오.-rw--------또는(600) 권한 및 암호화된 디렉터리와 동일한 소유자입니다.
답변2
즉, 사용자의 파일에 wrapped-passphrase
잘못된 권한이 있습니다(이어야 합니다 -rw------- user user
, 입니다 -rw------- root root
).
다음 명령을 사용하여 명령을 실행합니다 ecryptfs-mount-private
(로그인 비밀번호 입력) strace
.
strace -o /tmp/strace.log -e trace=file ecryptfs-mount-private
콘텐츠 /tmp/strace.log
:
user@host:~$ sudo strace -o /tmp/strace.log -e trace=file ecryptfs-mount-private
[sudo] password for user:
Enter your login passphrase:
Inserted auth tok with sig [3ab5cd8e5f8c5acb] into the user session keyring
fopen: No such file or directory
user@host:~$ cat /tmp/strace.log
execve("/usr/bin/ecryptfs-mount-private", ["ecryptfs-mount-private"], [/* 13 vars */]) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
getcwd("/home/user", 4096) = 9
open("/usr/bin/ecryptfs-mount-private", O_RDONLY) = 3
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3872, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
stat("/home/user/.ecryptfs/wrapping-independent", 0x7fff65e61c30) = -1 ENOENT (No such file or directory)
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3873, si_uid=0, si_status=1, si_utime=0, si_stime=0} ---
stat("/home/user/.ecryptfs/wrapped-passphrase", {st_mode=S_IFREG|0600, st_size=58, ...}) = 0
stat("/home/user/.ecryptfs/Private.sig", {st_mode=S_IFREG|0600, st_size=34, ...}) = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3874, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
stat("/usr/local/sbin/stty", 0x7fff65e61c40) = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/stty", 0x7fff65e61c40) = -1 ENOENT (No such file or directory)
stat("/usr/sbin/stty", 0x7fff65e61c40) = -1 ENOENT (No such file or directory)
stat("/usr/bin/stty", 0x7fff65e61c40) = -1 ENOENT (No such file or directory)
stat("/sbin/stty", 0x7fff65e61c40) = -1 ENOENT (No such file or directory)
stat("/bin/stty", {st_mode=S_IFREG|0755, st_size=72496, ...}) = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3875, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3876, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3877, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3878, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3879, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3880, si_uid=0, si_status=0, si_utime=68, si_stime=0} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3881, si_uid=0, si_status=1, si_utime=0, si_stime=0} ---
+++ exited with 1 +++
따라서 정보가 충분하지 않다는 것을 알 수 있습니다. 동일한 명령을 실행합니다(로그인 비밀번호 입력). 그러나 -f
플래그를 사용하여 하위 프로세스를 추적하고 사용합니다.뿌리오른쪽:
sudo strace -o /tmp/strace2.log -f -e trace=file ecryptfs-mount-private`
파일의 일부 /tmp/strace2.log
:
...
3963 open("/root/.ecryptfsrc", O_RDONLY) = -1 ENOENT (No such file or directory)
3963 open("/home/user/.ecryptfs/wrapped-passphrase", O_RDONLY) = 3
...
3964 open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
3964 open("/root/.ecryptfs/Private.mnt", O_RDONLY) = -1 ENOENT (No such file or directory)
3964 open("/dev/shm/ecryptfs-root-Private", O_RDWR|O_CREAT|O_NOFOLLOW, 0600) = 3
3964 open("/root/.ecryptfs/Private.sig", O_RDONLY) = -1 ENOENT (No such file or directory)
3964 +++ exited with 1 +++
3954 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3964, si_uid=0, si_status=1, si_utime=0, si_stime=0} ---
3954 +++ exited with 1 +++
보시다시피 Private.sig
파일을 찾을 수 없습니다뿌리;특정 디렉터리 내에서가 아니라 복원하려는 암호화된 디렉터리의 사용자가 실행해야 하는 것 같습니다.
요약하자면, 사용자 권한(로그인 비밀번호 입력)으로 이 명령을 실행했습니다.
strace -o /tmp/strace3.log -f -e trace=file ecryptfs-mount-private`
파일의 일부 /tmp/strace3.log
:
...
4137 open("/lib/x86_64-linux-gnu/libnss_nis.so.2", O_RDONLY|O_CLOEXEC) = 3
4137 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
4137 open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
4137 open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
4137 open("/home/user/.ecryptfsrc", O_RDONLY) = -1 ENOENT (No such file or directory)
4137 open("/home/user/.ecryptfs/wrapped-passphrase", O_RDONLY) = -1 EACCES (Permission denied)
4137 open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
4137 +++ exited with 1 +++
4112 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=4137, si_uid=1000, si_status=1, si_utime=0, si_stime=0} ---
...
지금 볼 수 있듯이 ecryptfs-mount-private
유틸리티는 사용자의 wrapped-passphrase
파일에 액세스할 수 없으므로 다음과 같은 결과가 발생합니다.허가가 거부되었습니다정보.
/home/user/.ecryptfs/wrapped-passphrase
파일의 권한을 확인하세요 . 권한은 다음과 같습니다.
-rw------- 1 root root
sudo chown user:user /home/user/.ecryptfs/wrapped-passphrase
사용자가 파일의 소유자를 변경하고 ecryptfs-mount-private
strace를 사용하지 않고(로그인 비밀번호 입력) 위( ) 명령을 다시 실행하여 다음과 같은 결과가 발생했습니다.성공정보:
INFO: Your private directory has been mounted.
INFO: To see this change in your current shell:
cd: /home/user