슈퍼 사용자를 모두 나열하려면 어떻게해야합니까? : sudo)를 나열하는 명령이

루트 권한을 가진 모든 사용자 (예 : sudo)를 나열하는 명령이 필요합니다.

내가 sudoer 사용자라고 가정하십시오. 다른 모든 sudoer 사용자를 어떻게 알 수 있습니까?



답변

sudo그룹에 나열된 sudoers를 나열 해야하는 경우 가장 좋은 방법은이 명령을 실행하는 것입니다 ( 이 답변의 다른 명령보다 계산이 가벼워 함).

grep -Po '^sudo.+:\K.*$' /etc/group

또한 muru의 의견에서 제안한 것처럼 항목의 형식은 다음 /etc/group을 통해 쉽게 처리 할 수 ​​있습니다 cut.

grep '^sudo:.*$' /etc/group | cut -d: -f4

또한 muru의 의견에서 제안한대로 다음 getent대신 사용할 수 있습니다 grep.

getent group sudo | cut -d: -f4

이러한 명령은 sudo그룹에 나열된 모든 사용자를 표시합니다 /etc/group(있는 경우).

명령 # 1 고장 :

  • grep: 파일의 정규식과 일치하는 모든 줄을 인쇄합니다
  • -P: grepPerl 스타일 정규식과 일치
  • o: grep일치하는 문자열 만 인쇄합니다
  • '^sudo.+:\K.*$': grep따옴표 사이의 정규 표현식과 일치시킵니다.

정규식 # 1 분석 :

  • 나열되지 않은 문자 또는 문자 그룹은 문자 또는 문자 그룹 자체와 일치합니다.
  • ^: 줄의 시작
  • .+: 하나 이상의 문자
  • \K: 이전 경기를 버리십시오
  • .*: 0 개 이상의 문자
  • $: 줄의 끝

명령 # 2 고장 :

  • grep: 파일의 정규식과 일치하는 모든 줄을 인쇄합니다
  • '^sudo.+:\K.*$': grep따옴표 사이의 정규 표현식과 일치시킵니다.
  • cut: 파일에서 각 줄의 지정된 섹션 만 인쇄합니다
  • -d:: 필드 구분자로 cut해석 :합니다.
  • -f4: cut네 번째 필드 만 인쇄합니다

정규식 # 2 분석 :

  • 나열되지 않은 문자 또는 문자 그룹은 문자 또는 문자 그룹 자체와 일치합니다.
  • ^: 줄의 시작
  • .*: 0 개 이상의 문자
  • $: 줄의 끝

답변

여기에 언급했듯이 -l& -U옵션을 함께 사용하는 가장 간단한 방법을 고려하면 다음과 같이 입력 users하십시오 John.

사용자에게 sudo액세스 sudo권한이있는 경우 해당 특정 사용자 에 대한 액세스 레벨을 인쇄합니다 .

  sudo -l -U John
  User John may run the following commands on this host:
     (ALL : ALL) ALL

사용자에게 sudo 액세스 권한이 없으면 사용자가 sudolocalhost 에서 실행할 수 없다는 메시지가 표시 됩니다.

   sudo -l -U John
   User John is not allowed to run sudo on localhost.


답변

이미 언급했듯이 유닉스 및 리눅스 스택 교환 에서 답을 찾을 수 있습니다 .

이는 “saml”사용자가 휠 그룹의 구성원임을 나타냅니다.

$ getent group wheel
wheel:x:10:saml

유일한 차이점은 Ubuntu의 그룹은 wheel아니지만 sudo(또는 admin이전 버전의 Ubuntu)입니다. 따라서 명령은 다음과 같습니다.

getent group sudo


답변

sudo -l -U테스트를 확장하여 사용할 getent passwd수있는 사용자를 결정할 수 있습니다 sudo. 를 사용 getent하면 passwdLDAP 사용자와 같이 파일 에없는 사용자에게 액세스 할 수 있습니다 .

getent passwd | cut -f1 -d: | sudo xargs -L1 sudo -l -U | grep -v 'not allowed'

sudo -U 우리가 활용할 수있는 0이 아닌 종료 값을 반환하지 않으므로 출력을 grepping하는 것이 줄어 듭니다.


답변

대부분의 유닉스 계열 시스템에서 sudo 명령이 있고 sudo 구성 파일이 있습니다. 루트로 visudo 실행 :

:~$ sudo bash

또는

:~$ su

:~# visudo

관리자는 sudo 명령을 사용할 수있는 그룹의 권한을 검사하고 수정할 수 있습니다.

우분투와 같은 데비안 기반 유닉스 계열 시스템에서 그룹 4와 27은 일반적으로 sudo 권한에 대한 액세스 권한을 갖습니다.

그룹 4는 관리자 그룹 (adm)이고 그룹 27은 sudo gid입니다.

이 그룹에 현재 할당 된 사용자를 확인하려면 아래와 같이 / etc / group 파일을 만드십시오.

:~$ cat /etc/group

Ubuntu (Redhat 기반, Oracle Solaris / Solaris 기반 또는 BSD 기반 시스템은 아님)의 샘플 출력은 다음과 같습니다.

adm:x:4:youruser
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:youruser,mybrother
floppy:x:25:
tape:x:26:
sudo:x:27:youruser,mybrother

우리가 알 수 있듯이, 사용자는 시스템의 관리자이며 그룹 4 (adm)의 구성원입니다. 그러나 사용자와 mybrother는 그룹 sudo의 gid (그룹 식별) 수인 그룹 27의 구성원입니다. 따라서 mybrother는 루트 권한 (슈퍼 사용자)도 얻을 수 있습니다.

Fedora 및 Slackware와 같은 많은 Linux 시스템은 gid = 10이라는 휠 그룹을 통합합니다. sudo 명령이 적용될 때 관리자 권한을 허용합니다. BSD 기반 시스템 (예 : FreeBSD)에서 루트 사용자는 gid 0 인 휠 그룹의 멤버입니다.

또한 id 명령을 사용하면 모든 사용자가 시스템에 알려진 다른 사용자의 그룹 정보를 찾을 수 있습니다.

예를 들어 :

:~$ id mybrother

샘플 출력

uid=1001(mybrother) gid=1001(mybrother) groups=1001(mybrother),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)


답변

이 명령은 sudo 권한을 가진 사용자 목록을 반환합니다.

awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' /etc/passwd

출력은 (예) :

<username> : <username> adm cdrom sudo dip plugdev lpadmin sambashare docker

사용자 이름 만 표시하려면이 명령을 사용하십시오.

awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' | awk -F ":" '{ print $1 }' /etc/passwd


답변

명령:

cat /etc/group | grep sudo

산출:

sudo:x:27:Tom,Stacy

Tom, Stacy는 sudo 권한이있는 사용자입니다.