루트로 실행 중인 프로세스가 있고 www-data로 하위 프로세스를 생성한 다음 루트가 소유한 디렉터리와 www-data가 소유한 하위 폴더에 액세스하면 권한 오류가 발생합니다.심볼릭 링크www-data 그룹의 사용자가 소유한 디렉토리와 그 디렉토리... 아이디어를 얻으실 수 있습니다.
이 엄청나게 복잡한 체인에서 어디서 실패하는지 어떻게 알 수 있습니까? 내가 얻는 전부는허가가 거부되었습니다
이 특정 사례의 세부 사항에 얽매이지 않고 Unix에서 이와 같은 문제 디버깅을 어떻게 시작합니까?
나는 단지 말하고 싶다
debug_permissions.sh www-data /my/long/symlink/chain
나는 그것이 심볼릭 링크 체인을 통과하여 끝점이 어디에 있는지 알려주기를 원합니다(www-data에는 권한이 없습니다).
나도 하나 있는 걸 알아도구
namei -l /path/
하지만 다른 사용자로 실행할 수 없기 때문에(또는 적어도 방법을 모르기 때문에) 그다지 도움이 되지 않습니다.
내가 달리면 sudo su www-data
, 나는 얻는다.이 계정은 현재 사용할 수 없습니다.
나는 www-data가 "되고" cd
디렉토리를 돌아다니며 내가 볼 수 없는 것들을 볼 수 있기를 원합니다. 하지만 그렇다고 해서 그렇게 할 수는 없고 단지 그렇게 하기 위해 새 사용자를 만들고 싶지도 않습니다.
답변1
아하, 방법은 다음과 같습니다.
sudo -H -u www-data namei /my/long/symlink/chain
www-data
디버깅하려는 사용자는 어디에 있나요?
답변2
일반적으로 파일 시스템 권한 문제를 디버깅하기 위한 몇 가지 전략이 있습니다.
예시 사용자가 userWhoShouldHaveAccess
디렉토리의 내용을 나열할 수 있어야 한다고 가정하고 /dir/with/access/issues
, 터미널에서 이것을 실행하여 시도한 것이 작동하는지 확인하겠습니다.
watch sudo -u userWhoShouldHaveAccess ls /dir/with/access/issues
루트 디렉터리에서 사용자가 액세스할 수 있는 디렉터리까지의 권한에 중점을 두겠습니다.
cd / && watch namei -l /dir/with/access/issues
디렉토리의 파일을 나열하려면 사용자가 전체 경로를 통과해야 한다는 점을 명심해야 합니다. /dir/with/access/issues
이는 사용자가 대상 디렉토리에서 실행 권한을 가지고 있어야 함을 의미합니다.및 모든 상위 디렉토리.
사용자에 대한 그룹 변경은 로그아웃했다가 다시 로그인한 후에만 적용된다는 점을 명심하겠습니다.해결책그런 이유로.
사용자 ID와 사용자가 속한 그룹을 표시할 수 있습니다 id userWhoShouldHaveAccess
.
아직 있기 때문에액세스 제어 목록액세스에 대한 소유자/그룹/기타 권한을 결정하는 것 외에도 권한도 확인합니다.
getfacl /dir/with/access/issues
사용자가 글을 쓸 수 있어야 한다면 백그라운드에서 실행하여 작성 방법을 배울 수 있습니다.
while true; do sudo -u userWhoShouldHaveAccess bash -c '(echo "Test at $(date) by $(whoami)" >> /dir/with/access/issues/test_file);sleep 1';done
여기Linux의 파일 권한에 대한 몇 가지 기본 사항은 다음과 같습니다.