파일/디렉토리의 권한은 누가 변경할 수 있나요?

파일/디렉토리의 권한은 누가 변경할 수 있나요?

나는 파일/디렉토리의 소유자와 루트 사용자만이 파일/디렉터리의 권한을 변경할 수 있는 유일한 사용자라고 생각합니다. 내 말이 맞습니까? 아니면 권한을 변경할 수 있는 다른 사용자가 있습니까?

답변1

소유자와 root(슈퍼유저)만이 파일이나 디렉토리의 권한을 변경할 수 있습니다. 이는 소유자와 슈퍼유저가 읽기( r), 쓰기( w), 실행( x) 권한을 설정할 수 있음을 의미합니다. 그러나 명령을 사용하여 파일 및 디렉터리의 사용자 소유권을 변경하는 chown것은 root. 사용자가 새 그룹의 구성원인 경우 파일 소유자와 그룹 소유권을 변경할 chgrp수 있습니다 .root

답변2

정상적인 작업을 위해서는 루트와 소유자만 가능합니다 chmod. 또한 루트는 chown및 을 수행할 수 있으며 소유자 는 대상 그룹의 구성원인 한 더 나아가 소유자도 chgrp수행할 수 있습니다 .chgrp

보안 목적을 위해 또 다른 경우가 있습니다. 파일이 포함된 디렉터리에 대한 쓰기 권한이 있는 사용자는 파일을 복사본으로 대체할 수 있으며 따라서 소유자가 되어 권한과 내용을 수정할 수 있는 능력을 얻게 됩니다.

다음과 같습니다:

14:14 mybox:~ mkdir mydir
14:14 mybox:~ cd mydir/
14:14 mybox:mydir echo foo | sudo tee yourfile
foo
14:14 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  3 me    staff  102 Apr 11 14:14 .
-rw-r--r--  1 root  staff    4 Apr 11 14:14 yourfile

디렉토리를 생성하고 루트로 파일을 작성했습니다. 루트가 파일을 소유하므로 파일에 쓸 수 없으며 chmod도 할 수 없습니다.

14:15 mybox:mydir echo bar > yourfile 
-bash: yourfile: Permission denied
14:15 mybox:mydir chmod a+x yourfile
chmod: Unable to change file mode on yourfile: Operation not permitted

그러나 디렉토리에 대한 쓰기 권한이 있으므로 파일을 교체하여 소유권을 얻을 수 있습니다.

14:15 mybox:mydir mv yourfile yourfile2
14:15 mybox:mydir cp yourfile2 yourfile
14:15 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  4 me   staff  136 Apr 11 14:15 .
-rw-r--r--  1 me   staff    4 Apr 11 14:15 yourfile

이제 우리는 소유자이므로 해당 파일로 원하는 작업을 수행할 수 있습니다.

14:15 mybox:mydir echo bar > yourfile 
14:15 mybox:mydir chmod a+x yourfile
14:16 mybox:mydir cat yourfile
bar

마찬가지로 쓰기 권한이 있는 모든 사용자는어느파일로 이어지는 전체 경로의 디렉터리는 해당 시점부터 디렉터리 구조를 대체할 수 있으므로 지정된 이름을 가진 파일의 소유권을 얻을 수 있습니다. 물론 실제 원본 파일("yourfile2"로 이름 변경)의 소유권이나 권한은 변경되지 않습니다.

14:17 mybox:mydir ls -l yourfile2
-rw-r--r--  1 root  staff  4 Apr 11 14:14 yourfile2

답변3

chmod명령은 동일한 이름의 시스템 호출을 상당히 직접적으로 호출합니다. 시스템 호출 에 대한 매뉴얼 페이지 chmod(2)(Linux 4.10)는 다음과 같이 말합니다:

호출 프로세스의 유효 UID는 파일 소유자와 일치해야 합니다. 그렇지 않으면 프로세스에 권한이 있어야 합니다(Linux: 해당 CAP_FOWNER기능이 있어야 함).

호출 프로세스에 권한이 없고(Linux: 해당 기능이 없음 CAP_FSETID) 파일 그룹이 프로세스의 유효 그룹 ID 또는 보조 그룹 ID 중 하나와 일치하지 않으면 비트가 S_ISGID꺼지지만 이는 오류가 반환되지 않습니다.

그렇습니다. 루트로 실행되는 프로세스는 CAP_FOWNER기능을 삭제하지 않은 경우 모든 파일의 권한을 변경할 수 있습니다.


또한 관심 사항은 다음과 같습니다 chown. 매뉴얼 페이지는 다음과 같이 chown(2)말합니다.

권한이 있는 프로세스(Linux: 해당 CAP_CHOWN기능이 있는 프로세스)만 파일 소유자를 변경할 수 있습니다. 파일 소유자는 파일 그룹을 해당 소유자가 구성원으로 속한 그룹으로 변경할 수 있습니다. 권한이 있는 프로세스(Linux: with CAP_CHOWN)는 그룹을 임의로 변경할 수 있습니다.

관련 정보