同じUIDでユーザーを作成できるのはなぜですか?


37

UIDの私の理解は、Unixのようなオペレーティングシステムによって各ユーザーに割り当てられた一意の正の整数であるということです。各ユーザーは、UIDによってシステムに対して識別され、ユーザー名は一般に人間のインターフェースとしてのみ使用されます。

どうすれば2人のユーザーが同じUIDを持つことができますか?これは私のシステムとパッケージの競合ではありませんか?

root@kdc:~# id test12
uid=1005(test10) gid=1000(server) groups=1005(test10)
root@kdc:~# id test13
uid=1005(test10) gid=1000(server) groups=1005(test10)
root@kdc:~#

私は、同じUIDとGIDを持つ2人のユーザーを追加しました:test12test13

の出力/etc/passwd

client@kdc:~$ cat /etc/passwd | grep test12
test12:x:1005:1000::/home/test12:/bin/sh
client@kdc:~$ cat /etc/passwd | grep test13
test13:x:1005:1000::/home/test13:/bin/sh

ユーザーを追加しました useradd -ou 1005 -g1000 username.

私はこれの目的は何か混乱してしまった、とユーザーがで追加された場合、それは今ではアクセス許可とユーザーログなどに影響を与える可能性uid=0gid=0意志は、rootアカウントのような権限を持っていますか?


それについてはわかりませんが、出力は両方のコマンドでユーザー「test10」のUIDを出力していると思います。なぜそうするのか、私にはわかりませんが、以前に作成したユーザーでなければなりません。
animaletdesequia 14

このIDを持つユーザーがいるように言う
nux 14

質問を誤解しました。通常どおりユーザーを作成し、システムが同じUIDを割り当てたと思います。
animaletdesequia 14

いいえ男ではない、通常、システムはユニークなUIDを受け入れる方法をここで問題、
NUX

とった。良い質問、説明をありがとう:)
animaletdesequia 14

回答:


40

ここでの答えは、Linuxは自分からあなたを保護しないということです。

本当にsu root/ etcファイルにアクセスして、すべてのユーザーに同じUIDを与えたい場合は、できます。これは単なるテキストファイルです。

しかし、あなたは本当にそうすべきではなく、それは意図しない結果をもたらすでしょう。


4
私の質問は、システムがこれを受け入れる理由です。
nux 14

46
「受け入れる」とはどういう意味ですか?どうしてそれを受け入れないのでしょうか?これは、シェフになって、なぜスープに塩を入れすぎたのかを尋ねるようなものです。現代のコンピューティングに関しては、RDBMSの考え方に慣れていると思います。IDのような重要なことを制約することで、自分を足で撃つことができません。LinuxユーザーIDははるかに原始的であり、内部チェックや修正はありません。
デジタルクリス14

5
正しく、useradd -oあなたはあなたが規範の外にいることを認識することによってadduser。@psusiが述べたように、ファイル許可などに関して同じIDを指す2つのログインを作成します。通常のユースケースではなく、多くのパッケージでテストされていないので、おそらく問題も発生します。
デジタルクリス14

2
回答:2つのログインが同じファイルシステムのアクセス許可を指すようにします。
デジタルクリス14

5
@Joshはもちろん、同じUIDを持つ複数のユーザーを持つ正当な理由があります。1つの例については私の答えをご覧ください。
テルドン

38

これには実際に正当な理由があります。たとえば、私たちはそれぞれ自分のコンピューターを持っているラボで働いていましたが$HOME、サーバーからエクスポートされた共有ドライブにいました。だから、私の$HOMEでした

/users/terdon

以来/usersフォルダは私のローカルマシン上で、実際にはなかったけど、私は負担ラボのネットワークにならないように、私のローカルハードドライブに保存されたデータを使用するI / Oの上に重いとした任意の分析のため、NFS経由で輸出しました。そのために、私と他のすべてのユーザーには2人のユーザーがいました。1人はシステム全体のユーザーで、もう1人は問題のマシンのローカルのユーザーです。ローカルユーザーの自宅は

