나는 파일/디렉토리의 소유자와 루트가 파일/디렉터리 권한을 변경할 수 있는 유일한 사용자라고 생각합니다. 내 말이 맞습니까? 아니면 권한을 변경할 수 있는 다른 사용자가 있습니까?
답변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:CAP_CHOWN
)는 마음대로 그룹을 변경할 수 있습니다.