iT邦幫忙

0

操作Ansible時,如何限制一般使用者在sudo權限下僅能執行某些特定的指令?

我的問題是在使用Ansible时,如何限制一般使用者(regular user)在sudo權限下只能實行某些指令,而不是像root user一樣無限制。

舉例來說,如果在managed node中有個regular user叫做"ianyc",且sudoers file裡這樣規範:

"ianyc ALL=(ALL) /bin/ls"

代表此user僅能透過sudo執行ls指令。

然而在Ansible controller node中,如果我執行以下playbook:


-hosts: linux
become: yes
become_method: sudo
vars_files:
-/etc/ansible/sensitiveData.yml
vars:
ansible_become_pass: "{{ linuxSudoPassword }}"
tasks:
-name: list the directory
command: ls /root
register: result
-debug: var=result


其中linux代表managed node群組而sensitiveData是vault file,存放sudo password。會得到以下錯誤訊息:

"Sorry, user ianyc is not allowed to execute '/bin/sh -c echo BECOME-SUCCESS-orzksvkkqakoaplykpvjkycejidpddgv; /usr/bin/python /home/ianyc/.ansible/tmp/ansible-tmp-1554271272.93-107453846539342/AnsiballZ_setup.py' as root on localhost.localdomain."

請問這是什麼意思以及為什麼會發生此錯誤?

除此之外,我亦嘗試將"/bin/sh"加入到sudoer file中:

"ianyc ALL=(ALL) /bin/ls, /bin/sh"

如此一来,Ansible是可以執行的,但是問題會變成...

"不止sudo ls可以執行,而是全部指令(ex: touch /root/file1...etc)都可以執行"

因此,我想問在操作Ansible時,有没有什麼方法可以限制regular user在使用sudo權限時只能做特定的某些事?

Tung iT邦新手 5 級 ‧ 2019-08-12 10:30:56 檢舉
先試著把/usr/bin/python 加進去sudoer看看?
Tung iT邦新手 5 級 ‧ 2019-08-12 10:36:28 檢舉
另外可以用 !和*搭配 來禁用某些指令,如 !/bin/fdisk,!/usr/bin/*
不過如果把/bin/sh加進去有限制應該跟沒限制一樣了,畢竟可以sudo su /bin/sh後,完全使用root本身執行所有指令,不會再透過sudo執行

1 個回答

0
echochio
iT邦研究生 3 級 ‧ 2019-04-07 15:29:13

給您一個笨方法
這我常用來在網頁上需要 root 權限去執行的方式
您在 root 權限下寫個有 su root 權限的 c 名稱 myls.c

#include <stdlib.h>
#include <unistd.h>
int main(){
        setuid(0);
        system("ls -la /root");
        return 0;
}

寫好 就編譯(要裝 gcc)

gcc -o myls myls.c

改權限 su root 權限 及移至使用者目錄

chmod 4550 myls
mv myls /home/ianyc/.

那 使用者 ianyc 就可經由執行 myls 去用 root 權限 ls 那 /root 目錄了....
缺點是任何使用者都可經由執行 myls 去用 root 權限 ls 那 /root 目錄
所以 myls 只放到 ianyc 的家目錄就好

ianyc iT邦新手 5 級 ‧ 2019-04-09 09:32:43 檢舉

這看起來的確是個方法,
不過還是想知道Ansible本身有沒有更好的控管權限的方法~

我要發表回答

立即登入回答