/home/localuser

しかし、私は私がように記録されたかどうか、私のファイルへの完全なアクセス持つ必要terdonかなどlocaluserとを両方与えることだった私たちのシステム管理者が実施していた方法localuserterdon同じUIDを。そうすれば、現在ログインしているユーザーに関係なく、ローカルファイルを自由に操作できます。


6
この回答をサポートするために、仮想メールホスティングなどの一部のセットアップではこれを非常に効果的に使用しています。つまり、単一のUIDを共有する多数の仮想メールアカウントです。Dovecotメールサーバーのドキュメントでは、wiki2.dovecot.org/UserIds#mailusers
Thomason

chmod 666同じ影響はありませんか?
ブライアン14

3
@GIJoeは、両方のユーザーに読み取り/書き込みを許可しますが、問題になる可能性のある所有権を保持しません。また、すべてのファイルをこれらのアクセス許可(たとえば、sshキー)に設定できるわけではなく、常にアクセス許可を使用する必要はありません。
テルドン

12

2人のユーザーは同じUIDを持つことができます。これは、テキストファイル内の単なる数字であるため、既に使用されている値など、任意の値に設定できるためです。あなたが見てきたように、そうすることは良い考えではありません。


システムはユーザーをどのように処理しますか?共有権限
NUX

12
@nux、彼らは両方とも同じユーザーです。ログインするために、異なるユーザー名/パスワードを持つことができます。
psusi 14

4
@ bigbadonk420、「サポートされる」という用語はかなり曖昧です。それは確かにあなたが常にUNIXシステムでできることであり、以前はかなり一般的なバックドアであり、uid 0を持つ別のユーザーを設定していたので、パスワードを知ったり変更したりすることなく、ログインして事実上rootになることができました通常のrootユーザー。
psusi

1
@ bigbadonk420がサポートされています。これが役立つ場合があります。1つの例については私の回答をご覧ください。
テルドン

11

実際には、同じIDの2人のユーザーがいるのが一般的です。FreeBSDでは、通常、UID 0を持つ2人のユーザーがいます:rootとtoor。Rootは組み込みの/ bin / shシェルを使用し、toorは別のシェル(通常はbash)を使用します。


11

UnixシステムとLinuxは通常、/etc/passwdファイル内の重複を禁止しません。このファイルの目的はls、ユーザーのファイルを一覧表示する場合など、コマンドラインツールで表示できる物理名にUIDを関連付けることです。

$ ls -n | head -5
total 986000
drwxrwxr-x.   3 1000 1000      4096 Feb 13 19:51 1_archive_sansa
-rw-rw-r--.   1 1000 1000    760868 Dec 16 08:21 2.18.x Database Scheme.jpg
-rw-rw-r--.   1 1000 1000       972 Oct  6 20:26 abcdefg
drwxrwxr-x.   2 1000 1000      4096 Feb 11 03:34 advanced_linux_programming

このファイルの他の目的は、ユーザーがログインしたときに取得するシェルを指定することです。

$ getent passwd saml
saml:x:1000:1000:saml:/home/saml:/bin/bash

Unixタイプのシステムでの一般的な攻撃ベクトルは、次のような行をシステムの/etc/passwdファイルに追加することです。

$ getent passwd r00t
r00t:x:0:0:root:/root:/bin/bash

$ getent passwd toor
toor:x:0:0:root:/root:/bin/bash

/etc/passwdファイルの役割は、ユーザーアカウントのみを追跡するためのものではありません。ユーザー名とパスワードを追跡する役割は、/etc/shadowファイルの責任です。/etc/passwdやなどのファイル/etc/groupは、システムがディスクからファイルをリストするときに、人間が読める名前を提供するためのものです。

ファイルは実際の名前ではなくUID / GIDを使用してディスクに書き込まれることに注意してください。

$ stat afile 
  File: ‘afile’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fd02h/64770d    Inode: 6560621     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    saml)   Gid: ( 1000/    saml)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2014-02-27 15:54:21.852697029 -0500
