Linux'ta kimliğe göre bir kullanıcı adına nasıl bakabilirim?


67

Komut id, bir kullanıcıyı aramak için kullanılabilir uid, örneğin:

$ id -u ubuntu
1000

Bir kullanıcı adı aramak için bir komut var mı uid? Bunun /etc/passwddosyaya bakarak yapılabileceğinin farkındayım, ancak bunun için mevcut bir komut olup olmadığını soruyorum, özellikle çalışan kullanıcı root değilse.

Ben aramıyorum akım yani ben aramıyorum, kullanıcıya ait kullanıcı whoamiveya logname.

Bu da bana bu web barındırma paylaşılan bir güvenlik özelliği olup olmadığını merak ya da ben sadece doğru bir şey anlamıyorum?

İnceleme için, /etc/passwdpaylaşılan bir web sunucusundaki dosya:

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

Ve burada örnek bir dizin listesi /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

Biz görebilirsiniz rootbazı dosyaların sahibidir ve rootaynı zamanda yukarı gösteriyor /etc/passwdancak diğer kullanıcılar / gruplar tüm numaralar olarak gösterilir.


6
Birden fazla kullanıcının aynı UID'ye sahip olabileceğini unutmayın. Nadirdir, ancak bazen olur.
Barry Brown

Yanıtlar:


35

lszaten bu aramayı yapıyor. İle komut satırından kullanıcı bilgisi araması yapabilirsiniz getent passwd.

Eğer lsbir kullanıcı kimliği yerine bir kullanıcı adı gösteren adında bir kullanıcı olmadığından, bu kadar. Dosya sistemleri, kullanıcı adlarını değil kullanıcı adlarını saklar. Bir dosya sistemini başka bir sistemden bağlarsanız veya bir dosya silinmiş bir kullanıcıya aitse veya sayısal chownbir kullanıcı kimliği geçirdiyseniz, adı olmayan bir kullanıcı kimliğine ait bir dosyaya sahip olabilirsiniz.

Paylaşılan bir ana bilgisayarda, her biri kendi kullanıcı veritabanıyla, birkaç sanal makine arasında paylaşılan bazı dosyalara erişebilirsiniz. Bu biraz garip (neden dosyaları paylaşıyor ancak sahiplerine sahip olan kullanıcıları değil?), Ancak teknik olarak mümkün.


2
ls -lAdın uzunluğu sekiz karakterden fazlaysa , ad yerine sayıyı görüyorum .
kgrittn

@kgrittn Unix değişkenine bağlı olabilir. GNU ls tüm kullanıcı adını gösterir. BusyBox ls, 8 karaktere kadar kısaltır (en azından burada bulunan yapı üzerinde).
Gilles,

66

Deneyin

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

Bu hiçbir şey döndürmezse, kimliği kullanıcı adına çevirme erişimim olmadığı anlamına mı geliyor?
cwd

1
Büyük olasılıkla t set "$ uid" `yapmadınız ya da bu uid mevcut değil. Bulur mu grep ":$uid:" /etc/passwd? Mu getent passwdherhangi bir çıktı üretmek?
Mikel

@cwd: Her zaman bir kimliği kullanıcı adına çevirmeye erişiminiz olmalıdır. Örneğin ls -l, her zaman bunu yapıyor.
Camh

Merak ediyorum çünkü lspaylaşılan bir ana bilgisayardaki bir listeye bakmak, ls ile kullanıcı / grup adı sütunlarında sayıları gösteriyordu. Belki de bir güvenlik önlemi veya hapishane kabuğudur.
cwd

@cwd Daha büyük olasılıkla paylaşılan ana bilgisayar, /etc/passwdbaşka bir yerden, o sırada monte edilmemiş bir montajlı / paylaşımlı kullanıyor .
jw013

39

Bu küçük kurnazlığın tadını çıkarabilirsiniz.

$ id -nu [number]

3.17.3-1-ARCH # 1 SMP HAZIRLIK Cum Cuma 14 22:56:01 CET 2014 i686 GNU / Linux

Arch Linux'ta varsa, uygun bir kullanıcı adı döndürdüğünü onaylayabilirim. Bunu normal kullanıcı olarak çalıştırdığımda Ubuntu'da çalışmadığını da söyleyebilirim, ancak bunu süper kullanıcı olarak test etmedim. Aynı zamanda Alpine Linux üzerinde çalışmıyor. Belki bir güvenlik özelliği bunun bazı sistemlerde çalışmasını önler.


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

2
benim için çalışıyor id --version= =id (GNU coreutils) 8.23
eMPee584

Ayrıca FreeBSD 10.3'te çalışır.
kare

not: bu, Red Hat / CentOS> = 7'de çalışır (Red Hat / CentOS <= 6'da değil)
Franklin Piat

Bilginize bu mu değil busybox / alpin linux / alpin liman işçisi resimlerde çalışır
jjj

0

Bunun eski bir soru olduğunu biliyorum ama işte başka bir cevap

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

grepNeye boru ? (Ayrıca, satırın başına dört boşluk eklerseniz, bunu sabit genişlikli metin olarak oluşturur.)
Wildcard

Ben cevabı tercih ederim getent passwd. Ancak / etc / passwd'nin ayrıştırılması durumunda, sadece awk kullanmak daha iyi olacaktır ID=0 ; awk -F: '{if ( $3 == '"$ID"' ) print $1}' /etc/passwd.
Franklin Piat

-1

Ayrıştırma / etc / passwd:

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

7
Aksine getent, sistem LDAP kullanıyorsa bu çalışmaz.
choroba

3
Bu, NIS kullanılırsa veya diğer dağıtılmış kimlik doğrulama protokolü ne olursa olsun çalışmaz.
jlliagre

@choroba: LDAP veya NIS için özel bir gereksinimi olsa, muhtemelen söylerdi. Benim çözümüm tipik linux kurulumlarında çalışıyor.
laebshade

2
indirgeme beacause güvenilir değil (kullanıcı veya grup ile eşleşebilir).
Franklin Piat

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

4
Merhaba NAIM. Bu doğru bir cevap olsa da, cevabınızı bunun nasıl çalıştığını kısaca açıklamak için düzenleyebilmeniz durumunda, askerin (ve muhtemelen çözümünüzün gelecekteki okurları) yardımcı olacaktır.
roaima
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.