모든 SUID / SGID 파일을 검색하는 방법은 무엇입니까?


11

웹에서 찾은 모든 하우투는 다음과 같습니다.

Find all SUID files:
find / -perm -4000 -print
Find all SGID files:
find / -perm -2000 -print 

그러나 그것은 사실이 아닙니다. 보다:

$ ls -lah test
-r-sr-xr-x  1 user  user     0B Jan 24 22:47 test
$ 
$ 
$ stat -x test | grep Mode
  Mode: (4555/-r-sr-xr-x)         Uid: ( 1000/    user)  Gid: ( 1000/    user)
$ 
$ 
$ find test -perm 4000
$ find test -perm 2000
$

질문 : 진실은 무엇입니까? 모든 SUID / SGID 파일을 실제로 나열하려면 어떻게해야합니까?


음, 왜 이것이 "사실이 아닌가"? 당신은 한 R은 EAD T 그는 F를 riendly M의 오른쪽 교재를? 파일의 권한 비트는 정확히 모드 (8 진수 또는 기호)입니다.
0xC0000022L

** test **는 파일입니다. 디렉토리에서 검색을 찾으십시오. 따라서 test가있는 디렉토리에서 find를 사용해야합니다.
Nils

1
@ 닐 : 사실이 아닙니다. find(GNU는 정확하다고 생각합니다) 디렉토리와 파일을 동일하게 취합니다. 단순히 -perm스위치 의 요점을 놓친 것 입니다. 설명서를 읽으면 도움이 될 것입니다.
0xC0000022L

@ 0xC0000022L 흥미 롭습니다. CentOS 5의 linux-manpage는 디렉토리 만 가져갈 것이라고 말합니다. 파일에서 실행하는 데 많은 의미가 있습니까?
Nils

@ Nils : 아닙니다. 특별한 의미는 없습니다. 그러나 그것은 당신이 그 어리 석음을 막지 않을 것입니다. 어쨌든, 언뜻보기에 이것이 문제라고 생각했습니다. 아아, 그것은이 질문에 대한 것이 아닙니다. 파일에서 비트를 확인하여 파일이 find $FILE -perm /7777있는지 find또는 방지 하는지 확인할 수 있습니다.
0xC0000022L

답변:


14

당신이 테스트하려는 경우 모든 비트의 사용 /. 즉, 사용 사례 :

find "$DIRECTORY" -perm /4000

과:

find "$DIRECTORY" -perm /2000

또는 결합 :

find "$DIRECTORY" -perm /6000

GNU에 대한 인수로 폴더와 파일을 모두 사용할 수 있습니다 find.

읽기 쉬운 IMO 접근 방식 중 하나는 니모닉 바로 가기를 사용하는 것입니다. 즉 :

find "$DIRECTORY" -perm /u=s,g=s

주의 사항

변형이 find다양 하다는 것을 명심하십시오 . 또한 다르게 동작 할 수 있습니다. 항상 사용 설명서 (RTFM)를 읽으십시오.


8

다음 명령을 사용하면 SUID 권한이있는 모든 바이너리를 열거 할 수 있습니다. 도구 의 -perm -u=s플래그 find는 트릭을 수행합니다.

find / -perm -u=s -type f 2>/dev/null
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.