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