Modify: 2014-02-27 15:54:21.852697029 -0500
Change: 2014-02-27 15:54:21.852697029 -0500
 Birth: -

注意してくださいUid:Gid:、数字が実際にディスクに書き込まれているものです!


9

Linuxでは、すべてのユーザーとグループは実際には単なる数字です。これは、id投稿したコマンドの出力が示すものです。

この/etc/passwdファイルは、ユーザーをユーザーID(番号)にマッピングします。この例では、2つのユーザー名を同じユーザーIDにマッピングしているだけです。

事実上、test12ID 1005という1人のユーザーを作成しましたtest13。このユーザーは2番目のユーザー名も持っています。ただし、システムはUID 1005を最初に見つかったユーザー名にマッピングします。test12

Linuxは、これを行うことを妨げるシステムがないため、これを「許可」します。/etc/passwdは単なるテキストファイルであり、ユーザー名はそのファイルのエントリで見つかったUIDにマップされ、UIDはそのファイルで見つかった最初のユーザー名にマップされます。

ただし、作成したのは、他のシステム管理者にとって混乱を招く状況です。UIDを変更して回避test13


これは私の質問は、同じUIDのための2つのユーザーをマップするが目的である、私のテスト仮想マシンの男です
NUX

1
私が考えることができる唯一の目的は、UIDに2番目のエイリアスのユーザー名を与えることです。しかし、これは未定義の動作であり、推奨されません。本当にこれは望ましくない状況です。ユーザー名とUIDの1:1の関係をお勧めします
ジョシュ14

私が知る必要がこの質問をした理由thatsのは、私はそれが混乱の方法であることを感じた
NUX

それは紛らわしい; それがあなたがそれをするべきではない理由です。「目的」はなく、/etc/passwdファイルの誤用です。しかし、これを防ぐ手段はありません。それは理にかなっていますか?
ジョシュ14

1
ユーザーは、2つのログインが同じファイルシステムのアクセス許可を指すようにすることが目標であると述べました。
nux 14

5

これが今日許可されている理由は、単にシステムがそれを妨げていないからです。

これが変更されると、管理者がこの機能を使用していたシステムが破損します(Terdonの例を参照)。したがって、これは変更されたことはなく、今後も変わるとは思いません。

当初はpasswdファイルとgroupファイルのみがあり、それらは目的を果たしていました。そこにはなかったのadduserコマンドには、addgroupとは、ファイルをviやEDを使用して、ルートによって編集されました。

いくつかの癖がありました!

使用する次のユーザーIDを記憶するために、管理者は!!無効なユーザー名であるため)ユーザー名を持つ最後の行として特別なユーザーを持ち、そのエントリは次のユーザーIDユーザーID。原油、私は認めますが、うまくいきました!それで、なぜ今日はアジャイル開発に似た、より複雑な腸を破壊するのですか?

既知の欠陥がありました。メインビーイング、それはユーティリティが好きなように、世界読めるでなければならなかったことをlsマップすることができ可能性がありuser-id => name。つまり、誰でも暗号化されたすべてのパスワード、およびシステム内のすべてのユーザーとIDを見ることができます。

一部のUnixシステムでは、いくつかのシェルスクリプトが導入され始めましたadduser addgroupが、これらはUnix間で一貫性がないため、多くの場合無視されていました。

shadowパスワードファイルが発明されるまでにはかなりの年月がかかりましたが、暗号化されたパスワードを非表示にすることで、セキュリティが少し強化されました。ここでも、十分な複雑さが追加されましたが、それでもかなり粗雑でシンプルでした。ユーティリティuseraddgroupadd導入された、それを維持しshadowshadow-更新しました。そもそも、これらは多くの場合、ベンダー独自のadduser / addgroupユーティリティの単純なシェルスクリプトラッパーでした。繰り返しになりますが、これで十分です。

