폴더에 대한 액세스 권한이 있는 사용자 목록과 해당 사용자가 가진 권한 목록을 어떻게 얻을 수 있습니까?
나는 "ls", "namei" 또는 "getfacl"과 같은 가장 일반적인 것을 시도했습니다.
답변1
때를
ls -ld */
현재 경로에 있는 디렉터리 목록(-d)을 가져옵니다(-l). 소유자, 그룹 및 기타 사용자의 액세스 권한을 볼 수 있습니다.
액세스 권한에 대한 자세한 내용은 다음을 참조하세요.
이 링크
출력을 확인해보면엘에스명령 파일이나 디렉터리의 소유자와 그 옆에 있는 파일이나 디렉터리의 그룹 소유자를 볼 수 있습니다. 예를 들어 그룹 이름이 "물류 센터" 다음 명령을 사용하여 이 그룹의 구성원을 볼 수 있습니다.
grep 'logistics' /etc/group
답변2
이 작업을 완전히 보편적으로 수행할 수 있는 방법은 없습니다. 예를 들어 네트워크 파일 시스템(예: NFS 또는 Samba)을 통해 파일을 내보내는 경우 인증된 클라이언트의 계정을 알아야 합니다. 파일이 웹이나 FTP 서버를 통해 표시되면 전 세계가 해당 파일에 액세스할 수 있습니다.
다른 머신(실제 또는 가상)이 관련되어 있지 않더라도 파일을 다른 디렉토리에 하드 링크할 수 있습니다. 디렉터리 트리는 다음과 같은 이유로 다른 곳에서 액세스할 수 있습니다.바인드 마운트. 파일은 일부 사용자가 직접 액세스할 수 있는 디스크 이미지에 있을 수도 있습니다. 등.
명목상의 경우, 파일은 경로를 통해서만 접근할 수 있고, 루트에서 파일까지 전체 디렉터리 트리를 순회할 수 있는 프로세스를 통해서만 파일에 접근할 수 있습니다. 또는 현재 디렉터리에서 파일로(이것은 일반적이지 않지만 디렉터리 권한을 변경하거나 chdir 작업 후 프로세스의 권한을 낮추어 chdir을 수행할 수 없는 현재 디렉터리를 프로세스에 포함하도록 배열할 수 있습니다). 우리는 명목상 사례에서 벗어나고 있습니다. 따라서 명목상의 경우 파일에 대해 필요한 권한이 있는 사용자를 가져오고 루트에서 파일까지 체인의 모든 디렉터리에 대해 x 권한이 없는 사용자를 제거합니다. 예를 들어, 쓰기를 수행하려면 /one/two/three
사용자에게 x 권한 과 /
쓰기 권한이 있어야 합니다 ./one
/one/two
/one/two/three
파일에 대해 누가 어떤 권한을 가지고 있는지 확인하기 위해 대부분의 Unix 변형에서는 다음과 같은 유틸리티를 제공합니다.getfacl
. 이 명령은 Linux에서 사용할 수 있지만 항상 기본 설치의 일부는 아닙니다. 여기에는 사용자 및 그룹의 권한이 나열됩니다. 사용자가 명시적으로 나열되어 있으면 파일에 대한 사용자의 권한은 사용자 목록에 의해 결정됩니다. 명시적으로 나열되지 않으면 사용자는 사용자가 구성원인 모든 그룹에서 부여한 모든 권한을 가집니다. , 사용자가 나열된 그룹에 속하지 않는 경우 사용자는 "기타" 권한 집합을 갖게 됩니다.
사용자의 프로세스에는 네트워크 데이터베이스와 같은 항목에 의해 부여된 정확한 그룹 집합이 항상 있는 것은 아니지만 /etc/group
다시 한 번 극단적인 경우의 영역으로 들어가고 있습니다. 극단적인 경우가 아닌 한 가지는 SELinux 및 AppArmor와 같은 보안 프레임워크가 더 많은 제한 사항을 추가할 수 있다는 것입니다. 다음 출력을 보면 이러한 제한 사항이 적용되는지 알 수 있습니다 ls -ld /path/to/file
. 권한 뒤에 구두점이 있으면 권한이 전체 내용( +
ACL 항목 표시, .
표시할 수 있는 SELinux 컨텍스트 표시 ls -Z
, 등.).
나는 이 모든 정보를 수집할 수 있는 도구를 모릅니다.
답변3
ls
-d
디렉토리 옵션 과 함께 사용됩니다:
ls -ld yourDirectory