web-dev-qa-db-fra.com

Comment puis-je rechercher un nom d'utilisateur par identifiant sous Linux?

La commande id peut être utilisée pour rechercher uid d'un utilisateur, par exemple:

$ id -u ubuntu
1000

Existe-t-il une commande pour rechercher un nom d'utilisateur à partir d'un uid? Je me rends compte que cela peut être fait en regardant le /etc/passwd fichier mais je demande s'il y a une commande existante pour cela, surtout si l'utilisateur qui l'exécute n'est pas root.

Je ne recherche pas le nom d'utilisateur actuel de l'utilisateur, c'est-à-dire que je ne recherche pas whoami ou logname.

Cela m'a également amené à me demander si, sur l'hébergement Web partagé, il s'agit d'une fonctionnalité de sécurité, ou si je ne comprends tout simplement pas quelque chose correctement?

Pour examen, le /etc/passwd fichier d'un hôte Web partagé:

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

Et voici un exemple de liste de répertoires de /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

Nous pouvons voir que root est le propriétaire de certains fichiers, et root apparaît également dans /etc/passwd, mais les autres utilisateurs/groupes apparaissent tous sous forme de nombres.

70
cwd

ls effectue déjà cette recherche. Vous pouvez effectuer une recherche d'informations utilisateur à partir de la ligne de commande avec getent passwd .

Si ls affiche un ID utilisateur au lieu d'un nom d'utilisateur, c'est parce qu'il n'y a pas d'utilisateur de ce nom. Les systèmes de fichiers stockent les ID utilisateur, pas les noms d'utilisateur. Si vous montez un système de fichiers à partir d'un autre système, ou si un fichier appartient à un utilisateur maintenant supprimé, ou si vous avez passé un ID utilisateur numérique à chown, vous pouvez avoir un fichier qui appartient à un ID utilisateur qui ne pas de nom.

Sur un hôte partagé, vous pouvez avoir accès à certains fichiers qui sont partagés entre plusieurs machines virtuelles, chacune avec leur base de données utilisateur. C'est un peu bizarre (pourquoi partager des fichiers mais pas les utilisateurs qui les possèdent?), Mais c'est techniquement possible.

Essayer

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

Vous pourriez apprécier cette petite chanson.

$ id -nu [number]

3.17.3-1-Arch # 1 SMP PREEMPT ven nov 14 22:56:01 CET 2014 i686 GNU/Linux

Je peux confirmer qu'il renvoie un nom d'utilisateur correspondant, s'il existe, sur Arch Linux. Je peux également confirmer que cela ne fonctionne pas sur Ubuntu lorsqu'il est exécuté en tant qu'utilisateur normal, bien que je n'ai pas testé cela en tant que superutilisateur. Il ne fonctionne pas non plus sur Alpine Linux. Peut-être qu'une fonction de sécurité l'empêche de fonctionner sur certains systèmes.

46
Stefan

Je me rends compte que c'est une vieille question, mais voici une autre réponse

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

Analyser/etc/passwd:

% awk -F: "/:$(id -u ubuntu):/{print \$1}" /etc/passwd
ubuntu
0
laebshade
id | awk '{print $1}' | sed 's/.*(//;s/)$//'

Cet oneliner fait ce qui suit:

  • obtenir des informations sur l'utilisateur
  • extraire la première colonne ("uid = ID (NAME)")
  • supprimer quoi que ce soit avant les crochets et les crochets eux-mêmes
0
NAIM