사용자의 홈 디렉터리 결정

사용자의 홈 디렉터리 결정

Linux 사용자의 홈 디렉터리를 확인하는 방법을 알아야 합니다. 모두의 대답은 “야, 그냥 보면 /etc/passwd알게 될 거야.” 였습니다. 그러나 이것이 항상 사실인 것 같지는 않습니다. 이거 봐요:

$ whoami
test
$ cat /etc/passwd
test:x:2000:2000::/home/test:/bin/bash  (relevant line)
$ echo ~
/root
$ cd
bash: cd: /root: No such file or directory

무슨 일이 일어났는지 정말 모르겠어요. 이것은 내가 root 로 입력하는 하위 시스템입니다 chroot --userspec=test path/to/subsystem/ /bin/bash. 이것이 무엇인지, ~확장 프로그램이 예상 /home/test대로 작동 하도록 수정하는 방법을 아는 사람이 있나요 cd?

답변1

로컬 사용자 계정의 경우 조회가 /etc/passwd정확합니다(시스템 관리자가 일을 어렵게 만들지 않는 한). 일반적인 올바른 대답은 LDAP와 같은 사용자 계정이 포함된 사용자 데이터베이스를 살펴보는 것입니다. 대부분의 최신 시스템에서는국가안보국사용자 데이터베이스를 나열하므로 확인하십시오./etc/nsswitch.conf로컬이 아닌 계정이 있다고 생각되면 시스템에 설치하십시오.

애플리케이션의 관점에서 볼 때 정답은 홈 디렉터리가 HOME환경 변수가 말하는 디렉터리라는 것입니다.

로그인 프로그램( login, sshd, X 디스플레이 관리자 등)은 일반적으로 HOME로그인한 사용자의 홈 디렉터리에 환경 변수를 설정합니다. susudo변경 과 같은 "고급" 사용자 변경 프로그램 HOME(구성 및 명령줄 옵션에 따라 sudo 사용). 따라서 일반적으로 "현재 사용자의 홈 디렉터리" 정의는 "사용자의 홈 디렉터리"와 "현재 사용자"의 조합과 일치합니다.

그러나 chroot이는 변경되지 않으므로 HOMEchroot의 세션이 상위 프로세스로부터 환경 변수를 상속받는 HOME것은 놀라운 일이 아닙니다 /root. 다른 쉘과 마찬가지로 bash에서는 설정되지 않은 경우 기본적으로 사용자 데이터베이스 조회로 ~설정되는 값으로 확장됩니다 .HOMEHOME

해결책: 설정을 취소하십시오 HOME.

env -u HOME chroot --userspec=test path/to/subsystem/ /bin/bash

관련 정보