web-dev-qa-db-ja.com

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

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

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

9
Arch Stanton

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

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

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

10
Lollen Jumplan

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

ユーザー名abの両方で、3番目の列は1001であることに注意してください。これはuid /ユーザーIDです。これで、ユーザーaまたはユーザーbがログインすると(異なるパスワードでも)、どちらも「user 1001」になり、OSからユーザー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)

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

22
Andy Dalton

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

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

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

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

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

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

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

3
ilkkachu

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

このシステムの美しさ名前はラベルのみ実際のハンドルに結び付けられている:数値ID。したがって、1人のユーザーに複数の名前(/ etc/passwdを直接編集する場合)と、1つのファイルに複数の名前を付けることができます(ファイルを1度だけ保存する場合に便利ですが、複数の場所に表示されます)。

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

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

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

1
ypouplard