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

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

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

답변1

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

답변2

정상적인 작업의 경우 루트와 소유자만 가능합니다 chmod. 또한 루트 캔 chown과 소유자는 소유자가 대상 그룹의 구성원인 한 가능합니다.chgrpchgrp

보안상의 이유로 또 다른 시나리오가 있습니다. 파일이 포함된 디렉터리에 대한 쓰기 액세스 권한이 있는 모든 사용자는 파일을 복사본으로 대체하여 소유자가 되어 권한과 콘텐츠를 수정할 수 있는 능력을 얻을 수 있습니다.

이와 같이:

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: CAP_CHOWN)는 마음대로 그룹을 변경할 수 있습니다.

관련 정보