"x_users"라는 Linux 보안 그룹의 구성원인 권한 없는 사용자 집합(user01, user02, user03...)이 있다고 가정해 보겠습니다.
$ groups user01
user01 : user01 x_users
또한 "x_admins"라는 Linux 보안 그룹의 구성원인 관리자 사용자 집합(admin01, admin02, admin03...)이 있다고 가정해 보겠습니다.
$ groups admin01
admin01 : admin01 x_admins
x_admin 그룹의 모든 구성원이 x_users 그룹의 구성원인 모든 사용자와 마찬가지로 sudo(8) 및 su(1)을 사용하여 대화형 로그인 셸을 호출할 수 있기를 바랍니다. 예를 들어 다음과 같습니다.
[admin01 ~]$ sudo su - user01
[user01 ~]$ # do stuff as user01
[user01 ~]$ exit
[admin01 ~]$
x_admins 그룹의 구성원은 x_users 그룹의 구성원이 아닌 사용자에 대해 대화형 로그인 셸을 호출하기 위해 sudo(8) 및 su(1)을 사용해서는 안 됩니다.
[admin01 ~]$ sudo su - nonxuser
[sudo] password for admin01:
Sorry, user admin01 is not allowed to execute '/bin/su - nonxuser' as root on localhost
[admin01 ~]$
이를 달성하는 한 가지 방법은 다음과 같이 "/etc/sudoers.d/x_admins" 구성 파일을 만드는 것입니다.
# /etc/sudoers.d/x_admins
User_Alias ADMINS = %x_admins, %wheel
ADMINS ALL = (root) /bin/su - user01
ADMINS ALL = (root) /bin/su - user02
ADMINS ALL = (root) /bin/su - user03
# ...
물론 sudoers 구성 파일에 x_users 그룹의 개별 구성원을 수동으로 나열하는 것은 지루하고 오류가 발생하기 쉽습니다. sudoers 구성 파일에서 이를 수행하는 더 깔끔한 방법이 있습니까?
답변1
원하는 것을 보다 엄격하게 달성하는 한 가지 방법은 admins 그룹의 사용자가 "sudo"를 사용하여 users 그룹의 사용자로서 직접 명령을 실행할 수 있도록 허용하는 것입니다. 이는 대략적으로 /etc/sudoers에 다음을 추가하여 수행할 수 있습니다.
%x_admins ALL = (%x_users) ALL
그런 다음 관리자는 다음을 사용하여 사용자 "user0"에 대한 명령을 실행할 수 있습니다.
sudo -u user0 command...
이 사용자에게 전체 쉘 액세스 권한을 얻으려면 관리자가 다음 명령을 사용할 수 있습니다.
sudo -i -u user0
이렇게 하면 관리자가 루트로 아무것도 실행하지 않아도 됩니다. 심지어 "su"도 마찬가지입니다.