
我需要允許用戶在沒有 tty 的情況下運行無密碼 sudo。
我下面有一個文件,/etc/sudoers.d/
其中包含我需要的特殊命令和設置,因為我不喜歡直接編輯該sudoers
文件。在該文件中我有以下內容:
# My list of commands that the user can run passwordless
myUser ALL=(ALL) NOPASSWD:SETENV: /foo/bar /foo/zaz
# My new defaults.
Defaults exempt_group = myUser
Defaults !env_reset,env_delete-=PATH
Defaults: myUser !requiretty
但是,當我su
向用戶運行時sudo -l
,我會在預設值中得到以下結果:
Matching Defaults entries for myUseron this host:
requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION
LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin, exempt_group=myUser,
!env_reset, env_delete-=PATH, !requiretty
在我可以看到的地方,它首先是 my requiretty
,最後是 my !requiretty
,這是行不通的。我認為發生這種情況是因為它首先解析普通sudoers
文件,然後解析/etc/sudoers.d/
.
有沒有一種方法可以在不編輯原件的情況下完成這項工作/etc/sudoers
?
答案1
預設值的語法是這樣的(參見 man sudoers):
Default_Type ::= 'Defaults' |
'Defaults' '@' Host_List |
'Defaults' ':' User_List |
'Defaults' '!' Cmnd_List |
'Defaults' '>' Runas_List
User_List ::= User |
User ',' User_List
於是上線了
Defaults: myUser !requiretty
Defaults:
刪除和之間的空格myUser
。