Linuxはユーザーをどのように識別しますか?


9

つまり、2人のユーザーが同じ名前を持っている場合、システムは、ファイルのアクセス許可を適用するときに、実際には異なるユーザーであることをどのようにして知るのでしょうか。

/home/old-archシステムを再インストールする前に家の名前を変更することを検討しているときにこの疑問が浮かびました(私は/home独自のパーティションにあり、フォーマットしていません)/home/arch。それにより、新しい、元の状態に戻すことができました。新しいシステムが私のファイルに対する古い許可を与えるのか、それとも私を別のものとして認識するのかと思ったarch


12
同じユーザー名を持つ複数のユーザーがいることを想定していないため、簡単な答えは「しない」です。
Ignacio Vazquez-Abrams

6
UIDは区別されますが、通常はユーザー名に関連付けられており、この種のことが追跡されます。の出力を参照してくださいls -n
DopeGhoti

5
「送信」は曖昧すぎて質問に答えられません。パーミッションは単一のシステム(任意のサイズ)にのみ適用されます。
イグナシオバスケス-エイブラムス

1
@ IgnacioVazquez-Abramsこの質問は/home/old-arch、システムを再インストールする前に家の名前を変更することを検討しているときに実際に思い付きました(/home独自のパーティションにあり、フォーマットしていません)/home/arch。私は自分のファイルに対して同じ権限を保持するのか、それともシステムが私を別のものとして認識するのか疑問に思いましたarch
アーチスタントン

1
あなたがコメントで言及しているケースは興味深いと思います。同じユーザー名を持つ2人のユーザーについてですが、同じマシンにインストールされた異なるシステム上で、共有パーティション上の同じファイルにアクセスします。おそらくあなたはそれを質問に追加できますか?
Time4Tea

回答:


10

Unixでは、ユーザーはID(uid)で識別されます。これは、(ローカルシステムのスコープ内で)一意である必要があります。したがって、同じ名前で2人の異なるユーザーを作成することができたとしても(私のシステムのadduserがこれを拒否しています。詳細については、この質問を参照してください。別々のUNIXアカウントがユーザー名を共有できますが、別々のパスワードはありますか?)、それらを取得する必要があります。異なるuid。基準に一致するようにユーザー情報を含むファイルを操作できる場合がありますが、すべてのプログラムはuidがシステム上で一意であるという前提に基づいているため、そのようなユーザーは同じです。

編集:他の回答は、同じuidに2つの異なるユーザー名がある場合を示しています-システムに関する限り、これは同じユーザーに2つの異なる名前があるようなものなので、このような構成は可能な限り避ける必要があります、特にシステム上のユーザーのエイリアスを作成する場合を除き(技術的な詳細については、serverfaultのUNIXユーザーエイリアスの質問を参照してください)。

システムはこれらのuidを使用してファイルのアクセス許可を適用します。ファイルが属するユーザーのuidおよびgid(グループID)は、ファイルのメタデータに書き込まれます。同じuidをランダムに共有する別のユーザーがいる別のコンピューターにディスクを持ち運ぶと、ファイルはそのシステムのこのユーザーに突然属します。UNIXシステムではuidは通常16ビット整数以下であることを知っているため、これはuidがグローバルに一意である必要はなく、ローカルシステムのスコープ内でのみ一意であることを示しています。


22

同じユーザー名の複数のユーザーが存在するように強制する/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

同じ名前の2番目のユーザーとしてログインする方法はありません。

Linuxは、ユーザー名ではなくuidでユーザーを追跡することに注意してください。

ただし、2つの異なるユーザー名を同じユーザーIDにすることは可能です。の異なるバージョンを検討してください/etc/passwd

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

ユーザー名aとの両方bで、3番目の列は1001であることに注意してください。これで、ユーザーaまたはユーザーbが(異なるパスワードでも)ログインすると、どちらも「user 1001」になりa、OSの観点からユーザーとして表示されます。ここでも、最初に一致したエントリが返されます(ほとんどの場合)。

$ 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)

abはどちらもuid 1001であり、uidが使用できるリソースにアクセスできます1001


新しいユーザー名を作成するときに、ユーザー名の重複をチェックしないのはなぜですか?
phuclv

