이름이 같지만 GID가 다른 두 그룹을 갖는 것이 유효합니까?

이름이 같지만 GID가 다른 두 그룹을 갖는 것이 유효합니까?

오늘 내 centos 시스템에 "승객" 웹 서버를 설치하는 동안 이상한 문제가 발생했습니다.

서버는 현재 사용자 그룹을 사용하려고 시도하더라도 자신이 만드는 디렉터리에 대해 GID를 설정할 수 없습니다. 오류는 다음과 같습니다.

"/tmp/passenger.spawn.XXXX6rOcmE/envdump" 디렉터리에 대해 UID를 1005로, GID를 100으로 변경할 수 없습니다: 작업이 허용되지 않습니다(errno=1)

몇 가지 조사 결과 다음 명령에 표시된 것처럼 이름은 같지만 GID가 다른 두 그룹이 있다는 문제가 있음을 발견했습니다.

$ getent group | grep users
users:x:100:
users:*:1001:asdf,sdafsdf,zzzz

두 그룹 중 하나의 이름을 바꾼 후 문제가 해결되었습니다.

그래서 내 질문은: 사양에 따라 동일한 이름을 가진 동일한 시스템에 두 개의 그룹을 갖는 것이 유효한가요?

그 이유는 그것이 작동한다면 이 사건을 처리할 수 없기 때문에 승객을 위해 버그 보고서를 제출할 계획이고, 작동하지 않으면 버그를 centos에 보고해야 하기 때문입니다.

답변1

규범을 잊어버리고 실제로 어떤 일이 일어나는지 생각해 보세요. 주의해야 할 주요 사항은 파일 시스템 권한입니다.아니요그룹 이름을 포함하며 정수 그룹만 포함합니다.ID. (하층시스템 호출은chown()gid_t, 매개변수 목록에서 볼 수 있습니다. )

따라서 , chgrp또는 chown디렉토리 그룹을 변경하는 데 사용되는 모든 도구는 사용자가 지정한 이름에서 올바른 그룹 ID를 찾아야 합니다. 두 개의 이름이 동일하면 어느 것이 동일한 이름을 가지고 있는지 알 수 없습니다. 에 있는 그룹의 경우 /etc/group항상 첫 번째 그룹을 얻을 가능성이 높습니다. 사용자 및 그룹을 저장하는 다른 방법에서는 동일한 이름을 두 번 저장하지 못할 수도 있습니다. 예를 들어 해당 이름이 LDAP DN 또는 기타 유사한 기본 키에 사용되는 경우입니다.

첫 번째 줄이 작동한다고 가정하면 명명된 그룹은 usersGID 100으로 확인되고 관련 사용자가 asdf그룹 1001의 구성원이 되지만 그룹 100의 구성원이 되어 chgrp실패하게 됩니다.

답변2

아니요, 효과가 없습니다. 이것이 POSIX에 명시적으로 명시되어 있는지는 확실하지 않습니다.chgrp정의주어진 그룹 이름에 대해 단일 그룹 ID가 존재한다고 가정합니다(있는 경우).

그룹

그룹 데이터베이스의 그룹 이름 또는 숫자 그룹 ID입니다. 파일 피연산자 중 하나로 명명된 각 파일에 제공될 그룹 ID를 지정합니다. 숫자라면그룹피연산자는 그룹 데이터베이스에 그룹 이름으로 존재하며, 그룹 이름과 연관된 그룹 ID 번호가 그룹 ID로 사용됩니다.

비슷한 방식으로,getgrnam지정된 이름을 가진 단일 그룹만 처리합니다.

(기술적으로는 여러 그룹 이름이 동일한 ID를 가리키는 경우 작동하지만 사양에서는 실제로 이를 허용하지 않지만 그 반대는 불가능합니다.)

관련 정보