La commande id
peut être utilisée pour rechercher un utilisateur « s uid
, par exemple:
$ id -u ubuntu 1000
Existe-t-il une commande pour rechercher un nom dutilisateur à partir dun uid
? Je me rends compte que cela peut être fait en regardant le fichier /etc/passwd
mais je « m demande sil existe une commande existante pour cela, surtout si lutilisateur qui lexécute nest pas root.
Je « ne cherche pas le nom dutilisateur de lutilisateur actuel , cest-à-dire que je ne cherche pas whoami
ou logname
.
Cela ma également amené à me demander si sur lhébergement Web partagé il sagissait dune fonctionnalité de sécurité, ou est-ce que je ne comprends tout simplement pas quelque chose correctement?
Pour examen, le fichier /etc/passwd
dun 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 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 .
Commentaires
- Gardez à lesprit que plusieurs utilisateurs peuvent avoir le même UID. Cela ‘ est rare, mais cela arrive occasionnellement.
Réponse
ls
effectue déjà cette recherche. Vous pouvez effectuer une recherche d’informations sur l’utilisateur depuis la ligne de commande avec getent passwd
.
Si ls
affiche un ID utilisateur au lieu dun nom dutilisateur, cest parce quil ny a pas dutilisateur de ce nom. Les systèmes de fichiers stockent les ID utilisateur, pas les noms dutilisateur. Si vous montez un système de fichiers à partir dun 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 na 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. Cest un peu bizarre (pourquoi partager des fichiers mais pas les utilisateurs qui les possèdent?), mais cest techniquement possible.
Commentaires
- I ‘ je vois le numéro au lieu du nom sur
ls -l
si le nom a plus de huit caractères. - @kgrittn Cela peut dépendre sur la variante Unix. GNU ls affiche le nom dutilisateur complet. BusyBox ls le tronque à 8 caractères (au moins sur la version que jai ici).
Réponse
Essayez
getent passwd "$uid" | cut -d: -f1
Commentaires
- Si cela ne renvoie rien, cela signifie que je ne ‘ Vous navez pas accès à la traduction de lidentifiant en nom dutilisateur?
- Vous navez probablement pas
t set
» $ uid » `ou cet uid nexiste ‘ t.grep ":$uid:" /etc/passwd
le trouve-t-il?getent passwd
produit-il une sortie? - @cwd: vous devriez toujours avoir accès pour traduire un identifiant en nom dutilisateur. Par exemple,
ls -l
fait toujours cela. - Juste curieux car en regardant une
ls
liste sur un hôte partagé montrait des nombres dans les colonnes de nom dutilisateur / groupe avec ls. Peut-être est-ce une précaution de sécurité ou une chose jailshell? - @cwd Il est plus probable que lhôte partagé utilise un
/etc/passwd
monté / partagé ailleurs qui nétait pas ‘ t monté à lépoque.
Réponse
Vous pourriez apprécier ce petit chansonnette.
$ id -nu [number]
3.17.3-1-ARCH # 1 SMP PREEMPT Ven 14 novembre 22:56:01 CET 2014 i686 GNU / Linux
Je peux confirmer quil renvoie un nom dutilisateur correspondant, sil en existe un, sur Arch Linux. Je peux également confirmer quil ne fonctionne pas sur Ubuntu lorsquil est exécuté en tant quutilisateur normal, bien que je ne lai pas testé en tant que superutilisateur. Cela ne fonctionne pas non plus sur Alpine Linux. Peut-être quune fonction de sécurité empêche cela de fonctionner sur certains systèmes.
Commentaires
-
id -u jimmij
= >1000
.id -nu 1000
= >id: 1000: no such user
. - fonctionne pour moi, avec
id --version
=id (GNU coreutils) 8.23
- Fonctionne également dans FreeBSD 10.3.
- note: cela fonctionne sur Red Hat / CentOS > = 7 (pas sur Red Hat / CentOS < = 6)
- Pour info, cela ne fonctionne pas sur les images busybox / alpine linux / alpine docker
Réponse
Je me rends compte que cest une vieille question, mais voici une autre réponse
awk -F: "{print $1,$3}" /etc/passwd | grep <UID>
Commentaires
- Rediriger vers
grep
quoi? (De plus, si vous ajoutez quatre espaces au début de la ligne, elle sera rendue sous forme de texte de largeur fixe.) - Je préfère la réponse avec
getent passwd
. Mais si vous analysez / etc / passwd, il serait plus agréable dutiliser awk uniquementID=0 ; awk -F: '{if ( $3 == '"$ID"' ) print $1}' /etc/passwd
.
Réponse
Parse / etc / passwd:
% awk -F: "/:$(id -u ubuntu):/{print \$1}" /etc/passwd ubuntu
Commentaires
- Contrairement à
getent
, cela ne fonctionne pas si le système utilise LDAP. - cela ne ‘ t fonctionne pas non plus si NIS i est utilisé ou tout autre protocole dauthentification distribué.
- @choroba: sil avait une exigence spécifique pour LDAP ou NIS, il laurait probablement mentionné. Ma solution fonctionne sur les configurations Linux classiques.
- vote défavorable car elle ‘ nest pas fiable (elle peut correspondre à lutilisateur ou au groupe).
Réponse
id | awk "{print $1}" | sed "s/.*(//;s/)$//"
Cet oneliner effectue les opérations suivantes:
- obtenir des informations sur lutilisateur
- extraire la première colonne (« uid = ID (NAME) »)
- supprimer tout ce qui se trouve avant les crochets et les crochets eux-mêmes
Réponse
La commande id
peut être utilisée pour les deux pour rechercher lUID et / ou le nom de lUTILISATEUR
- rechercher un UID par USER , par exemple:
$ id -u ubuntu 1000
- recherchez un USER par UID , par exemple:
$ id -un 1000 ubuntu
Si lUID ou USER nest pas trouvé sur la machine actuelle, il imprime message, par exemple:
$ id -un 1234 id: 1234: no such user
From 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