9
私もほとんどのベースラインが考えることに注意してくださいuseraddので、ここでの力"アンディかなりの手段「手動で編集することで、既存のユーザーを追加しようとフィットをスローします/etc/passwdし、/etc/shadow非常にこれでホームの領土を試してみてくださいしないでくださいされています。
Shadur

「同じ名前の2番目のユーザーとしてログインする方法はありません。」それでもsetuid2番目のUIDで呼び出すことができませんか?それともsudo -u '#<uid>' bash
jazzpi

1
@jazzpiそれは「ログイン」の定義に依存するかもしれません。ただし、この状況を許可するグラフィカルログインマネージャーは確かに見られました...
CVn

3

/home/old-archシステムを再インストールする前に家の名前を変更することを検討していました。新しいシステムが私のファイルに対する古いパーミッションを与えるのか、それとも私が別のアーチとして認識されるのか疑問に思いました。

シングルユーザーシステムで、同じまたは同様のディストリビューションで再インストールを行う場合、ユーザーアカウントが同じユーザーIDを持っている可能性が高いため、カーネルの観点からは同じユーザーになります。たとえば、私が覚えている限り、インストール中に作成されたユーザーは、DebianシステムではUID 1000でした。他のシステムでは他の数値を使用する場合がありますが、インストールごとに同じである小さめの整数である可能性が非常に高くなります。

UIDは通常順次割り当てられるため、同じことが他のユーザーにも当てはまります(ある場合)。作成された3番目のユーザーは、別のシステムで作成された3番目のユーザーと同じUIDを持つ可能性があります。両方のシステムでUIDが再利用されていないことを確認するために、事前に手順を実行する必要があります。

同様の理由で、NFSを使用するものはすべて共有ユーザーデータベースが必要になります。

ただし、この場合は個人のシステムchown newuser. -R /home/olduserであるため、UIDが異なっていても、rootとしてログインして実行できます。

(Windowsシステムは異なり、よりランダムな長めのID文字列を生成します。そこで、ディスクを別のマシンに移動すると、ファイルは不明なユーザーが所有しているように見え、管理者権限を使用しないとアクセスできなくなります。

また、上記では「ありそう」と何度も言った。一部のディストリビューションの動作が異なるかどうかはわかりません。最近のLinuxは32ビットUIDもサポートしているため、Windows SIDほど長くはありませんが、たとえばランダム化されたUIDが必要な場合は、使用するスペースがまだあります。ただし、通常はあまり使用されません。システム管理者は、システムに接続しているディスクを把握し、それに応じてファイルの所有権を調整するか、または他のユーザーがマウントポイントにアクセスできないようにする必要があります。)


1

Unixは非常に古いシステムであり、ストレージ容量が非常に小さい時代であり、すべて(ユーザーだけでなくファイルも)は番号で識別されていました。ストレージが少し成長した名前は後で来ました

このシステム利点は、名前が実際のハンドル(数値ID)にフックされているラベルにすぎないことです。したがって、(/ etc / passwdを直接編集する場合に)1人のユーザーに複数の名前を付けることができます。

制限は、ユーザーのシステムとファイルのパーティションです。

明確にするために、なぜ物事が何であるのかを説明するために言います

私はこれまで反対の方法を試したことがないことを告白しなければなりません。つまり、IDが異なる同じ名前で、それは不可能だといつも思っていました。それは...ですか?バグではないですか?


1
NTFSやCIFSなどの他のファイルシステムは、ファイルの所有権とアクセス許可を格納するために、英数字のSIDSではなく、ユーザー名を使用していると言っていますか?
doneal24

確かに、私は、Windowsが作成されたときに、英数字SIDSが存在しなかったとして、それは、そうであると信じていない-私はまだ私が買った日を覚えてWindowsの286 MS-DOSの最初のグラフィック後継者だった、...
ypouplard

1
@ DougO'Neal:NT SIDには、テキスト表現と12バイトのバイナリ形式の2つの形式があります。AFAIK、NTFSは後者を内部で使用するため、ユーザーを識別するために数字を使用します。これは非常に大きな数字です。:)
cHao

3
@ypouplard Windowsが作成されたとき、それはシングルユーザーオペレーティングシステムでした。キーボードに座っている人がすべてを支配したので、ファイル所有権を設定する必要はありませんでした。
doneal24 '21 / 06/21
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.