id
명령을 사용하여 사용자의 uid
, 예 :
$ id -u ubuntu 1000
uid
에서 사용자 이름을 조회하는 명령이 있습니까? ? /etc/passwd
파일을보고이 작업을 수행 할 수 있다는 것을 알고 있지만, 특히이를 실행하는 사용자가 루트가 아닌 경우에 기존 명령이 있는지 묻습니다.
현재 사용자의 사용자 이름을 찾고 있지 않습니다. 즉, whoami
또는 .
이로 인해 공유 웹 호스팅에서 이것이 보안 기능인지, 아니면 정확히 이해하지 못하는 것인지 궁금해졌습니다.
검사를 위해 공유 웹 호스트의 /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
다음은
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
에 표시되지만 다른 사용자 / 그룹은 모두 숫자로 표시됩니다. .
댓글
- 두 명 이상의 사용자가 동일한 UID를 가질 수 있습니다. ‘ 드물지만 가끔 발생합니다.
답변
ls
는 이미 해당 조회를 수행합니다. getent passwd
를 사용하여 명령 줄에서 사용자 정보 조회를 수행 할 수 있습니다.
If ls
는 사용자 이름 대신 사용자 ID를 표시합니다. 이는 해당 이름의 사용자가 없기 때문입니다. 파일 시스템은 사용자 이름이 아닌 사용자 ID를 저장합니다. 다른 시스템에서 파일 시스템을 마운트하거나 파일이 지금 삭제 된 사용자에게 속해 있거나 숫자 사용자 ID를 chown
에 전달한 경우 해당 파일을 가질 수 있습니다. “이름이없는 사용자 ID로.
공유 호스트에서는 각각의 사용자 데이터베이스가있는 여러 가상 머신간에 공유되는 일부 파일에 액세스 할 수 있습니다. 이것은 약간 이상합니다. (파일을 공유하지만 파일을 소유 한 사용자는 공유하지 않는 이유는 무엇입니까?)하지만 기술적으로 가능합니다.
댓글
- I ‘ 이름이 8 자 이상인 경우
ls -l
에 이름 대신 번호가 표시됩니다. - @kgrittn 유닉스 변형에서. GNU ls는 전체 사용자 이름을 보여줍니다. BusyBox ls는 8 자로 자릅니다 (적어도 여기에있는 빌드에서).
답변
시도
getent passwd "$uid" | cut -d: -f1
댓글
- 아무것도 반환되지 않는 경우 ‘ ID를 사용자 이름으로 변환 할 수있는 권한이 없습니까?
-
t set
” $ uid “`또는 해당 uid가 ‘ 존재하지 않습니다.grep ":$uid:" /etc/passwd
에서 찾을 수 있습니까?getent passwd
가 출력을 생성합니까? - @cwd : 항상 ID를 사용자 이름으로 변환 할 수있는 액세스 권한이 있어야합니다. 예를 들어,
ls -l
는 항상이 작업을 수행합니다. - 공유 호스트의
ls
목록을보고 있기 때문에 궁금합니다. 사용자 / 그룹 이름 열에 ls가있는 숫자를 표시했습니다. 보안 예방 조치일까요 아니면 감옥일까요? - @cwd 공유 호스트가 다른 곳에서 마운트 / 공유 된
/etc/passwd
를 사용할 가능성이 더 높습니다. ‘ 당시 마운트되지 않았습니다.
답변
이 작은 것을 즐길 수도 있습니다. 소곡.
$ id -nu [number]
3.17.3-1-ARCH # 1 SMP PREEMPT 금요일 11 월 14 일 22:56:01 CET 2014 i686 GNU / Linux
아치 리눅스에서 해당 사용자 이름이있는 경우 해당 사용자 이름을 반환하는 것을 확인할 수 있습니다. 일반 사용자로 실행할 때 Ubuntu에서 작동하지 않는지 확인할 수도 있지만 수퍼 유저로 테스트하지는 않았습니다. 또한 Alpine Linux에서는 작동하지 않습니다. 보안 기능으로 인해 일부 시스템에서이 기능이 작동하지 않을 수 있습니다.
댓글
-
id -u jimmij
= >1000
.id -nu 1000
= >id: 1000: no such user
. -
id --version
=id (GNU coreutils) 8.23
- FreeBSD 10.3에서도 작동합니다.
- 참고 :이 기능은 Red Hat / CentOS > = 7에서 작동합니다 (Red Hat / CentOS에서 작동하지 않음 < = 6)
- 참고로 이것은 busybox / alpine linux / alpine docker 이미지에서 작동하지 않습니다 .
답변
이 질문이 오래된 질문이라는 것을 알고 있지만 여기에 또 다른 답변이 있습니다.
awk -F: "{print $1,$3}" /etc/passwd | grep <UID>
댓글
- 파이프에서
grep
무엇입니까? (또한 줄 시작 부분에 공백을 4 개 추가하면 고정 너비 텍스트로 렌더링됩니다.) -
getent passwd
에 대한 대답을 선호합니다. 그러나 / etc / passwd를 구문 분석하는 경우 awk 만 사용하는 것이 더 좋을 것입니다.ID=0 ; awk -F: '{if ( $3 == '"$ID"' ) print $1}' /etc/passwd
.
답변
구문 분석 / etc / passwd :
% awk -F: "/:$(id -u ubuntu):/{print \$1}" /etc/passwd ubuntu
댓글
-
getent
와 달리 시스템에서 LDAP를 사용하는 경우 작동하지 않습니다. - NIS i 인 경우에도 ‘ 작동하지 않습니다. s 사용 또는 기타 분산 인증 프로토콜.
- @choroba : LDAP 또는 NIS에 대한 특정 요구 사항이 있었다면 아마도 언급했을 것입니다. 내 솔루션은 일반적인 Linux 설정에서 작동합니다.
- ‘ 신뢰할 수 없기 때문에 반대 투표합니다 (사용자 또는 그룹과 일치 할 수 있음).
Answer
id | awk "{print $1}" | sed "s/.*(//;s/)$//"
이 oneliner는 다음을 수행합니다.
- 사용자 정보 가져 오기
- 첫 번째 열 추출 ( “uid = ID (NAME)”)
- 대괄호 앞의 모든 항목과 대괄호 자체 제거
답변
id
명령을 사용하여 둘 다 UID 및 / 또는 사용자 이름을 조회합니다.
- 사용자 별 UID , 예 :
$ id -u ubuntu 1000
- UID 별 사용자 를 찾습니다. 예 :
$ id -un 1000 ubuntu
현재 시스템에서 UID 또는 USER를 찾을 수 없으면 메시지, 예 :
$ 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