LinuxでIDでユーザー名を検索するにはどうすればよいですか?


67

このコマンドidを使用して、ユーザーのを検索できます。uid例:

$ id -u ubuntu
1000

からユーザー名を検索するコマンドはありuidますか?私はこれを/etc/passwdファイルを見ることで実行できることを理解していますが、これに対する既存のコマンドがあるかどうか、特にそれを実行しているユーザーがルートでない場合は尋ねています。

私は探していないよ、現在のすなわち私が見ているわけではない、ユーザーのユーザー名whoamiまたはlogname

これにより、共有Webホスティングでこれがセキュリティ機能であるかどうか、または単に何かを正しく理解していないのではないかと思いました。

調査のために/etc/passwd、共有Webホストからのファイル:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
pcap:x:77:77::/var/arpwatch:/sbin/nologin
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
avahi:x:70:70:Avahi daemon:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
avahi-autoipd:x:100:104:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
mailman:x:32006:32006::/usr/local/cpanel/3rdparty/mailman/mailman:/usr/local/cpanel/bin/noshell
dovecot:x:97:97:dovecot:/usr/libexec/dovecot:/sbin/nologin
mysql:x:101:105:MySQL server:/var/lib/mysql:/bin/bash
cpaneleximfilter:x:32007:32009::/var/cpanel/userhomes/cpaneleximfilter:/usr/local/cpanel/bin/noshell
nagios:x:102:106:nagios:/var/log/nagios:/bin/sh
ntp:x:38:38::/etc/ntp:/sbin/nologin
myuser:x:1747:1744::/home/myuser:/usr/local/cpanel/bin/jailshell

そして、ここにサンプルディレクトリリストがあります /tmp/

drwx------  3 root     root        1024 Apr 16 02:09 spamd-22217-init/
drwxr-xr-x  2      665      664    1024 Apr  4 00:05 update-cache-44068ab4/
drwxr-xr-x  4      665      664    1024 Apr 17 15:17 update-extraction-44068ab4/
-rw-rw-r--  1      665      664   43801 Apr 17 15:17 variable.zip
-rw-r--r--  1      684      683    4396 Apr 17 07:01 wsdl-13fb96428c0685474db6b425a1d9baec

私たちは見ることができますrootいくつかのファイルの所有者である、とrootもにまで見せている/etc/passwdが、他のユーザ/グループすべてが数字として現れ、。


6
複数のユーザーが同じUIDを持っている場合があることに注意してください。それはまれですが、たまに起こります。
バリーブラウン

回答:


35

lsすでにそのルックアップを実行しています。を使用して、コマンドラインからユーザー情報の検索を実行できますgetent passwd

lsユーザー名の代わりにユーザーIDが表示される場合は、その名前のユーザーがいないためです。ファイルシステムは、ユーザー名ではなくユーザーIDを保存します。別のシステムからファイルシステムをマウントする場合、またはファイルが現在削除されたユーザーに属している場合、または数値のユーザーIDをに渡した場合chown、名前のないユーザーIDに属するファイルを持つことができます。

共有ホストでは、それぞれがユーザーデータベースを持つ複数の仮想マシン間で共有されるいくつかのファイルにアクセスできます。これは少し奇妙です(ファイルを共有しているのにファイルを所有しているユーザーではないのはなぜですか)が、技術的には可能です。


2
ls -l名前の長さが8文字を超える場合、名前の代わりに数字が表示されます。
kgrittn

@kgrittn Unixバリアントに依存する場合があります。GNU lsはユーザー名全体を表示します。BusyBox lsは8文字に切り詰めます(少なくとも、ここにあるビルドでは)。
ジル 'SO-悪であるのをやめる'

66

試して

getent passwd "$uid" | cut -d: -f1

これが何も返さない場合、IDをユーザー名に変換するアクセス権がないことを意味しますか?
-cwd

1
t set 「$ uid」 `を実行したか、そのuidが存在しない可能性が高いです。ないgrep ":$uid:" /etc/passwdそれを見つけますか?ないgetent passwd任意の出力を生成しますか?
ミケル

@cwd:idをユーザー名に変換するためのアクセス権が常に必要です。たとえば、ls -l常にこれを行っています。
-camh

ls共有ホストのリストを見ると、lsでユーザー/グループ名の列に数字が表示されていたので、ちょっと興味がありました。おそらく、それはセキュリティ上の予防措置または刑務所のことですか?
-cwd

@cwdおそらく、共有ホストは/etc/passwd、その時点でマウントされていない他の場所からマウント/共有されているものを使用しています。
jw013

39

あなたはこの小さなディティーを楽しむかもしれません。

$ id -nu [number]

3.17.3-1-ARCH#1 SMP PREEMPT Fri Nov 14 22:56:01 CET 2014 i686 GNU / Linux

Arch Linuxで、対応するユーザー名が存在する場合、それが返されることを確認できます。スーパーユーザーとしてはテストしていませんが、通常のユーザーとして実行するとUbuntuで機能しないことも確認できます。また、Alpine Linuxでは機能しません。おそらくセキュリティ機能により、これが一部のシステムで機能しないことがあります。


id -u jimmij=> 1000id -nu 1000=> id: 1000: no such user
jimmij

2
で、私の作品id --version=id (GNU coreutils) 8.23
eMPee584

FreeBSD 10.3でも動作します。
-forquare

注:これはRed Hat / CentOS> = 7で動作します(Red Hat / CentOS <= 6では動作しません)
Franklin Piat

FYIこれはないではない busyboxの/高山のlinux /高山ドッキングウィンドウの画像上で動作
JJJ

0

これは古い質問だと思いますが、ここに別の答えがあります

awk -F: '{print $1,$3}' /etc/passwd | grep <UID>

grep何にパイプしますか?(行の先頭に4つのスペースを追加すると、固定幅のテキストとしてレンダリングされます。)
ワイルドカード

での答えが好きgetent passwdです。ただし、/ etc / passwdを解析する場合は、awkのみを使用する方が適切ID=0 ; awk -F: '{if ( $3 == '"$ID"' ) print $1}' /etc/passwdです。
フランクリンピアト

-1

/ etc / passwdを解析します:

% awk -F: "/:$(id -u ubuntu):/{print \$1}" /etc/passwd
ubuntu

7
とは異なりgetent、システムがLDAPを使用している場合、これは機能しません。
チョロバ

3
これは、NISが使用されている場合、または他の分散認証プロトコルが使用されている場合は機能しません。
jlliagre

@choroba:LDAPまたはNISに特定の要件がある場合は、おそらく言及しているでしょう。私のソリューションは、一般的なLinuxセットアップで機能します。
-laebshade

2
信頼できないため(ユーザーまたはグループのいずれかと一致する可能性があるため)投票します。
フランクリンピア

-1
id | awk '{print $1}' | sed 's:.*(::;s:)$::'

4
こんにちは、NAIM。これは正しい答えかもしれませんが、答えを編集してこれがどのように機能するかを簡単に説明できれば、質問者(およびおそらくソリューションの将来の読者)に役立ちます。
ロアイマ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.