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

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

私は、2人のユーザーが同じ名前を持っている場合、ファイル権限を強制するときにシステムが実際に別のユーザーであるかどうかをどうやって知ることができますか?

/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

同じ名前で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

ausernameとusernameの両方のb3番目の列は1001です。これはuid /ユーザーIDです。これで、1人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つの異なる名前を持つ同じユーザーと同じであるため、特に望まない限り、これらの構成は可能な限り避けるべきです。システムのユーザーのエイリアスを作成するには(参照)Unixユーザーエイリアス技術的な詳細については、サーバーエラーに関する質問をご覧ください。

システムはこれらの uid を使用してファイル権限を適用します。ファイルが属するユーザーのuidとgid(グループID)がファイルのメタデータに書き込まれます。同じuidをランダムに共有する別のユーザーを持つ別のコンピューターにディスクをインポートすると、そのファイルは突然そのシステムのユーザーに属します。 Unixシステムでは、uidが通常16ビット整数を超えないという事実は、uidがグローバルに一意ではなく、ローカルシステム内でのみ一意であることを意味します。

答え3

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

シングルユーザーシステムがあり、同じまたは類似のディストリビューションを使用して再インストールする場合、ユーザーアカウントはほとんど同じユーザーIDを持つため、カーネルの観点から見て同じユーザーです。たとえば、Debianシステムでインストール中に作成されたユーザーのUIDは1000であることがわかります。他のシステムでは異なる数値を使用できますが、すべてのインストールで同じ小さな整数になる可能性があります。

UIDは通常順番に割り当てられるため、他のユーザー(存在する場合)にも同じように適用されます。作成された3番目のユーザーは、他のシステムで作成された3番目のユーザーと同じUIDを持つことができます。 UIDが両方のシステムで再利用されないように、事前に対策を講じる必要があります。

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

ただし、この場合はパーソナルシステムなので、chown newuser. -R /home/olduserUIDが異なる場合でもrootとしてログインして実行できます。

(Windowsシステムは異なり、ランダムに長いID文字列を生成します。ここでディスクを別のコンピュータに移動すると、ファイルは不明なユーザーが所有していると見なされ、管理者権限がないとアクセスできません。

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

答え4

Unixは非常に古いシステムで、ストレージ容量が非常に少なく、ファイルやユーザーを含むすべてが -数字で識別後で名前が出ました。、ストレージが少し増えた後。

このシステムでそれだけです。名前は単なるラベルです。実際のハンドルに接続されている:数値ID。したがって、ユーザーに対して複数の名前を持つことができ(/ etc / passwd直接編集)、ファイルに複数の名前を持つことができます(ファイルを一度だけ保存して複数の場所で表示するのに役立ちます)。

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

私は明確にするために、なぜ状況がそうであるのかを説明するためにこれを言うことです。

名前は同じですが、異なるIDを試したことがないことを認める必要があります。私はいつも不可能だと思いました。うん?間違いじゃない?

関連情報