Linux는 사용자를 어떻게 식별합니까?

Linux는 사용자를 어떻게 식별합니까?

내 말은, 두 명의 사용자가 동일한 이름을 가지고 있는 경우 파일 권한을 시행할 때 시스템이 그들이 실제로 다른 사용자인지 어떻게 알 수 있습니까?

/home/old-arch새로운 원래 파티션을 가질 수 있도록 시스템을 다시 설치하기 전에(나만 /home의 파티션이 있고 포맷하지 않음) 집 이름을 바꿀 생각을 하고 있으므로 /home/arch새 시스템이 나에게 해당 파티션을 제공할지 궁금합니다. 파일을 이전 권한으로 인식하거나 다른 것으로 인식할 것입니다 arch.

답변1

/etc/{shadow,passwd}동일한 사용자 이름을 가진 여러 사용자를 강제로 사용하면 동일한 이름을 가진 항목이 여러 개 있게 됩니다 .

$ cat /etc/passwd
...
a:x:1001:1002::/home/a:/bin/bash
a:x:1002:1003::/home/b:/bin/bash

# cat /etc/shadow
a:...:17702:0:99999:7:::
a:...:17702:0:99999:7:::

해당 사용자로 로그인을 시도하면 일치하는 첫 번째 사용자로 로그인됩니다.

$ ssh a@<host>
Password:
$ id
uid=1001(a) gid=1002(a) groups=1002(a)
$ pwd
/home/a

동일한 이름으로 두 번째 사용자로 로그인할 수 없습니다.

Linux는 사용자 이름이 아닌 uid로 사용자를 추적합니다.

그러나 두 개의 서로 다른 사용자 이름이 동일한 사용자 ID일 수 있습니다. 다른 버전을 고려해보세요 /etc/passwd.

$ cat /etc/passwd
...
a:x:1001:1002::/home/a:/bin/bash
b:x:1001:1002::/home/b:/bin/bash

ausername 과 username 모두 b세 번째 열은 1001입니다. 이는 uid/사용자 ID입니다. 이제 한 명 a이상의 사용자가 b로그인하면(다른 비밀번호를 사용하더라도) 모두 "사용자 1001"이 되며 a운영 체제 관점에서 사용자로 표시됩니다. 여기서 첫 번째로 일치하는 항목도 반환된 항목입니다(대부분의 경우).

$ ssh a@host
Password: <a's password>
$ id
uid=1001(a) gid=1002(a) groups=1002(a)

$ ssh b@host
Password: <b's password>
$ id
uid=1001(a) gid=1002(a) groups=1002(a)

및 둘 다 uid 이며 auid로 사용 가능한 리소스에 액세스할 수 있습니다.b10011001

답변2

Unix에서 사용자는 고유한 ID(uid)로 식별됩니다(로컬 시스템 전체에서). 따라서 동일한 이름을 가진 2명의 다른 사용자를 생성하는 것이 가능하더라도(내 시스템의 adduser는 이를 거부합니다. 자세한 내용은 이 질문을 참조하세요.서로 다른 UNIX 계정이 사용자 이름을 공유하지만 별도의 비밀번호를 가질 수 있습니까?), 그들은 다른 uid를 얻어야 합니다. 기준에 맞게 사용자 정보가 포함된 파일을 조작할 수 있지만 각 프로그램은 uid가 시스템에서 고유하므로 해당 사용자에게도 동일할 것이라고 가정합니다.

