두 명의 사용자가 UID 0을 갖는 시스템에 액세스할 수 있습니다.
host:~ # cat -n /etc/passwd | grep -E "root|testuser"
1 root:x:0:0:root:/root:/bin/bash
31 testuser:x:0:0:testuser:/root/testuser:/bin/bash
host:~ #
예를 들어, 이로 인해 일반적으로 내 사용자 이름을 사용하여 시스템에 SSHing(키 기반 인증)이 이루어지며 testuser
, 나는 다음과 같이 식별됩니다 root
.
host:~ # id
uid=0(root) gid=0(root) groups=0(root)
host:~ # ls -ld /root/testuser
drwxr-xr-x 3 root root 352 Jan 25 01:02 /root/testuser
host:~ #
host:~ # ls -ld /root/testuser/.ssh/
drwx------ 2 root root 80 Nov 18 15:38 /root/testuser/.ssh/
host:~ #
그러나 로그인 세션 도중에 다음과 같이 인식되는 경우가 있습니다 testuser
.
host:~ # ls -ld /root/testuser
drwxr-xr-x 3 testuser root 352 Dec 16 18:39 /root/testuser
host:~ #
이것이 나를 괴롭히지는 않지만, 이러한 중복된 UID 설정으로 인해 디렉토리와 파일 소유권 testuser
도 엉망이 되기 때문에 항상 이 시스템에 SSH로 접속할 수 있는 방법이 혼란스럽습니다 ./root/testuser/.ssh/
/root/testuser/.ssh/authorized_keys
답변1
"동일한 UID를 가진 여러 사용자" 상황은 없습니다.. UID는 사용자를 식별합니다. 동일한 UID, 동일한 사용자.
당신이 만들고 있는 것은 동일한 사용자가 로그인하는 두 가지 다른 방법입니다. 사용자는 UID 0입니다. 항목에 정의된 root
비밀번호를 사용하여 UID 0으로 로그인할 수 있으며 , 이러한 자격 증명을 사용하면 환경 변수가 설정되고 프로그램이 실행됩니다. UID 0 항목에 정의된 비밀번호를 사용하여 UID 0 이름을 사용하여 로그인할 수도 있으며 , 이러한 자격 증명을 사용하면 환경 변수가 로 설정되고 프로그램이 실행됩니다 .root
/etc/shadow
HOME
/root
/bin/bash
testuser
testuser
/etc/shadow
HOME
/root/testuser
/bin/bash
커널은 사용자 이름이 아닌 사용자 ID만 알고 있습니다. 파일 시스템은 사용자 이름이 아닌 사용자 ID만 저장합니다. 사용자 이름은 파일 및 프로세스와 같은 시스템 개체에 대한 액세스 제어에 사용되지 않습니다. 대부분의 프로그램은 사용자에 대한 정보를 표시해야 할 때 사용자 ID를 사용자 이름으로 변환하고, 사용자와 관련된 일부 정책을 구현해야 할 때 사용자 이름을 사용자 ID로 변환합니다.
당신이 보고 있는 파일은 사용자 0의 것입니다. 실행하면 ls
파일 소유자가 0이라는 정보를 수신하고 사용자 0에 대한 정보를 검색하여 보다 친숙한 방식으로 표시합니다. 이는 일반적으로 의 첫 번째 항목을 반환하는데 /etc/passwd
, 가끔 그런 항목이 표시되는 이유를 설명할 수 없습니다 testuser
.
많은 도구는 암시적으로 사용자 이름과 사용자 ID 간의 일대일 대응을 가정하므로 사용자가 여러 이름을 가질 때의 동작이 항상 최적인 것은 아닙니다. 실제로 이렇게 하면 안 됩니다. 대부분의 경우 효과가 있지만 가끔씩 발생하는 이상한 상황에 대비해야 합니다.