그래서 최근에 찾기 힘든 권한 문제가 발생했습니다. 권한이 부여되지 않는 이유를 알아내는 도구나 방법이 있습니까? 나는 이것이 어떻게 작동하는지 상상해 본다:
sudo why <user> <command to test>
sudo why voidcrawler touch foo
voidcrawler is not the owner or part of groups: root, other_user
그런 것이 존재하나요?
답변1
여기에는 두 부분이 있으며, 제가 아는 한 두 가지를 동시에 수행할 수 있는 도구는 없습니다.
- 권한 거부 오류가 발생하면 명령은 무엇을 합니까?
- 권한 거부 오류가 발생하는 이유는 무엇입니까?
명령은 무엇을 하고 있나요?
일반적으로 이와 같은 명령을 사용하면 매우 분명 rm
하지만 다른 명령의 출력은 매우 좋지 않으며 실제로 권한 거부 오류와 관련된 내용을 알려주지 않습니다.
주문하다스트레스이에 매우 유용합니다. 발행된 모든 시스템 호출과 프로세스에서 수신한 신호를 나열합니다. 이 정보 중 일부를 사람이 읽을 수 있는 출력으로 디코딩할 수 있습니다.
기본적으로 모든 것을 stderr에 기록하지만 스위치를 사용하여 파일에 기록하도록 구성할 수 있습니다 -o
.
간단한 예를 들어보세요. 간단한 실패 사례를 설정할 수 있습니다 rm
.
$ sudo mkdir foo
$ sudo touch foo/bar
$ rm -rf foo
rm: cannot remove 'foo/bar': Permission denied
여기서 strace가 어떻게 도움이 되는지 보여주기 위해 동일한 rm
명령을 실행합니다.
$ strace -o trace_file rm -rf foo
$ grep EACCES trace_file
unlinkat(4, "bar", 0) = -1 EACCES (Permission denied)
그래서 이것은 호출을 보여줍니다풀리다bar
열려 있는 디렉터리에서 파일을 삭제할 수 없습니다.
이런 일이 일어날 것이라는 것을 알았음에도 불구하고 우리는 그것이 실패하도록 내버려두었습니다. 이는 출력이 좋지 않은 더 복잡한 명령을 진단하는 데 유용합니다.
권한 거부 오류가 발생하는 이유를 확인할 수 있는 도구는 없지만 그 이유는 상대적으로 적습니다.
파일 권한이 가장 일반적입니다. 시간이것들은 잘 문서화되어 있습니다따라서 여기에 나열할 가치가 없습니다.
정기적으로 사람들을 발견할 수 있는 다른 두 가지 소스는 다음과 같습니다.
답변2
명령이 수행할 작업을 알아야 하기 때문에 명령을 기반으로 확인하는 데는 별 의미가 없습니다.
- 새 파일이나 디렉터리 만들기
- 기존 파일 읽기
- 기존 파일에 쓰기
- 기존 파일 실행
- 기존 파일이나 디렉터리 삭제 또는 이름 바꾸기
- 디렉토리로 변경
권한은 어떤 프로그램이 이러한 작업을 시도하는지 상관하지 않습니다. 동일한 명령이라도 인수나 환경에 따라 다른 작업을 수행할 수 있습니다.