편집: 또 다른 답변은 동일한 uid에 대해 2개의 다른 사용자 이름이 있는 경우를 보여줍니다. 그러나 시스템에 관한 한 이는 2개의 다른 이름을 가진 동일한 사용자와 같으므로 특별히 원하지 않는 한 이러한 구성은 가능하면 피해야 합니다. 시스템의 사용자에 대한 별칭을 생성하려면(참조유닉스 사용자 별칭기술적인 세부 사항에 대한 자세한 내용은 서버 오류에 대한 질문을 참조하세요.

시스템은 이러한 uid를 사용하여 파일 권한을 적용합니다. 파일이 속한 사용자의 uid 및 gid(그룹 ID)가 파일의 메타데이터에 기록됩니다. 동일한 uid를 무작위로 공유하는 다른 사용자가 있는 다른 컴퓨터로 디스크를 가져가면 해당 파일은 갑자기 해당 시스템의 해당 사용자에게 속하게 됩니다. 유닉스 시스템에서 uid가 일반적으로 16비트 정수를 넘지 않는다는 사실은 uid가 전역적으로 고유한 것이 아니라 로컬 시스템 내에서만 고유하다는 것을 의미합니다.

답변3

/home/old-arch시스템을 다시 설치하기 전에 집 이름을 바꾸는 것을 고려하고 있습니다 . 새 시스템이 내 파일에 대한 이전 권한을 부여할지, 아니면 나를 다른 아키텍처로 인식할지 궁금합니다.

단일 사용자 시스템이 있고 동일하거나 유사한 배포판을 사용하여 다시 설치하는 경우 사용자 계정은 대부분 동일한 사용자 ID를 가지므로 커널 관점에서 볼 때 동일한 사용자입니다. 예를 들어, Debian 시스템에서 설치 중에 생성된 사용자의 UID는 1000이라는 것을 알고 있습니다. 다른 시스템에서는 다른 숫자를 사용할 수 있지만 모든 설치에서 동일한 작은 정수가 될 가능성이 높습니다.

UID는 일반적으로 순차적으로 할당되므로 다른 사용자(있는 경우)에게도 동일하게 적용됩니다. 생성된 세 번째 사용자는 다른 시스템에서 생성된 세 번째 사용자와 동일한 UID를 가질 수 있습니다. UID가 두 시스템 모두에서 재사용되지 않도록 사전에 조치를 취해야 합니다.

비슷한 이유로 NFS를 사용하는 모든 것에는 공유 사용자 데이터베이스가 필요합니다.

하지만 이 경우에는 개인용 시스템이므로 chown newuser. -R /home/olduserUID가 달라도 루트로 로그인하여 실행할 수 있습니다.

(Windows 시스템은 다르며 무작위로 더 긴 ID 문자열을 생성합니다. 여기서 디스크를 다른 컴퓨터로 옮기면 파일은 알 수 없는 사용자가 소유한 것으로 간주되며 관리자 권한이 없으면 액세스할 수 없습니다.

그리고 위에서도 "어쩌면"이라고 많이 말했어요. 일부 배포판이 다르게 동작하는지 알 수 없습니다. 최신 Linux는 32비트 UID도 지원하므로 Windows SID만큼 길지는 않지만 임의의 UID 등을 원하는 경우 작업할 수 있는 공간이 여전히 있습니다. 그러나 일반적으로 이것은 별로 쓸모가 없습니다. 시스템 관리자는 시스템에 어떤 디스크를 연결했는지 알고 이에 따라 파일 소유권을 조정하거나 다른 사용자가 마운트 지점에 액세스할 수 없도록 해야 합니다. )

답변4

유닉스는 아주 오래된 시스템으로, 저장 용량이 매우 적고 파일과 사용자를 포함한 모든 것이-숫자로 식별.나중에 이름이 나왔네요, 스토리지가 조금 늘어난 후.

이 시스템으로그게 다야이름은 단지 라벨일 뿐이다실제 핸들에 연결됨: 숫자 ID. 따라서 사용자에 대해 여러 이름을 가질 수 있고(/etc/passwd 직접 편집) 파일에 대해 여러 이름을 가질 수 있습니다(파일을 한 번만 저장하고 여러 위치에서 보는 데 유용함).

제한 사항은 사용자의 시스템 및 파일 파티션입니다.

나는 단지 명확하게 하기 위해, 상황이 왜 그런 것인지 설명하기 위해 이것을 말하는 것입니다..

이름은 같지만 ID가 다른 다른 방법을 시도한 적이 없다는 점을 인정해야 합니다. 저는 항상 불가능하다고 생각했습니다. 응? 실수가 아닌가요?

관련 정보