루트가있는 모든 사용자를 어떻게 나열합니까?


35

리눅스 박스에서 루트 권한을 가진 모든 사용자를 나열하려면 어떻게해야합니까?


1
"루트 권한"의 의미에 대해 더 구체적으로 설명 할 수 있습니까? UID가 0 인 사용자를 의미합니까?
Chris S

무엇이든 할 수있는 능력이있는 사용자. 기본적으로-가능한 경우 사용자가 속한 그룹과 함께 사용자를 나열해야합니다.
Eric

2
컴퓨터가 어디에 있는지 알고 있다면 걸어서 전원 코드를 뽑을 수 있습니다. 그것은 "무엇이든 할 것"으로 인정 될 것입니다. Rafiq 는 가장 일반적인 세 ​​가지 사항을 나열했지만 더 많이있을 수 있으며 시스템 또는 설정 방법에 대해 알고 있습니다.
Chris S

답변:


42

루트 비밀번호를 변경하는 것을 잊지 마십시오. root 외에 UID 0을 가진 사용자가 있으면 안됩니다. 나쁜 생각. 확인하다:

grep 'x:0:' /etc/passwd

다시 말하지만이 작업을 수행하지 말고 사용자가 루트 그룹의 구성원인지 확인하십시오.

grep root /etc/group

누구나 루트로 명령을 실행할 수 있는지 확인하려면 sudoers를 확인하십시오.

cat /etc/sudoers

루트 권한으로 프로그램을 실행할 수있는 SUID 비트를 확인하려면 다음을 수행하십시오.

find / -perm -04000


엄밀히 말하면 첫 번째 파일은 섀도우 암호 파일이 사용자에게있는 경우에만 작동합니다. 나는 거의 항상 요즘에 동의하지만, 만약을 대비하여 필드 3을 명시 적으로 확인하는 빠른 펄 작업을 수행했다.
MadHatter는 Monica

4
이것은 첫 번째 패턴보다 더 나은 패턴 grep '[^:]*:[^:]*:0:' /etc/passwd입니다. 특히 SUID를 확인하는 경우 +1입니다.
추후 공지가있을 때까지 일시 중지되었습니다.

33

누가 UID 0인지 확인하려면 :

getent passwd 0

확인하려면 누가 그룹에 root, wheel adm그리고 admin:

getent group root wheel adm admin

구성원 인 모든 사용자 및 그룹을 나열하려면 다음을 수행하십시오.

getent passwd | cut -d : -f 1 | xargs groups

9
/ etc / passwd 파일에 잘못 의존하는 다른 모든 답변과 달리이 답변 getent passwd은 실제로 정확합니다. / etc / sudoers를 확인하는 것을 잊지 마십시오.
mivk

고마워 훨씬 더 명확합니다. 나에게 이것은 받아 들여지는 대답입니다.
Fiddy Bux

6

순수 루트는 사용자 ID "0"입니다.

시스템의 모든 사용자는 / etc / passwd 파일에 있습니다.

less /etc/passwd

루트 사용자는 사용자 ID로 "0"(세번째 열)을 갖습니다. 그룹 (4 번째 열)이 "0"인 사용자에게는 일부 루트 권한이있을 수 있습니다.

다음으로 그룹을 살펴보고 "루트"또는 "휠"또는 "관리자"그룹의 추가 구성원 인 사람을 확인하십시오.

less /etc/group

해당 그룹에 나열된 사용자는 특히 "sudo"명령을 통해 일부 루트 권한을 가질 수 있습니다.

마지막으로 "sudo"구성을 확인하고이 명령을 실행할 권한이있는 사용자를 확인하십시오. 이 파일 자체는 잘 문서화되어 있으므로 여기서 재현하지 않습니다.

less /etc/sudoers

그것은 루트 액세스 권한을 가진 사람의 주요 영역을 다룹니다.


권한 에스컬레이션 권한이 부여 될 수있는 장소가 더있는 경우 serverfault.com/questions/205598/… 도 참조하십시오 . (즉, consolehelperand PackageKit.)
mattdm

2
모든 사용자가 / etc / passwd에 있다고 보장되는 것은 아닙니다. 예를 들어 LDAP에있을 수 있습니다. 그러나 getent passwd정의 된 데이터베이스에 관계없이 모든 시스템 사용자 (루트 포함)를 암호 형식으로 나열해야합니다.
mivk

3

모든 사용자를 인쇄하려면

perl -n -e '@user = split /:/ ; print "@user[0]\n";' < /etc/passwd

다른 사람들이 말했듯이 UID 0을 가진 사용자 만 인쇄하려면 암시 ​​적 루트 권한이있는 사용자 :

perl -n -e '@user = split /:/ ; print "@user[0]\n" if @user[2] == "0";' < /etc/passwd

좋은 라이너지만 한계를 알고 있어야합니다 (MadHatter가 이미 알고 있음). 그룹을 검사하지 않고 sudoers를 검사하지 않습니다. 그가 말했듯이 암시 적 루트 만 검사합니다.
Rafiq Maniar

2
/ etc / passwd를 구문 분석하지 마십시오. 다른 곳에서 사용자를 정의 할 수 있습니다. getent passwd대신 사용하십시오 . 첫 번째 "모든 사용자 인쇄"예제의 경우 다음과 같이 시도하십시오.getent passwd | perl -naF: -e 'print "$F[0]\n"'
mivk

2

모든 사용자의 빠른 목록을 보려면 passwd명령 다음에 공백을 입력 한 후 탭을 두 번 누르십시오 (자동 완성) . 이것은 su명령과 함께 작동 합니다.

루트 권한이있는 사용자로 수행해야합니다.


이것이 zsh 전용 기능입니까? Bash는 openSUSE의 파일 만 제안합니다.
jgillich

bash에서 Debian (Squeeze)에서 테스트되었습니다. 누구도 공식적으로 이것을 지원할 것이라고는 생각하지 않지만 바로 가기입니다.
Emeraldo

업데이트 : El Capitan에서 더 이상 작동하지 않습니다. 보안상의 이유로 수정되었을 수 있습니다.
Emeraldo

0

한 줄짜리 답변이 없다는 것이 귀찮았습니다 ... 모든 UID 0 (루트) 계정을 나열하려면 다음을 사용하십시오.

cat /etc/passwd | cut -f1,3,4 -d":" | grep"0:0" | cut -f1 -d":" | awk '{print $1}'

베스트,

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.