chmod는 언제 실패합니까?

chmod는 언제 실패합니까?

어떤 상황에서 실패할까요 chmod?

매뉴얼 페이지를 보았지만 사용법만 지정하고 어떤 상황에서 작동하지 않는지는 자세히 설명하지 않습니다.

chmod다음과 같은 경우에는 효과가 있다고 생각합니다 .

  • 당신은 루트입니다
  • 대상 파일이 있습니다(그리고 일반 모드 비트가 설정되고 있습니다. 즉, 고정 비트가 아닌 다른 것).

사용자가 chmod그룹 액세스 권한이 있는 파일에 대한 권한을 변경할 수 있습니까? 읽기/쓰기 액세스와 관련이 있습니까?

답변1

파일 소유자 또는 루트 사용자만 파일 권한을 변경할 수 있습니다. 파일이나 해당 상위 디렉터리의 현재 권한은 관련이 없습니다. 이는 다음에서 지정됩니다.POSIX:

애플리케이션은 프로세스의 유효 사용자 ID가 파일 소유자와 일치하는지 또는 프로세스에 이 작업을 수행할 수 있는 적절한 권한이 있는지 확인해야 합니다.

대부분의 unice에서 "적절한 권한"은 루트로 실행하는 것을 의미합니다. 이러한 조건이 충족되지 않으면 chmod일반적으로 실패하고 표시되지만 EPERM다른 작업(예: 보안 위반으로 인한 프로그램 중단)은 허용됩니다.

또한 일부 Unix 변형에는 시스템별 인증 또는 허용하지 않는 방법이 있습니다 chmod. 예를 들어, Linux에는능력( CAP_FOWNER)를 사용하면 프로세스가 소유자에 관계없이 파일의 권한 및 기타 메타데이터를 변경할 수 있습니다.

chmod파일이 존재하고 액세스 가능하며 적절한 소유자가 있더라도 다른 이유로 인해 실패할 수 있습니다. 일반적인 파일 시스템으로는 읽기 전용 파일 시스템이나 FAT와 같은 권한을 지원하지 않는 파일 시스템이 있습니다. 덜 일반적인 제한 사항에는 다음과 같은 시스템별 제한 사항이 포함됩니다.불변 속성Linux의 ext2 파일 시스템 및 후속 제품.

1 실행 중인 프로세스는 파일에 액세스할 수 있어야 한다는 점을 제외하면 파일이 포함된 디렉터리와 이를 위해 통과하는 다른 디렉터리에 대한 실행 권한이 있어야 합니다.chmod

답변2

필요한 세부 정보는 chmod() 시스템 호출에 대한 매뉴얼 페이지에 있습니다. man chmod.and를 man 2 chmod사용 man chattr하는 대신 man 2 setxattrchattr/setxattr()은 chmod에 의해 설정된 기존 Unix 권한의 동작을 향상시키는 파일 속성을 설정합니다.

답변3

사용자가 chmod를 사용하여 그룹 액세스 권한이 있는 파일에 대한 권한을 변경할 수 있습니까?

시험해 보고 확인해 보는 것이 어떨까요?

$ touch foo
$ sudo install -o root -g $(id -gn) -m660 foo bar
$ ls -la bar
-rw-rw----  1 root  staff  0 Oct 21 21:33 bar
$ chmod g-w bar
chmod: bar: Operation not permitted
$ chmod g+x bar
chmod: bar: Operation not permitted

답변4

UNIX 표준에 따르면 "프로세스의 유효 사용자 ID는 파일 소유자와 일치해야 합니다. 그렇지 않으면 프로세스에 이 작업을 수행할 수 있는 적절한 권한이 있어야 합니다."

적절한 권한에 대한 부분은 설명이 필요합니다. 기존 시스템에서는 프로세스의 유효 UID(Linux에서는 파일 시스템 UID, 아래 참조)가 0[즉, 루트]인 경우 모든 파일에 대해 chmod가 허용됩니다.

Linux에는 다음과 같은 시스템이 있습니다.능력, 이 비트는 CAP_FOWNER모든 파일에서 사용되는 기능을 제어합니다. chmod기본적으로 execve()루트 프로세스를 생성하기 위한 호출이 이루어지거나(setuid 바이너리를 실행하거나 실제 UID가 0인 경우) 유효 UID가 0으로 설정된 경우(및 비-로 설정된 경우 제거됨) 모든 기능이 부여됩니다. 0 값) 및 CAP_FOWNER파일 시스템 UID가 0으로 설정되면 활성화되고 0이 아닌 값으로 설정되면 비활성화되는 기능 세트입니다 . 자세한 내용은 맨페이지를 읽어보세요.

고정 비트에 대해 언급했지만 사용자가 파일에 할당된 그룹에 속하지 않은 경우 파일에 setgid 비트를 설정할 수 없다는 사실을 무시했습니다. 구현에 따라 정의된 다른 경우에는 setuid 또는 setgid 비트도 무시될 수 있습니다.

관련 정보