コマンドidを使用して、ユーザーのuid例:

$ id -u ubuntu 1000 

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

current ユーザーのユーザー名を探していません。つまり、whoamiまたは。

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

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

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 

これは

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に表示されますが、他のユーザー/グループはすべて数字で表示されます。

コメント

  • 複数のユーザーが同じUIDを持っている可能性があることに注意してください。 ‘まれですが、たまに発生します。

回答

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

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

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

コメント

  • I ‘名前の長さが8文字を超える場合、ls -lに名前の代わりに番号が表示されます。
  • @kgrittn状況によって異なります。 Unixバリアントで。 GNUlsはユーザー名全体を表示します。 BusyBox lsはそれを8文字に切り捨てます(少なくともここにあるビルドでは)。

回答

試してみてください

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

コメント

  • これで何も返されない場合は、’ IDをユーザー名に変換するためのアクセス権がありませんか?
  • t set ” $ uid ” `またはそのuidが’存在しません。 grep ":$uid:" /etc/passwdはそれを見つけますか? getent passwdは出力を生成しますか?
  • @cwd:IDをユーザー名に変換するためのアクセス権は常に必要です。たとえば、ls -lは常にこれを行っています。
  • 共有ホスト上のlsのリストを見ているので、興味があります。 lsを使用してユーザー/グループ名の列に番号を表示していました。おそらくそれはセキュリティ上の予防措置またはジェイルシェルの問題ですか?
  • @cwd共有ホストが/etc/passwdを使用している可能性があります。 “c42ce2ed22”>

その時点でマウントされていません。

回答

この小さな楽しみかもしれませんちっぽけ。

$ 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では動作しないことも確認できます。また、AlpineLinuxでは機能しません。一部のシステムでは、セキュリティ機能によってこれが機能しない可能性があります。

コメント

  • id -u jimmij = > 1000id -nu 1000 = > id: 1000: no such user
  • id --version = id (GNU coreutils) 8.23
  • FreeBSD10.3でも動作します。
  • 注:これはRed Hat / CentOS > = 7で機能します(Red Hat / CentOS < =では機能しません6)
  • FYIこれはbusybox / alpine linux / alpinedockerイメージでは機能しません

回答

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

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

回答

/ etc / passwdの解析:

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

コメント

  • getentとは異なり、システムがLDAPを使用している場合、これは機能しません。
  • これは’ NISiの場合も機能しません使用されている、またはその他の分散認証プロトコル。
  • @choroba:LDAPまたはNISに特定の要件がある場合は、おそらくそれについて言及しているでしょう。私のソリューションは、一般的なLinuxセットアップで機能します。
  • ‘は信頼できないため、反対票を投じます(ユーザーまたはグループのいずれかに一致する可能性があります)。

回答

id | awk "{print $1}" | sed "s/.*(//;s/)$//" 

このonelinerは次のことを行います:

  • ユーザー情報を取得する
  • 最初の列を抽出する( “uid = ID(NAME)”)
  • 括弧の前のすべてを削除し、括弧自体を削除します

回答

コマンドidを使用して両方でUIDやユーザー名を検索

  1. UID by USER 例:
 $ id -u ubuntu 1000 
  1. UID で USERを検索します。例:
 $ id -un 1000 ubuntu 

現在のマシンでUIDまたはUSERが見つからない場合は、メッセージの例:

$ id -un 1234 id: 1234: no such user 

man idから:

id - print real and effective user and group IDs -n, --name print a name instead of a number, for -ugG -u, --user print only the effective user ID -g, --group print only the effective group ID -G, --groups print all group IDs 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です