루트 권한을 가진 모든 사용자 (예 : sudo)를 나열하는 명령이 필요합니다.
내가 sudoer 사용자라고 가정하십시오. 다른 모든 sudoer 사용자를 어떻게 알 수 있습니까?
루트 권한을 가진 모든 사용자 (예 : 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
: grep
Perl 스타일 정규식과 일치o
: grep
일치하는 문자열 만 인쇄합니다'^sudo.+:\K.*$'
: grep
따옴표 사이의 정규 표현식과 일치시킵니다.정규식 # 1 분석 :
^
: 줄의 시작.+
: 하나 이상의 문자\K
: 이전 경기를 버리십시오.*
: 0 개 이상의 문자$
: 줄의 끝명령 # 2 고장 :
grep
: 파일의 정규식과 일치하는 모든 줄을 인쇄합니다'^sudo.+:\K.*$'
: grep
따옴표 사이의 정규 표현식과 일치시킵니다.cut
: 파일에서 각 줄의 지정된 섹션 만 인쇄합니다-d:
: 필드 구분자로 cut
해석 :
합니다.-f4
: cut
네 번째 필드 만 인쇄합니다정규식 # 2 분석 :
^
: 줄의 시작.*
: 0 개 이상의 문자$
: 줄의 끝getent group sudo | cut -d: -f4
또는 awk를 사용하지만 group과 passwd에는 구분 기호가있는 고정 형식이 있음을 기억하십시오.
getent group
-당신은 전혀 grep이 필요하지 않습니다. getent group foo
처럼 grep foo /etc/group
,하지만 더 할 수.
getent
습니다. 어떻게 계산 grep
하고 getent
비교 하는 데 어려움이 있습니까? 달리는 것이 더 가벼울 getent
까요?
sudo
그룹의 구성원이라고 가정합니다 . 일부 유닉스에는와 같은 다른 그룹이 있습니다 wheel
. @muru의 답변에는 그룹에 관계없이 모든 sudoers가 포함됩니다.
여기에 언급했듯이 -l
& -U
옵션을 함께 사용하는 가장 간단한 방법을 고려하면 다음과 같이 입력 users
하십시오 John
.
사용자에게 sudo
액세스 sudo
권한이있는 경우 해당 특정 사용자 에 대한 액세스 레벨을 인쇄합니다 .
sudo -l -U John
User John may run the following commands on this host:
(ALL : ALL) ALL
사용자에게 sudo 액세스 권한이 없으면 사용자가 sudo
localhost 에서 실행할 수 없다는 메시지가 표시 됩니다.
sudo -l -U John
User John is not allowed to run sudo on localhost.
"%domain admins@mycompany.intra" ALL=(ALL) ALL
작동합니다. 로컬 사용자가 아닌 사람들에게도 효과가 있다는 것을 알지 못했기 때문에 많은 시간을 절약했습니다.
이미 언급했듯이 유닉스 및 리눅스 스택 교환 에서 답을 찾을 수 있습니다 .
이는 "saml"사용자가 휠 그룹의 구성원임을 나타냅니다.
$ getent group wheel wheel:x:10:saml
유일한 차이점은 Ubuntu의 그룹은 wheel
아니지만 sudo
(또는 admin
이전 버전의 Ubuntu)입니다. 따라서 명령은 다음과 같습니다.
getent group sudo
geten group
다른 숫자를 많이 봅니다. 내 원래 질문은 사용자가 시스템 사용자인지 확인하는 방법입니다 (로 만든 useradd -r
)
sudo -l -U
테스트를 확장하여 사용할 getent passwd
수있는 사용자를 결정할 수 있습니다 sudo
. 를 사용 getent
하면 passwd
LDAP 사용자와 같이 파일 에없는 사용자에게 액세스 할 수 있습니다 .
getent passwd | cut -f1 -d: | sudo xargs -L1 sudo -l -U | grep -v 'not allowed'
sudo -U
우리가 활용할 수있는 0이 아닌 종료 값을 반환하지 않으므로 출력을 grepping하는 것이 줄어 듭니다.
sudo
입니다.
대부분의 유닉스 계열 시스템에서 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 권한이있는 사용자입니다.
cat
.
나는 방법에 대해 난처한 상황에 빠진 한 vagrant
사용자가 사용할 수 있습니다 sudo
언급하지 않고 심지어는 /etc/sudoers
도에서 /etc/group
도 발견 getent
.
밝혀 sudo
도 아래의 모든 파일에서 항목을 읽습니다/etc/sudoers.d/
. 따라서 해당 디렉토리를 살펴 보지 않으면 실제로 sudo
액세스 할 수있는 사용자 수를 알지 못할 수 있습니다.
이러한 종류의 sudo
액세스는 JoKeR의 답변을 사용하여 감지 할 수 sudo -l -U vagrant
있지만 여기 getent
또는 모두에 의존하는 다른 답변은 감지하지 않습니다 /etc/group
.