在一台特定的机器上,我经常需要sudo
时不时地运行命令。sudo
在大多数情况下,我可以输入密码。
但是,我想在不输入密码的情况下运行三个sudo
命令:
sudo reboot
sudo shutdown -r now
sudo shutdown -P now
如何将这些命令排除在密码保护之外sudo
?
欢迎各位兄弟 发布技术文章
这里的技术是共享的
我亲自通过管理员 (必须是 root )用户修改时间的方法: 有大用 有大大用
1) 建一个文件 # sudo vim /etc/sudoers.d/date
文件内容为
ALL ALL=(root)NOPASSWD: /bin/date
ALL ALL=(root)NOPASSWD: /usr/sbin/systemsetup
# sudo chmod 440 /etc/sudoers.d/date
# sudo chmod 755 /etc/sudoers.d #这是默认权限吧 ,可以不做这一步
2) 执行 date 脚本 ,见 /node-admin/18986 给脚本执行权限,然后打包成 zip文件吧,权限就不会丢失了
ALL ALL=(root)NOPASSWD: /bin/date 详解
在Linux系统中,特别是在使用sudo权限控制时,/etc/sudoers
文件扮演着至关重要的角色。这个文件定义了哪些用户或用户组可以以什么用户的身份执行哪些命令,而不需要输入该用户的密码。当你看到一行配置如 ALL ALL=(root)NOPASSWD: /bin/date
,这表示了一种特定的sudo权限设置,下面是对这个配置项的详细解释:
ALL ALL=
:
第一个ALL
指的是主机名,表示这个规则适用于所有主机。如果这里指定了一个具体的主机名或主机别名,那么规则就只会在那个特定的主机上生效。
第二个ALL
指的是用户,即这个规则适用于系统上的所有用户。如果这里指定了一个具体的用户名或用户组,那么规则就只会对那个用户或用户组的成员生效。
(root)
:
这部分指定了用户可以使用sudo以哪个用户的身份执行命令。在这个例子中,是root
用户。也就是说,用户可以使用sudo以root用户的权限来执行后面指定的命令。
NOPASSWD:
:
这个选项允许用户执行后面的命令时不需要输入root用户的密码。这通常用于那些无害或经常需要执行但不需要每次都验证密码的命令。
/bin/date
:
这是用户可以以root身份无需密码执行的命令。在这个例子中,用户可以执行/bin/date
命令,该命令用于显示或设置系统的日期和时间。
综上所述,ALL ALL=(root)NOPASSWD: /bin/date
这行配置允许系统上的所有用户,在任何主机上,以root用户的身份执行/bin/date
命令,而无需输入root用户的密码。这种设置可能用于方便用户查看系统时间,但需要注意,虽然/bin/date
本身可能看起来无害,但NOPASSWD:
的使用应该谨慎,因为它允许用户绕过密码验证执行以root身份运行的命令,这可能带来安全风险。
mgd ALL=(root) NOPASSWD: /var/root/test
. 我是用户mgd
,ALL
意思是“来自所有主机”。/var/root/test
是一个简单的“Hello World”shell 脚本,具有以下权限:-rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test
. 我没有对系统进行其他更改。 macos
ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown
这一行命令的作用
这一行命令是一个 sudoers
文件中的配置,主要用于控制用户在使用 sudo
命令时的权限。具体来说:
ALL ALL
:这部分指定了哪些用户在什么主机上具有这些权限。这里的第一个 ALL
表示所有用户,第二个 ALL
表示所有主机。
NOPASSWD:
:这意味着该用户在执行后面的命令时不需要输入密码。
/sbin/reboot,/sbin/shutdown
:这部分指定了可以执行的命令,分别是 /sbin/reboot
(重启系统)和 /sbin/shutdown
(关闭系统)。
总结起来,这行命令的作用是:允许所有用户在任何主机上执行 /sbin/reboot
和 /sbin/shutdown
命令,而无需输入密码。这种配置在某些情况下可能会提高便利性,但也会带来一定的安全风险,因为任何用户都可以在不被授权的情况下重启或关闭系统。
在sudoers
文件的上下文中,第二个ALL
实际上并不直接表示“所有主机”,这是一个常见的误解。在sudoers
文件的权限规则中,字段的含义通常是这样的:
复制代码用户或用户组 主机名=(运行用户):命令
但是,当你看到像ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown
这样的规则时,它实际上是这样被解析的:
第一个ALL
:这指的是用户或用户组。在这个例子中,它表示这条规则适用于系统上所有的用户。
第二个ALL
(在=
之前):这指的是主机名。然而,在大多数sudoers
文件的配置中,这个字段被设置为ALL
是为了表示这条规则适用于任何主机,但这实际上在单机系统上并没有太大的实际意义,因为sudo
命令是在本地机器上执行的。在分布式系统或网络环境中,这个字段可能用于限制哪些远程主机上的用户可以执行特定的sudo
命令,但在大多数桌面和服务器环境中,它通常被设置为ALL
。
NOPASSWD:
:这是一个选项,表示执行后面列出的命令时不需要密码。
/sbin/reboot,/sbin/shutdown
:这是允许用户无需密码即可执行的命令列表。
因此,第二个ALL
在这里确实指的是主机名,但在单机环境中,它主要是一个占位符,表示这条规则没有基于主机名的限制。在更复杂的环境中,这个字段可以用来根据用户连接到系统的位置(即主机名或IP地址)来限制sudo
权限。
总结一下,第二个ALL
在sudoers
文件中的意思是“这条规则适用于任何主机”,但在单机环境中,这通常是一个默认的、无实际限制的设置。
adminuser ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown adminuser 到底指的是用户组 还是用户
在 sudoers
文件的上下文中,adminuser
通常指的是一个用户的名称,而不是用户组的名称。sudoers
文件用于定义哪些用户或用户组可以运行哪些命令,以及是否需要密码。
当你看到这样的行:
bash复制代码adminuser ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown
它表示的是:
adminuser
:这是一个具体的用户名称,而不是用户组。
ALL
:这表示该规则适用于所有主机(但在单机环境中主要是个占位符)。
NOPASSWD:
:这表示当用户 adminuser
尝试执行后面列出的命令时,不需要输入密码。
/sbin/reboot,/sbin/shutdown
:这是用户 adminuser
可以无密码执行的命令列表。
如果你想要指定一个用户组而不是单个用户,你需要使用用户组的名称,并且通常还需要在组名前加上 %
符号。但是,请注意,并非所有系统都支持直接在 sudoers
文件中为用户组授予权限(尽管这取决于sudo
的版本和配置)。在一些系统上,你可能需要通过将用户添加到具有适当 sudo
权限的用户组中来间接授予权限。
然而,在大多数情况下,如果你想要为特定用户组授予权限,你会在 /etc/sudoers
文件中看到类似于这样的行(假设你的系统支持这种语法):
bash复制代码%admingroup ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown
但请注意,admingroup
在这里是一个假设的用户组名称,你需要将其替换为你系统中实际存在的用户组名称。此外,并非所有 sudo
实现都支持直接在 sudoers
文件中使用 %
前缀来指定用户组;这取决于你的系统配置和 sudo
的版本。如果你的系统不支持这种语法,你可能需要通过其他方式(如使用别名或编辑 PAM 配置)来实现类似的功能。但在大多数现代 Linux 发行版中,上述语法是有效的。