3

Cを使用してUnixファイルの所有者名を取得しようとしています。私が見つけた唯一の方法は、stat()を使用してからgetpwuid(stat.st_uid)を使用することです。ただし、そのuidを持つ最初のユーザー名のみが返され、パスワードファイル内のユーザーは同じuidを持つことができます。明らかに、これは受け入れられず、信頼できません。

参照:

所有者はパスワードファイルから受信されます:http: //pubs.opengroup.org/onlinepubs/007904875/functions/getpwuid.html

Uidはパスワードファイルにあります: http ://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/

Unixでは、複数のユーザーが同じuidを持つことができます: http ://www.e-reading.org.ua/htmbook.php/orelly/networking/puis/ch04_01.htm

正確な方法またはより低いレベルの方法、正確な結果を保証するある種のルックアップテーブルはありますか?

4

2 に答える 2

9

Unixファイルのパーミッションは、UIDを使用して機能します。ユーザー名はファイルを所有できません。UIDのみが可能です。したがって、ファイルが特定のUIDに属している場合、そのUIDを持つすべてのユーザーがファイルを所有します。

したがって、そのUIDを持つすべてのユーザーがファイルを所有しているため、どのユーザー名を取得するかは重要ではありません。

于 2012-12-25T08:54:17.150 に答える
5

1つのUIDに複数の名前が関連付けられている場合は、そのUIDに複数の名前が関連付けられています。ただし、カーネルに関する限り、これらの名前はすべて同じユーザーのエイリアスです。

つまり、名前は純粋に人間のフィクションであり、これまでに保存されたのはUIDだけです。

たとえば、/ etc/passwdに2行あるとします。

user:50:50:...
resu:50:50:...

これは、ユーザー名からUIDへの2つのマッピングを定義します。内部的には、数値UIDのみが「誰か」を決定するために使用されるためresu、ファイルを作成し、user:read / write、group:none、other:noneにアクセス許可を設定すると、userそれを読み取ることができます。カーネルが関係している、彼らは同じユーザーです。

/the/example/file
  owner: 50
  group: 50
  permissions: rw-------

所有権に関する限り、ファイルシステムに保存されるのは、数値のユーザーIDと数値のグループIDだけです。数値IDから人間にわかりやすい文字列へのマッピングの場合、最初に見つかったマッピングはすべて同一であるため、使用されたものです。

つまり、2人のユーザーに同じ数値IDを与えないでください。そうすると、自分自身の生活が非常に困難になります。

于 2012-12-25T08:54:35.447 に答える