USER와 HOME은 권한을 증명하지 않습니다
id
id -u
id -ru
getent passwd "$(id -u)"id -u는 유효 UID, id -ru는 실제 UID를 확인합니다. USER와 HOME은 환경 변수이므로 값이 현재 자격 정보와 다르거나 사용자가 바꾼 값일 수 있습니다. getent는 설정된 계정 정보 조회 경로를 사용합니다. 계정 정보가 반드시 /etc/passwd에만 있는 것은 아닙니다.
chfn은 계정의 설명 필드 변경에 쓰입니다. 사용자명·UID·파일 소유권을 한꺼번에 바꾸는 명령이 아닙니다. finger의 표시도 실제 파일 접근 검사의 대체 수단이 아닙니다.
파일까지 도달하는 디렉터리도 검사합니다
namei -l ./data/report.txt
ls -ld ./data
ls -l ./data/report.txt
getfacl ./data/report.txt
findmnt -T ./data/report.txt파일을 읽으려면 경로 중간의 디렉터리를 탐색할 수 있어야 합니다. 디렉터리의 x는 탐색, r은 이름 목록 읽기, w는 항목 생성·삭제와 관련됩니다. 파일의 내용 쓰기 권한과 파일 이름을 삭제할 권한은 다른 대상에서 검사합니다. ACL, 읽기 전용 마운트, 보안 모듈의 정책도 결과를 바꿀 수 있습니다.
- 실행 자격실제/유효 UID와 그룹을 확인합니다.
- 경로와 대상상위 디렉터리, 파일 권한과 ACL을 확인합니다.
- 추가 제약마운트 옵션·파일 속성·보안 정책을 확인합니다.
각 상자는 다음 확인 단계입니다. 앞 단계가 정상이라고 뒤 단계의 검사를 생략하지 않습니다.
access 성공 뒤의 open도 실패할 수 있습니다
access는 기본적으로 실제 UID/GID를 사용해 접근 가능성을 검사합니다. 실제 open의 자격 판단과 같다고 가정할 수 없고, 검사 뒤에 경로나 파일이 바뀔 수도 있습니다. 작업이 목적이라면 open 자체의 성공과 errno를 처리해야 합니다. 접근 검사를 보안상의 확정 판정으로 저장해 두지 않습니다.
공유 임시 디렉터리 /tmp는 보통 1777입니다. sticky bit가 있으면 삭제·이름 변경에 파일 소유자, 디렉터리 소유자, 특권 등의 추가 조건이 적용됩니다. 777과 같은 뜻도, 어떤 경우에도 파일 생성자만 삭제할 수 있다는 뜻도 아닙니다.
chattr은 chmod와 다른 속성을 다룹니다
lsattr ./data/report.txtchattr의 +는 속성 추가, -는 제거, =는 지정한 속성으로 설정입니다. 지원하는 속성은 파일시스템마다 다릅니다. s를 보안 삭제 보장이라고 설명해서는 안 되며 S의 동기식 갱신과도 구분합니다. immutable 속성 역시 모든 관리자 권한을 무력화하는 장치는 아닙니다.
특정 파일의 소유권 오류를 고치려고 홈 전체를 재귀적으로 777로 바꾸지 않습니다. 실패한 경로와 필요한 사용자·그룹부터 정해야 권한을 과도하게 넓히지 않고 원인을 해결할 수 있습니다.