'직원'사용자 그룹 이해


23

모든 사용자가 '직원'그룹의 구성원 인 것으로 알려져 있습니다. 표준 사용자를 설정하고 파일을 작성하는 경우 터미널에서 'ls -la'가있는 파일 목록은 사용자 그룹이 'staff'임을 나타냅니다.

dscacheutil 명령을 사용하여 그룹에 대한 정보를 볼 수 있습니다. 예를 들면 다음과 같습니다.-

dscacheutil -q group -a name admin

모든 구성원을 포함하여 관리 그룹에 대한 정보를 리턴합니다.

그러나 '직원'그룹을 볼 때 표준 사용자를 그룹의 구성원으로 볼 것으로 예상했지만 그렇지 않습니다.

dscacheutil -q group -a name staff

name: staff
password: *
gid: 20
users: root

모든 표준 사용자가 직원 그룹의 구성원 인 경우 여기에 표시되지 않는 이유는 무엇입니까?

직원 그룹의 실제 구성원을 보여줄 수있는 또 다른 명령이 있습니까?


3
좋은 질문입니다. 충분히주의를 기울이지 않으면이 현상금을 현상하고 싶을 것입니다. 나는 기본 그룹 멤버 만 보여주기 위해 어떻게 든 코딩되었다고 생각했지만 내 이름이 지정된 모든 사용자 (숨겨진 500 명 이상)는 모두 주 그룹으로 직원이며 여전히 캐시 유틸리티에 의해 그룹에서와 같이 나열되지 않습니다 ( GID의 루트wheel is 나열 ...) 홀수 소스 실제로 ...
bmike

@bmike 덕분에 흥미롭게도 / System / Library / CoreServices에있는 Directory Utility 앱에서 동일한 내용을 볼 수 있습니다.
TheDarkKnight

오, 루트 만 직원이라고 생각했습니다. / etc / group처럼 : staff : * : 20 : root
Scott Walter

@ScottWalter에서 관리자는 'staff'및 'admin'의 구성원이며 관리자가 아닌 사람은 'staff'그룹의 구성원입니다. "소유자, 그룹, 기타"섹션을 참조하십시오 : support.apple.com/kb/HT2963
TheDarkKnight

답변:


11

OS X에서 그룹의 모든 구성원을 확보 할 수있는 확실한 방법은 2DD8847의 답변입니다. "왜"에 대해서는 논리적 인 설명을 제공 할 수 없습니다. 내가 말할 수있는 것은 결과를 차별화하는 것입니다.

이러한 방법에는 PrimaryGroupID를 통해 그룹의 구성원 인 사용자 만 포함되지 않습니다. 생각하지 않는 한 가지 방법은 목록에없는 사용자가 공식적으로 직원 그룹에 추가되지 않았다는 것입니다. 직원 gid와 일치하는 PrimaryGroupID가 제공되었습니다. 따라서 일부 명령에는 공식적으로 나열되지 않습니다. 나는 터무니 없다.

불완전한 결과 :

dscl . -read /Groups/[groupname]
dscl . -read /Groups/[groupname] GroupMembership
dscacheutil -q group -a name [groupname]

완전한 결과 :

dscl . -list /Users PrimaryGroupID | grep [gid]

내가 실제로 말할 수있는 것은 그룹 구성원을 나열하는 대신 기본 그룹 ID로 그룹 구성원을 조회하지 않으면 완전한 결과를 얻을 수 없다는 것입니다. 유닉스의 이상한 점에 도전하십시오. 많이있다.

희망이 도움이됩니다!

출처


"이 목록에없는 사용자는 공식적으로 직원 그룹에 추가되지 않았습니다. 직원 직원과 일치하는 PrimaryGroupID가 제공되었습니다."-이제 말이됩니다. 이것에 유효한 보안 공격 벡터가 있는지 궁금합니다. 실제로 사용자를 관리자 그룹에 추가하지 않고 사용자의 PrimaryGroupId를 설정할 수 있다면 관리자 권한을 부여합니까? 조사하겠습니다.
TheDarkKnight

나는 어떤 것이 잘못되었다는 것을 의미하지 않았습니다. 걱정하지 마십시오. 직원에게는 컴퓨터에 대한 관리자 권한이 없습니다. OS X에서는 소유자가 직원으로 설정 한 거의 모든 것이 있지만 다른 권한은이 현실의 오용보다 우선합니다. 모든 사용자 폴더는 다른 모든 사용자가 "판독 가능"하지만 모든 사용자 폴더 안에는 개별 항목이 읽기 액세스 권한이 취소되도록 설정되어 있습니다. 따라서 / Users / username / Desktop 에는 모든 사용자가 액세스 권한 없음으로 설정되어 있습니다. 권한 관리가 깨끗하지 않지만 작동하며 안전합니다.
sgelliott

4
아마 당신은 의미Chalk it up to the oddities of OS X. There are many.
user3019105

다른 컴퓨터에서 디스크를보고 있었는데, 사용자 이름이 바뀌고 사용자 502 또는 501로 "steve"가되었습니다. 내 이론은 "직원"은 아마도 "macosx"라고 불려졌으며 Finder가 일반 사용자를 대신하여 "루트 한"것을하는 데 사용된다는 것입니다. 임의의 이론.
Tomachi

2
@Tomachi 스태프는 macOSx가 될 수 없었습니다. 시스템이 NeXT
user151019

4

정확히 무엇을 성취하고 싶습니까?

이 명령은 staff 그룹의 모든 사용자를 나열합니다.

dscl . -list /Users PrimaryGroupID | grep ' 20$'

출처

설명 : 직원 그룹의 기본 그룹 ID는 20입니다.


직원 그룹이 dscacheutil 및 디렉토리 유틸리티를 통해 구성원 목록을 표시하지 않는 이유를 이해하려고합니다. 내 주요 목표는 별도의 프로세스를 호출하지 않고 C ++을 사용하여 그룹에서 구성원 목록을 검색하는 것입니다. 이 과정에서 나는 회원을 표시하지 않는 그룹의 문제를 발견했으며 이것이 왜 그런지 알고 싶습니다.
TheDarkKnight

dscacheutil이 직원 그룹을 나열하지 않는 이유는 무엇입니까? developer.apple.com/library/mac/documentation/Darwin/Reference/… 구현 방식이며 어떻게 든 표시하지 않기로 결정했습니다.
Bastian Gruber

2
죄송하지만 "구현 예"라고 말하고 dscacheutil의 맨 페이지로 연결해도 질문에 대답하지 않습니다.
TheDarkKnight

C ++의 경우 쉘 함수를 호출 할 수 있습니다. 이 사이트가 매우 유용 하다는 것을 알았습니다 . blog.earth-works.com/2012/09/13/… 그들은 함수를 만들었고 무언가를 놓치고 있습니다. 그들은 당신이 회원을 좋아하기 때문에 당신을 보여주지 못하게합니까?
Bastian Gruber

2
쉘 함수를 호출하면 별도의 프로세스가 생성됩니다. 여러 가지 이유로, 내가 작업중 인 프로젝트에는 이것이 불가능합니다. 나는 지금 Identity Services를보고있다 : developer.apple.com/library/mac/documentation/networking/…
TheDarkKnight
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.