파일 / 디렉토리의 권한을 누가 변경할 수 있습니까?


14

파일 / 디렉토리의 소유자와 루트 사용자가 파일 / 디렉토리의 권한을 변경할 수있는 유일한 사용자라고 생각합니다. 권한을 변경하도록 허용 된 다른 사용자가 있습니까?

답변:


19

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


19
사용자가 새 그룹의 구성원 인 경우 파일 소유자가 해당 파일의 그룹 소유권을 변경할 수 있습니다.
Kusalananda

7

정상적인 작동을 위해서는 루트와 소유자 만 가능 chmod합니다. 또한, 루트 수 chownchgrp, 또한 소유자 수 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

Linux 배포가 Windows와 같은 추가 보안 기능을 지원하는지 알고 있습니까? Windows에있는 경우 디렉토리가 허용되는 경우에도 삭제를 방지하기 위해 파일의 삭제 권한을 거부 할 수 있습니다.
Kevin Li

현재 (많은) 현재 많은 Linux 버전 getfacl / setfacl은 "클래식"스타일 파일 권한보다 더 많은 유연성을 제공 하는 파일 레벨 액세스 제어 목록을 지원합니다 . * nix에서 파일 삭제는 디렉토리에서 파일에 대한 링크를 제거하여 작동하므로 파일 제거는 항상 디렉토리 권한에 의해 제어됩니다. 파일 권한 자체는 아무런 역할을하지 않습니다.
Bass

"모든 것이 파일입니다"라는 유닉스 철학에 매우 맞습니다. 그래서 당신은 리눅스에서 그런 일을 할 수 없다고 말하고 있습니까?
Kevin Li

3
@KevinLi이 답변은 실제로 완전하지 않습니다. 디렉토리에 고정 비트 를 설정하여 비 소유자가 파일을 삭제하거나 이름을 바꾸는 기능을 제한 할 수 있습니다. 이 질문과 그 답변을 참조하십시오 : unix.stackexchange.com/questions/79395/… ACL이나 다른 체계를 사용할 필요가 없습니다.
Andrew Henle

@KevinLi * nix 파일 시스템은 Windows 시스템과 매우 다릅니다. 파일은 디렉토리 계층 구조와 별도로 존재하며 디렉토리에서 해당 파일을 가리키는 여러 개의 "하드 링크"를 가질 수 있습니다. 파일을 삭제한다는 것은 실제로 디렉토리에서 수행되는 하드 링크를 제거하는 것을 의미합니다. 파일은 하드 링크를 가리키는 링크 수를 추적하며, 하드 링크를 가리키는 하나 이상의 하드 링크가있는 한 실제 파일은 디스크에 남아 있습니다. 따라서, 삭제는 디렉토리 권한에 의해 제어 유일한 파일 소유자 및 루트 삭제를 할 수 있도록 앤드류 말한대로, 특별한 옵션이 있습니다.
Bass

1

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)는 그룹을 임의로 변경할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.