파일 / 디렉토리의 소유자와 루트 사용자가 파일 / 디렉토리의 권한을 변경할 수있는 유일한 사용자라고 생각합니다. 권한을 변경하도록 허용 된 다른 사용자가 있습니까?
파일 / 디렉토리의 소유자와 루트 사용자가 파일 / 디렉토리의 권한을 변경할 수있는 유일한 사용자라고 생각합니다. 권한을 변경하도록 허용 된 다른 사용자가 있습니까?
답변:
정상적인 작동을 위해서는 루트와 소유자 만 가능 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
디렉토리를 작성하고 파일을 루트로 작성했습니다. root는 파일을 소유하고 있기 때문에 파일에 쓸 수 없으며 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
getfacl / setfacl
은 "클래식"스타일 파일 권한보다 더 많은 유연성을 제공 하는 파일 레벨 액세스 제어 목록을 지원합니다 . * nix에서 파일 삭제는 디렉토리에서 파일에 대한 링크를 제거하여 작동하므로 파일 제거는 항상 디렉토리 권한에 의해 제어됩니다. 파일 권한 자체는 아무런 역할을하지 않습니다.
이 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
)는 그룹을 임의로 변경할 수 있습니다.