![无法绕过密码,/etc/sudoers 不生效](https://linux22.com/image/1140311/%E6%97%A0%E6%B3%95%E7%BB%95%E8%BF%87%E5%AF%86%E7%A0%81%EF%BC%8C%2Fetc%2Fsudoers%20%E4%B8%8D%E7%94%9F%E6%95%88.png)
我需要能够以 sudo 身份运行两个 bash 脚本,而无需提供密码。
其中一个脚本在启动时运行,它会检查是否存在不活动状态,如果是,则使我的笔记本电脑的背光键变暗。
另一个脚本是我经常使用的,因此无需密码即可方便地运行它。
我用这个工具工作了一段时间,但在最近的一次更新中,我的 /etc/sudoers 文件被覆盖了。我保存了更改后的副本,但出于某种原因,我输入的行不再起作用,系统要求我提供密码。
我在 Ubuntu 16.04 上。这是我当前的 /etc/sudoers 文件:
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# CUSTOM:
ali ALL= NOPASSWD: /usr/local/bin/dim_keyboard.sh
ali ALL= NOPASSWD: /usr/local/bin/go
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
这些行:
ali ALL= NOPASSWD: /usr/local/bin/dim_keyboard.sh
ali ALL= NOPASSWD: /usr/local/bin/go
都是我放进去的。
通过查看类似的问题,我似乎使用了正确的语法,但由于某种原因,这些行仍然不起作用。
有任何想法吗?
答案1
为什么我们甚至需要使用sudo
这个应用程序?
您可以使用以下程序shc
将你的 shell 脚本“编译”成一个独立的可执行二进制文件,你可以直接将其添加到文件中sudoers
。或者,你甚至可以设置setuid
少量因此它实际上以 root 身份运行而不需要sudo
。
那么,让我们尝试一个例子:
shc -f myscript.sh -o myscript
sudo chown -R root:root myscript
sudo chmod a+x myscript
sudo chmod u+s myscript
这将获取一个 shell 脚本,并将其转换为具有 root 权限的 C 可执行文件setuid
。无论何时调用此脚本(带或不带sudo
),它都应始终以 root 用户身份(有效地)运行。