이제 모든 사용자가 자신의 그룹에 속하도록 서버 중 하나가 설정되었습니다. 이를 단일 그룹에 다시 할당한 다음 각 사용자에게 다른 사용자의 디렉터리에 대한 읽기 전용 액세스를 허용할 수 있습니까?
많은 사용자를 위해 이 작업을 수행할 수 있는 빠른 명령이 있습니까?
답변1
짧은 대답: 하지 마세요.
긴 답변: 이는 Unix 시스템의 기본값이었습니다. 하지만 이로 인해 의도하지 않은 데이터 공유가 발생할 수 있으며 권한 문제가 있는 경우 다른 사용자가 데이터를 수정할 수도 있습니다. 시간이 지남에 따라 대부분의 Unix/Linux 설치는 사용자별 그룹 설정으로 이동되었습니다. 원래 사용자가 둘 이상의 그룹(Unix에서는 주 그룹과 보조 그룹)에 속해 있을 때 다른 그룹의 권한을 얻기 위해서는 전환할 그룹과 실행할 프로그램을 특수한 프로그램( 이름을 잊어버렸네요, 오랜만이군요......). 오늘날의 시스템에서는 모든 프로세스가 동시에 모든 그룹에 속하므로 더 이상 이것이 필요하지 않습니다. 모든 사용자를 공유 파일이 속한 그룹에 넣기만 하면 됩니다. ACL을 처리하는 파일 시스템에서는 보다 세분화된 권한도 사용할 수 있으며, 여기서 사용자/그룹/다른 사람에 관계없이 파일에 개별 사용자 권한을 할당할 수 있습니다. acl(5), chacl(1)에 대한 매뉴얼 페이지를 참조하십시오.
답변2
저는 정말로 "하지 마세요"라고 말하고 싶습니다. 왜냐하면 그것은 최선의 생각이 아니기 때문입니다. 그러나 이것은 귀하의 질문에 대한 답변이 아니므로 이렇게 합시다. 아래에 작성한 스크립트에서 제가 가정한 몇 가지 가정은 다음과 같습니다.
- 사용자라는 그룹을 만듭니다.
- 이 그룹에 추가하려는 모든 사용자의 UID는 500에서 10000 사이입니다.
- 그룹에 추가하려는 사용자만 500에서 10000 사이의 uid를 갖습니다.
- 쉘스크립트를 실행하기 전에 쉘스크립트가 수행하는 작업을 알아보거나 설명을 요청하게 됩니다.
먼저 /home에 있는 폴더의 소유권을 수정합니다.
chgrp users -r /home
먼저 uid 500 이상의 모든 사용자를 확보해 보겠습니다.
getent passwd | awk -F: '{if($3 > 500 && $3 < 10000) { print $1 }}'
내 시스템에서는 다음을 반환합니다.
dennis
paul
tom
이제 그룹을 변경해야 합니다.
for user in $(getent passwd | awk -F: '{if($3 > 500 && $3 < 10000) { print $1 }}'); do
usermod -g users $user
done
이제 더 이상 필요하지 않은 그룹을 삭제할 수 있습니다.
for user in $(getent passwd | awk -F: '{if($3 > 500 && $3 < 10000) { print $1 }}'); do
groupdel $user
done