모든 SUID / SGID 파일을 검색하는 방법은 무엇입니까? / -perm -2000 -print 그러나 그것은 사실이

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

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 파일을 실제로 나열하려면 어떻게해야합니까?



답변

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

find "$DIRECTORY" -perm /4000

과:

find "$DIRECTORY" -perm /2000

또는 결합 :

find "$DIRECTORY" -perm /6000

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

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

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

주의 사항

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


답변

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

find / -perm -u=s -type f 2>/dev/null