다음은 스크립트입니다.
#!/bin/bash
user='my_sudo_user'
sudo -lU $user
non_sudo_user
이 스크립트를 실행하는 능력을 제한하려고 합니다 . 을 사용하여 visudo
다음을 시도했습니다.
non_sudo_user ALL=(ALL) NOPASSWD: /bin/bash /full/path/script.sh
non_sudo_user ALL=(ALL) NOPASSWD: /usr/bin/sudo -lU
non_sudo_user ALL=(ALL) NOPASSWD: /usr/bin/sudo -lU * # unsafe
그들 중 누구도 작동하지 않습니다. 다음 메시지가 나타납니다.
Sorry, user non_sudo_user is not allowed to execute 'list' as my_sudo_user on host123.
하지만 sudoer
파일에 -l을 제공했습니다.
어떡해? 그건 그렇고, 이것은 우분투입니다.
편집하다:
실제로 다음 스크립트를 실행합니다.
for u in $(awk -F'[/:]' '{if($3>=1000&&$3!=65534) print $1}' /etc/passwd); do sudo -lU $u ; done
그래서 사전에 명확한 사용자 목록이 없습니다.
답변1
편집하다: OP가 추가 정보를 제공하면 다시 작성을 완료하세요.
실행 권한이 있는 /etc/sudoers에 사용자를 지정합니다 /usr/sbin/sudo
.
이렇게 하면 sudo 명령을 실행할 수 있지만 다른 명령을 실행할 수 있는 권한은 없습니다.
방금 새로운 사용자 계정을 사용하여 CentOS-7.3.1611에서 이것을 테스트했습니다.
testusr ALL=(ALL) NOPASSWD: /usr/sbin/sudo
허용된 명령 목록에 sudo 명령 자체를 지정하는 것이 보안에 영향을 미치는지 여부는 알 수 없습니다. 프로덕션에 사용하기 전에 확인하고 테스트하세요. 안전하지 않을 수도 있습니다.
답변2
해당 사용자 전체로 임의의 명령을 실행할 수 있는 경우에만 다른 사용자가 실행할 수 있는 명령을 나열할 수 있다고 생각합니다. 그래서 대신...
sudoers에서:
non_sudo_user ALL=(ALL) NOPASSWD: /usr/bin/sudo -l
그리고 이를 나열하려면 다음을 실행하세요 non_sudo_user
.
for target_user in user1 user2 user3... ; do
sudo -u "$target_user" sudo -l
done