コンピューターのネットワークが成長し、人々が仕事をするために一度に複数の作業を行っていたため、passwd/groupファイルの管理は、特にNFSで悪夢になりつつありました。そのため、NISとしても知られるYellow Pagesが負担を軽減しました。

もう少し柔軟なものが必要であり、PAMが発明されたことが、今では明らかになってきました。あなたが本当に洗練されていて、一元化された、安全な、ユニークIDの、すべてのベルとホイッスル認証システムが必要な場合は、認証するために中央サーバー、おそらくRadiusサーバー、LDAPサーバーまたはActive Directoryを呼び出します。

世界は成長しました。しかし、passwd / group / shadowファイルは、まだ小さなユーザー/開発者/ラボのために残っています。私たちはまだすべての機能を必要としませんでした。哲学は今までに少し変わったと思います「もっと良くしようとしたら、まったく使わないだろう」。だから心配しないで。

これが、単純なpasswdファイルが変更されるとは思わない理由です。これ以上の意味はありません。30ポンドのRaspberry Piと2人、おそらく3人のユーザーの監視温度とtwitterフィードに最適です。OK、ユーザーIDを一意にしたい場合は、ユーザーIDに少し注意する必要があり、データベース(ファイル)から次の一意のIDを選択するスクリプトでuseraddをラップすることを愛好家が妨げることはありません一意のID(必要な場合)。やはりオープンソースです。


2

この/etc/passwdファイルは、シンボリックユーザー名を実際のユーザーIDにマップするだけです。1つのuserIDにマップする2つのシンボリック名を意図的に作成する場合、許可されます。

それは実際にそれを行うことが良いアイデアであることを意味しません。一部の人々は、この機能を利用できる非常に具体的な使用例を見つけたかもしれませんが、一般的にはすべきではありません。

Linux(および他のUNIX)は、管理者が何をしているかを知っているという意見を受け入れます。馬鹿げたことをするように言ったら、それはあなた自身のせいです。崖の上を運転するようにあなたの車に言うなら、あなたはメーカーに行くことができず、なぜ車がこれを許したのか尋ねることはできません。


なぜバグとして言及されたのですか?
NUX

1

オペレーティングシステムが一意であると期待する識別子がありますが、それらはハードウェアの追跡に使用されます。特定の知識 Universally Unique IDentifierがシステムファイルを含むハードドライブに対応し、ハードウェア構成が変更されても動作を継続するのに役立つ場合があります。マイクロソフトはこれらのグローバル一意識別子を呼び出し、それらを使用してすべてのWindowsソフトウェアを追跡します。皮肉なことに、これらの頭字語は適切に選択されていません。

OSの観点から見ると、ほとんどのユーザーおよびグループ識別子の変更は、外部インターフェイスの変更に相当します。衝突にもかかわらず正常に機能する可能性があります。主にシステムのユーザーとグループに必要なのは、それらが存在することです。ユーザーが何を必要としているかを知ることはできません。このような状況では、Unixの哲学は、OSが管理者が何をしているのかを知っていると想定し、管理者がそれを迅速に行えるようにすることです。


0

@andybalholmの答えを裏付ける証拠を見つけました。

APUEから、§8.15:

どのプロセスでも、実際の有効なユーザーIDとグループIDを見つけることができます。ただし、プログラムを実行しているユーザーのログイン名を知りたい場合があります。getpwuidgetuid())を呼び出すこともできますが、1人のユーザーが複数のログイン名を持ち、それぞれが同じユーザーIDを持つ場合はどうでしょうか?(ユーザーは、同じユーザーIDを持つパスワードファイルに複数のエントリを持ち、各エントリに異なるログインシェルを設定する場合がありますシステムが正常に我々は(セクション6.8)の下でのログイン名を追跡します。)、およびgetlogin機能は、方法を提供しますそのログイン名を取得します。

....

ログイン名を指定すると、それを使用して、パスワードファイルでユーザーを検索し、たとえばを使用してログインシェルを決定できますgetpwnam

ところで、ログイン中に別のシェルに切り替えることができるかどうか知りたいです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.