"ecryptfs-mount-private"은 "fopen: 해당 파일 또는 디렉터리가 없습니다"를 반환합니다.

"ecryptfs-mount-private"은 "fopen: 해당 파일 또는 디렉터리가 없습니다"를 반환합니다.

최근에 서버를 다시 시작했는데 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-passwordrepackage를 사용하면 성공하지만 재부팅 후에도 동일한 상황이 지속됩니다.

요약하자면, 로그인 시 암호화된 홈 디렉토리의 자동 마운트를 수정하는 방법은 무엇입니까?

답변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-privatestrace를 사용하지 않고(로그인 비밀번호 입력) 위( ) 명령을 다시 실행하여 다음과 같은 결과가 발생했습니다.성공정보:

INFO: Your private directory has been mounted.
INFO: To see this change in your current shell:
  cd: /home/user

관련 정보