2人のユーザーが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、同じユーザー。
あなたが作っているのは、同じユーザーがログインする2つの異なる方法です。ユーザーは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の間の1対1の対応を想定しているため、ユーザーが複数の名前を持つ場合の動作は常に最適ではありません。実際にこれをしてはいけません。ほとんどの場合、うまくいきますが、時々起こる奇妙な状況に備えてください。