사용자가 특정 sudo 명령을 실행하지 못하도록 제한

사용자가 특정 sudo 명령을 실행하지 못하도록 제한

다음은 스크립트입니다.

#!/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

관련 정보