실제 업무 관련 질문입니다. 이전에는 사용자가 "su - userx"를 수행하고 user:owner 권한을 사용하여 userx:groupz 760 또는 540으로 스크립트를 실행하거나 userx:groupz 740 또는 640에 대한 파일을 수정할 수 있었습니다. 이제 사용자는 더 이상 userx로 su할 수 없으며 groupz의 구성원으로 작업을 수행해야 합니다. 그룹 권한을 변경해야 하는데 문제 파일을 먼저 찾아야 합니다. 실패할 때 찾을 수 있습니다. 아니면 제가 적극적으로 찾을 수 있도록 도와주실 수 있습니다. 소유자:그룹이 userx:groupz이고 그룹 권한이 소유자 권한보다 더 제한적인 파일이나 디렉터리는 문제를 일으킬 수 있으므로 "비즈니스 논리"의 맥락에서 보아야 합니다. 이러한 파일과 디렉터리를 모두 찾을 수 있는 방법이 있습니까? 이 질문에 대한 대답을 통해 과거에 작동했던 작업이 현재 실패할 때만 표면화될 수 있는 많은 근본적인 문제를 밝혀낼 수 있습니다.
답변1
GNU를 사용할 수 있는 경우 find
다음과 같이 사용할 수 있습니다.
find /somedir -user userx -group groupz \( -perm /u+w,g-w -o -perm /u+r,g-r -o -perm /u+x,g- \) -ls
답변2
세 가지 파일 액세스 권한 중 하나에 대해 사용자에게는 있지만 그룹에는 없는 필수 사용자 및 그룹에 속하는 파일을 찾습니다.
find / -user userx -group groupz \( -perm -u+r ! -perm -g+r -o \
-perm -g+w ! -perm -g+w -o \
-perm -g+x ! -perm -g+x \) -print
이는 많은 UNIX 변형에서 권한과 소유권이 중요하지 않은 기호 링크를 포함하여 모든 파일 유형을 반환할 수 있습니다. 심볼릭 링크를 제외하려면 ! -type l
.
파일에 대해 작업하려면 를 사용하십시오 -exec
.
그룹 권한을 사용자 권한과 일치시키려는 경우 chmod g=u
자유롭게 실행할 수 있습니다.
find / -user userx -group groupz ! -type l -exec chmod g=u {} +
답변3
이것이 제가 테스트한 최종 솔루션이며 작동합니다. 마운트된 원격 파일 시스템을 검색하지 않으려면 -mount가 필요하고 필요한 심볼릭 링크를 따르지 마십시오! -따르다. 출력에 권한이 표시되어 기준에 맞는지 쉽게 확인할 수 있기를 원하므로 -ls를 사용합니다. 놀랍게도 "논쟁의 순서"는 매우 중요합니다. 이 명령은 작동하는 결과를 찾을 때까지 일부 잘못된 결과를 반환합니다.
-user userx -group groupz -mount \ ( ( -perm -u=r -a ! -perm -g=r ) -o \ ( -perm -u=w -a ! -perm -g=w ) -o 찾기 \ (-perm -u=x -a !-perm -g=x ) \) -ls !