마이크로 소프트는 Interix 유닉스 서브 시스템 (은퇴) 는 NT 커널을위한 몇 가지 다른 사람보다 사용자 및 그룹 권한을 조금 다르게 처리 :
사용자 및 그룹 정보는 Security Access 데이터베이스에 저장 됩니다 . 사용자와 그룹은 모두 동일한 데이터베이스에 저장되지만 그룹 및 사용자 이름은 고유해야합니다. 어떤 그룹도 사용자 이름을 가질 수 없으며 그 반대도 마찬가지입니다. 이 데이터베이스는 UNIX 에서 /etc/passwd
및 /etc/groups
파일을 대체합니다 . 사용자 및 그룹은 적절한 Windows 방법 (사용자 관리자, Active Directory 사용자 및 컴퓨터 또는 로컬 사용자 및 그룹)을 사용 하거나 Win32 net user
명령을 사용하여 생성 됩니다. (사용자를 생성하고 제거하기위한 쉘 스크립트의 예는 디렉토리에 포함되어/usr/examples/admin
있습니다 .) 사용자는 여러 그룹에 속할 수 있습니다.
좀 더 구체적인 수동 발췌문 은 다음과 같습니다 .
Windows에서 사용자 또는 그룹은 오브젝트를 소유 할 수 있습니다. 이것은 사용자 만 객체를 소유하는 UNIX와 다릅니다.
Windows는 SID ( Security Identifier)를 사용하여 모든 사용자와 그룹을 내부적으로 식별 합니다. 해싱 알고리즘은 고유 한 SID 값을 생성합니다. 두 명의 사용자 또는 그룹은 동일한 SID를 갖지 않습니다.
개체에 대한 액세스 권한이있는 사용자 및 그룹은 해당 SID로 식별됩니다. Windows로 보안 할 수있는 모든 개체에는 DACL (임의 액세스 제어 목록)이 있으며 ACE (액세스 제어 항목)라는 별도의 항목으로 구성됩니다. ACE에는 두 가지 중요한 정보, 즉 사용자 또는 그룹 SID와 개별 사용자 또는 그룹이 개체에 얼마나 많이 액세스하는지에 대한 설명이 포함됩니다.
CHGRP
... 파일의 그룹 ID를 변경하십시오 ... chgrp (1)을 호출하는 사용자는 지정된 그룹에 속하고 파일의 소유자이거나 적절한 권한이 있어야합니다.
추신
... 소유자와 피연산자는 모두 선택 사항입니다. 그러나 하나를 지정해야합니다. 그룹 피연산자가 지정되면 앞에 콜론 (:)이 와야합니다.
소유자는 숫자 사용자 ID 또는 사용자 이름으로 지정할 수 있습니다. 사용자 이름이 숫자 사용자 ID 인 경우 피연산자가 사용자 이름으로 사용됩니다. 그룹은 숫자 그룹 ID 또는 그룹 이름 일 수 있습니다. 그룹 이름이 숫자 그룹 ID 인 경우 피연산자가 그룹 이름으로 사용됩니다.
보안상의 이유로 파일의 소유권은 적절한 권한이있는 프로세스에 의해서만 변경 될 수 있습니다.
내가 읽었을 때 사용자 계정이 해당 그룹이 소유 한 파일의 권한을 수정할 수있는 충분한 권한을 가진 Windows 그룹에 속하는 경우 chgrp
사용자 계정이 제어 할 수없는 외부에서 해당 파일 을 효과적으로 작성할 수 있습니다. 이것은 당신이 가지고 chown
있고 명시 적 user:group
매개 변수 보다 제어가 적습니다 . 선언의 가능성이없는 그 맥락에서 user:
와 :group
는 달리 같은 결과를 얻을 수 없었다 않았다.
다음은 Interix가 Windows ACL과 상호 작용하는 방법에 대한 자세한 내용 의 링크입니다. 이러한 지식이 다른 Unix 변형의 Samba 파일 시스템에 어떻게 적용되는지에 중점을 둡니다.
다음은 튜너 블 을 설명 하는 현재 사용되지 않는 Solaris 문서에 대한 링크rstchown
입니다.
chown(2)
시스템 호출에 대한 POSIX 시맨틱이 적용되는지 여부를 나타냅니다 .
분명히 매개 변수가 0
... 의 값으로 설정된 경우
POSIX 시맨틱을 끄면 다양한 보안 취약점이 생길 수 있습니다. 또한 사용자가 파일의 소유권을 다른 사용자에게 변경 하고 사용자 또는 시스템 관리자의 개입없이 파일을 다시 검색 할 수없는 가능성을 엽니 다 .
이러한 옵션은 Solaris의 POSIX 적합성을 무효화하지 않습니다 . 단지 옵션이라는 것만으로도이를 준수 하는 것으로 간주합니다 .
POSIX.1-2008을 준수하는 모든 구현이 아래 설명 된 모든 기능을 지원하지만
이러한 기능 중 일부 또는 전부를 제거하거나 수정할 수있는 시스템 종속 또는 파일 시스템 종속 구성 절차가있을 수 있습니다. 엄격한 준수가 필요한 경우 이러한 구성을 수행하지 않아야합니다.
다음의 기호 상수는 -1 이외의 값으로 정의해야합니다. 상수 값은 0으로 정의되는 경우, 어플리케이션을 사용한다 sysconf()
, pathconf()
또는 fpathconf()
기능, 또는
getconf
시간이나 문제의 특정 경로에 대한 시스템에 존재하는 기능을 결정하기 위해, 유틸리티.
_POSIX_CHOWN_RESTRICTED
사용은 chown()
적절한 권한이있는 프로세스로 제한되며 파일의 그룹 ID를 프로세스의 유효 그룹 ID 또는 보조 그룹 ID 중 하나로 만 변경합니다.
chown()
시스템 기능 - 모두에 의해 문서화 된 시스템 호출입니다 chown
및 chgrp
쉘 유틸리티 -됩니다 실패 지정된 수많은 이유. 그들 중 :
EACCES
경로 접두사의 구성 요소에 대한 검색 권한이 거부되었습니다.
ELOOP
경로 인수를 분석하는 동안 발생하는 기호 링크에 루프가 있습니다.
EPERM
유효 사용자 ID가 파일의 소유자와 일치하지 않거나 호출 프로세스에 적절한 권한이 없으며 _POSIX_CHOWN_RESTRICTED 는 해당 권한이 필요함을 나타냅니다.
그러나 루트가 아닌 사용자에게 권한 수정 권한을 부여하는 동작은 Solaris에서만 고유 한 적이 없습니다. 이 매우 우수 - 약간 일 경우 -에서 유닉스 파일 권한의 범위 이 포럼 게시물이 있는 저자 상태 :
원래 Unix에서는 파일 소유자가 파일을 제공 할 수있었습니다. 파일 소유자가 소유자를 다른 사람으로 변경할 수 있습니다. 이 작업을 취소 할 루트가 아닌 사용자에 대한 방법이 없었다 ... BSD는 [이후] 제거 chown
루트가 아닌 사용자로부터 ... [때문에 부분적] 는 디스크 할당량을 구현 제한 할 수있는 디스크 공간 파일 시스템에 사용자가있을 수 있습니다 ... 나쁜 사용자는 할당량을 초과하여 큰 파일을 제공 할 수 있습니다.
오늘날에는 루트가 아닌 chown
파일이 파일 인지 판단하기가 쉽지 않습니다 . 많은 버전의 유닉스는 두 가지 행동을 모두 허용 합니다 ...
또 다른 좋은 메일 링리스트 게시물 은 이것을 인용하고 계속합니다.
대부분의 OS에서 기본값은 chown
루트로만 제한됩니다. 그리고 보안 고려를 위해이 방식을 유지해야한다는 합의가 있습니다. 루트가 아닌 사용자가 파일의 소유자를 변경하고 실행 비트가 켜져 있으면 SUID
및 SGID
비트를 지워야합니다. 이 발생하거나 발생하지 않을 수 있습니다 root
.
나는 마지막 문단이 멋지게 말합니다.
이 기사는 CAP_CHOWN
Linux에서 해당 기능을 제어하는 것에 대한 참조도 제공 합니다 ( POSIX_CHOWN_RESTRICTED
동작 에만 영향을 미침 ) . 또한 CAP_FOWNER
기능에는 약간의 차이가 있습니다.
그리고 2003 년에 지적한 대로 :
최소한 HPUX에서는 권한이없는 사용자라도 파일 소유자를 변경할 수 있습니다 ( root
예 : 등) .
... 구성 setprivgroup
매개 변수 에 따라 다릅니다 .
루트가 아닌 사용자가 파일 권한을 조작 할 수있는 경우, 귀하의 질문에 인용 된 이론적 근거 에서 언급 한 바와 같이 , chown
사용자는 다른 사용자가 소유하도록 해당 사용자가 소유 한 파일을 사용자가 가질 수 있습니다 . 파일의 그룹 소유권과 chown
ing 사용자의 그룹이 정렬되지 않으면 사용자는 더 이상 해당 파일을 수정할 수 없습니다.
이 시나리오에서는 chown
다음 chgrp
반면에, 더 이상 파일의 권한을 변경할 수있는 권한이 없을 것이다 사용자로 실패 chown user:group
너무 오래 같이 - 그룹 중 하나입니다 사용자 자신이 - 성공하는 것입니다.
있습니다 아마도 디렉토리 포함 할 수 있습니다 유사하게 발생할 수있는 수많은 다른 틈새 시장 상황, 끈적 및 / 또는 setgid를 비트 파일 시스템 및 / 또는 구현 고유의 액세스 제어 목록. 예를 들어이 스레드 는 재미 있습니다. 셀 수없이 많은 순열이 내 자신의 미약 한 이해를 훨씬 뛰어 넘기 때문에이 답변에 위키가 있습니다. 당신이이 글을 읽고 있다면, 당신은 가치 개선 믿고, 당신은 당신이 방법을 알고 생각 - 해 주시기 바랍니다 .
관련하여 유사한 실패에 영향을 수있는 파일 권한, 트리 탐색 및 심볼릭 링크의 다양한 미칠 수있는 영향에 대한 광범위한 문서도있다 -R
ecursive chown
여기 응용 프로그램 :
에서 POSIX XRAT의 섹션 머리글 세 번째 와 네 번째 도메인 :
일반적으로 파일 계층 구조 순회 옵션을 지정하는 사용자는 단일 물리적 계층 구조에서 작동하기를 원하므로 계층 외부의 파일을 참조 할 수있는 기호 링크는 무시됩니다. 예를 들어 chown owner 파일은 -R 옵션이 지정된 동일한 명령과 다른 작업입니다. 이 예에서는 명령 동작에 chown
owner
file
대해 설명하고 명령 chown -R
소유자 파일 의 동작은 세 번째 및 네 번째 도메인에 설명합니다.
... 논리적 걷기를 기본값으로하는 보안 문제가 있습니다. 과거에는 chown -R
파일 의 소유권이 변경 될 때 setuid 및 setgid 비트가 손실 되었기 때문에 명령 사용자 파일이 수퍼 유저에게 안전했습니다 . 워크가 논리적 인 경우 사용자가 트리의 파일을 가리키는 심볼릭 링크를 삽입했을 수 있으므로 소유권 변경이 더 이상 안전하지 않습니다. 다시 말하지만, 심볼릭 링크를 통해 간접적이지 않기 위해 계층 구조 통과 명령에 옵션을 추가해야하며 재귀 보행을 수행하는 기록 스크립트는 즉시 보안 문제가됩니다. 이것은 대부분 시스템 관리자에게 문제가되지만 다른 클래스의 사용자에 대해 다른 기본값을 사용하지 않는 것이 좋습니다.
...
4.3 BSD chgrp
에서 트리 순회 중 대상이 아닌 기호 링크 그룹이 변경되었습니다. 4.4 BSD의 심볼릭 링크에는 소유자, 그룹, 모드 또는 기타 표준 UNIX 시스템 파일 속성이 없습니다.
그리고 POSIX의에서 chgrp
페이지 적절한이 가능한 불완전한에있는 포인트가 -R
ecursive 행동, 또는 적어도 무엇을 사용 수 :
System V 및 BSD 버전은 다른 종료 상태 코드를 사용합니다. 일부 구현에서는 발생한 오류 수로 종료 상태를 사용했습니다. 유효한 종료 상태 값 범위를 오버플로 할 수 있으므로이 방법은 작동하지 않습니다. 표준 개발자는 종료 값으로 0과> 0 만 지정하여이를 마스킹하기로했습니다.