2009-06-18 11 views
4

useraddマンページによると、1000未満のUIDは通常、システムアカウント用に予約されています。よく知られているUIDとは何ですか?

私は自分のユーザーとして実行されるサービスを開発しています。よく知られているポートは/etc/servicesにあります。

よく知られているUIDがどこにあるのかわかりますか?私は他人のUIDとの衝突を避けたいと思います。

+1

この質問はおそらくhttp://serverfault.comに適しています。 – Templar

+0

私はそれが最初かもしれないと思っていましたが、インストールしたプログラムのUIDを選ぶのはシステム管理者の仕事ではありません。これは開発者(またはパッケージ管理者)の仕事です。 –

+1

実際には、パッケージ開発者が(ルート特権を必要とする以外の)ソフトウェアの特定のUIDまたはGIDを要求すると、パッケージ開発者は壊れています。選択した任意の値に対して、誰かがあなたの選択したUID(またはGID)を何かに使用していて、あなたのソフトウェアに対応するためにそれを変更したくない(私はそれらを責めません)。 –

答えて

7

getpwent(3)は、パスワードデータベース(通常は/etc/passwdですが、必ずしもそうである必要はありません。たとえば、システムがNISドメイン内にある可能性があります)を繰り返します。システムに知られているすべてのUIDをそこに表示する必要があります。

デモンストレーションのために、次のシェルフラグメントとCコードの両方は、システム上のすべての既知のUIDを出力する必要があります。

 
$ getent passwd | cut -d: -f3 
#include <pwd.h> 
#include <stdio.h> 
int main() { 
    struct passwd *pw; 
    while ((pw = getpwent())) 
     printf("%d\n", pw->pw_uid); 
} 

UID 0は常にルートと65534がnobodyある従来UIDですが、あなたはそれを頼りに、また何か他のものではないはずです。どのUIDが使用されているかは、OS、ディストリビューション、さらにはシステムによっても異なります。例えば、Gentoo上の多くのシステムサービスは、インストールされたときにUIDを割り当てます。使用中のUIDの中央データベースはありません。

/etc/login.defsは、「システムUID」とは何かを定義します。私のデスクトップでは、UID 100-999はシステムアカウントとして扱われ、UIDS 1000-60000はユーザーアカウントですが、これは簡単に変更できます。

サービスを作成する場合、必要に応じてパッケージのインストールをスクリプト化して、UID /ユーザー名を使用できるようにソフトウェアを設定することをお勧めします。

+1

これを編集して、上記のBaneの答えに対するあなたのコメントに言及するか、それを新しい回答として記録できますか?これは私の質問に対する本当の答えのようです - システムUIDはUNIX/Linuxディストリビューションでは共通していないので、問題は解決できません。私はそれを答えとして受け入れたいと思います。 –

0

このようなリストは存在しません。 /etc/passwdファイル、/etc/shadowファイル、およびNISグローバルユーザリストを使用しているUIDが使用中であることに注意してください。そうでないものを使用してください!

+1

これは私のシステムで使用されているUIDですが、そこにある可能性のあるUIDのすべてではありません。例えば、私はtomcatがインストールされていませんが、UID 91を使用しています。 –

0

Linuxでは、/etc/login.defsで設定されています。 Debianベースのシステムをインストールするときに、Red Hat-yマシンとの一貫性のために、 "uid start"オプション(私はその名前を忘れてしまいますが、私は現在Linuxにはありません)を1000から500に変更します。

man login.defsは、必要なすべての情報を提供します。

4

私はこれが古い投稿だと知っていますが、2017年にここにいるので、この追加情報が同じ位置にある他の人にとって適切であると思った同様の質問にまだ答えようとしています。

「よく知られているUID」の概念は、UNIXの初期の段階に戻っています。その前に、多数のディストリビューションとUNIXの変形がありました。 「よく知られている」UIDはadm、daemon、lp、sync、operator、news、mailなどのシステムユーザのものとみなされ、UIDの衝突を避けるために様々なシステム全体で標準でした。これらのユーザーは、現代のUNIX系オペレーティングシステムには依然として存在します。

組織全体でuidを標準化することは、これらの問題を回避するための鍵です。上記のコメントで指摘したように、あなたが選んだuidはどこかで使用される可能性が高いので、sysadminが目指すことができる最高のものは、uidが管理しているすべてのシステムで標準であることを確認し、アプリケーションの新しいuidが簡単になります。

この目的のために、私は長年にわたり、貴重なリンク先を見つけました。悲しいことに、このトピックに関する多くの類似の投稿はなく、見つからないものはありません。

UNIX/Linux: Analyzing user/group UID/GID conflicts

あなたは「UID」タグの下にそのブログを検索する場合はLinuxで複数のホスト間でのUIDのを標準化するプロセスを自動化するスクリプトを含む他の関連する投稿は、あります。

このUser ID Definitionも貴重なリソースです。

短い答えは、どのUIDを使用しても、組織全体でユニークで標準的なものであれば、衝突を避けることができます。

関連する問題