리눅스에서 아이디로 아이디를 어떻게 찾을 수 있습니까?


67

이 명령 iduid예를 들어 사용자를 조회하는 데 사용할 수 있습니다 .

$ id -u ubuntu
1000

에서 사용자 이름을 조회하는 명령이 uid있습니까? /etc/passwd파일 을 보면이 작업을 수행 할 수 있지만 기존 명령이 있는지, 특히 사용자가 루트가 아닌 경우 묻습니다.

내가 찾는 게 아니에요 현재 즉, 내가 찾고 있지 않다, 사용자의 사용자 이름 whoami이나 logname.

이것은 또한 공유 웹 호스팅에서 이것이 보안 기능인지 궁금하게 만들었습니다. 아니면 무언가를 올바르게 이해하지 못하고 있습니까?

검사 /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

다음은 샘플 디렉토리 목록입니다. /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

우리는 root일부 파일의 소유자 root이며에도 표시 /etc/passwd되지만 다른 사용자 / 그룹은 모두 숫자로 표시됩니다.


6
둘 이상의 사용자가 동일한 UID를 가질 수 있습니다. 드물지만 가끔 발생합니다.
베리 브라운

답변:


35

ls이미 해당 조회를 수행합니다. 로 명령 줄에서 사용자 정보 조회를 수행 할 수 있습니다 getent passwd.

경우 ls사용자 ID 대신 사용자 이름을 보여줍니다 이름에 사용자가 없습니다 때문입니다. 파일 시스템은 사용자 이름이 아닌 사용자 ID를 저장합니다. 다른 시스템에서 파일 시스템을 마운트하거나 파일이 현재 삭제 된 사용자에게 속한 경우 또는 숫자 사용자 ID를에 전달한 경우 chown이름이없는 사용자 ID에 속하는 파일을 가질 수 있습니다.

공유 호스트에서 각각 사용자 데이터베이스가있는 여러 가상 머신간에 공유되는 일부 파일에 액세스 할 수 있습니다. 이것은 조금 이상하지만 (파일을 공유하지만 사용자는 소유하지 않는 이유는 무엇입니까?) 기술적으로 가능합니다.


2
ls -l이름이 8자를 넘으면 이름 대신 숫자가 표시됩니다 .
kgrittn

@kgrittn 유닉스 변종에 따라 다를 수 있습니다. GNU ls는 전체 사용자 이름을 보여줍니다. BusyBox ls는 8 자로 자릅니다 (적어도 내가 빌드 한 빌드에서는).
Gilles

66

시험

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

이것이 아무것도 반환하지 않으면 ID를 사용자 이름으로 변환 할 수있는 권한이 없다는 것을 의미합니까?
cwd

1
아마도 t set "$ uid"`또는 uid가 존재하지 않을 가능성이 높습니다 . 않는다 grep ":$uid:" /etc/passwd그것을 발견? getent passwd출력을 생성 합니까 ?
Mikel

@cwd : ID를 사용자 이름으로 변환하려면 항상 액세스 할 수 있어야합니다. 예를 들어 ls -l항상이 작업을 수행합니다.
camh

ls공유 호스트 의 목록을 보면 ls로 사용자 / 그룹 이름 열에 숫자가 표시되어 있기 때문에 궁금 합니다. 아마도 보안 예방 조치 또는 탈옥입니까?
cwd

@cwd 공유 호스트가 /etc/passwd당시 마운트되지 않은 다른 곳에서 마운트 / 공유 된 것을 사용하고있을 가능성이 높습니다 .
jw013

39

이 작은 똥을 즐길 수 있습니다.

$ id -nu [number]

3.17.3-1-ARCH # 1 SMP PREEMPT 금 11 월 14 일 22:56:01 CET 2014 i686 GNU / Linux

Arch Linux에서 해당하는 사용자 이름 (있는 경우)을 리턴 함을 확인할 수 있습니다. 또한 수퍼 유저로 테스트하지는 않았지만 일반 사용자로 실행할 때 Ubuntu에서 작동하지 않음을 확인할 수도 있습니다. Alpine Linux에서도 작동하지 않습니다. 보안 기능으로 인해 일부 시스템에서 작동하지 않을 수 있습니다.


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

2
와, 나를 위해 작동 id --version=id (GNU coreutils) 8.23
eMPee584

FreeBSD 10.3에서도 작동합니다.

참고 : 이것은 Red Hat / CentOS> = 7에서 작동합니다 (Red Hat / CentOS <= 6에서는 아님)
Franklin Piat

참고로 busybox / alpine linux / alpine docker 이미지 에서는 작동 하지 않습니다.
jjj

0

나는 이것이 오래된 질문이라는 것을 알고 있지만 여기에 다른 대답이 있습니다.

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

grep무엇에 파이프 ? (또한 줄의 시작 부분에 4 개의 공백을 추가하면 고정 너비 텍스트로 렌더링됩니다.)
Wildcard

나는 대답을 선호합니다 getent passwd. 그러나 / etc / passwd를 구문 분석하면 awk 만 사용하는 것이 좋습니다 ID=0 ; awk -F: '{if ( $3 == '"$ID"' ) print $1}' /etc/passwd.
Franklin Piat

-1

/ etc / passwd 구문 분석 :

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

7
와 달리 getent시스템이 LDAP를 사용하는 경우 작동하지 않습니다.
choroba

3
NIS를 사용하거나 다른 분산 인증 프로토콜을 사용하는 경우에는 작동하지 않습니다.
jlliagre

@choroba : LDAP 또는 NIS에 대한 특정 요구 사항이 있었다면 아마도 언급했을 것입니다. 내 솔루션은 일반적인 Linux 설정에서 작동합니다.
laebshade

2
downvote beacause 신뢰할 수 없습니다 (사용자 또는 그룹과 일치 할 수 있음).
Franklin Piat

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

4
안녕하세요. 이것이 정답 일 수도 있지만, 이것이 어떻게 작동하는지 간략하게 설명하기 위해 답을 편집 할 수 있다면 질문자 (및 미래의 솔루션 독자)에게 도움이 될 것입니다.
roaima
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.