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.
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
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.
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>
Analyser/etc/passwd:
% awk -F: "/:$(id -u ubuntu):/{print \$1}" /etc/passwd
ubuntu
id | awk '{print $1}' | sed 's/.*(//;s/)$//'
Cet oneliner fait ce qui suit: