visudo + 如何从其他用户获取对用户的访问权限

visudo + 如何从其他用户获取对用户的访问权限

在我的 Linux Red Hat 机器上,我从 root 执行以下操作

# su - starus
$                <--   now I am in starus user

$ su - moon      <-- now I want to access moon user from starus user
Password:

但系统提示我输入密码!

visudo如果已经在下面添加了密码,请告知为什么我会收到密码

moon ALL=(starus) NOPASSWD: ALL

怎么了?

我还尝试以用户 Moon 身份运行以下脚本,但需要密码

starus@host sudo -u moon  /home/USER261/test.bash
[sudo] password for starus:

答案1

首先,root可以成为任何用户,无需密码。这是成为超级用户的特权之一。因此,使用su - starus,您可以切换到starus而不出现提示。然而,到那时,您已经starus不再是root,因此您确实需要密码才能切换到moon

简单的解决方案是切换回rootfirst(只需运行exit),然后切换到moon.

现在,visudo这里无关紧要。您没有使用,因此您在那里(在编辑的文件sudo中)所做的任何更改都不会影响 的行为,只是它不是同一程序。/etc/sudoersvisudosusudo

无论如何,您显示的行 ( moon ALL=(starus) NOPASSWD: ALL) 只是意味着用户moon可以以用户身份运行任何命令,starussudo无需输入密码。这并不意味着任何人都可以moon在不知道moon密码的情况下成为。这只是意味着像这样的命令不需要密码:

moon@host $ sudo -u starus command

如果您以 登录moon,则可以在没有密码的sudo情况下运行命令。starus

答案2

简单的答案是该/etc/sudoers文件仅供程序使用sudo,而不是su.

su作为指定用户启动新 shell 的程序不使用它。当您运行时su - moon,您将启动一个新的登录 shell月亮用户,系统将提示您输入该用户的密码。当运行此命令时,自此之后系统不会提示您输入用户密码是超级用户,可以根据需要更改密码。但是,当运行命令时斯塔鲁斯用户,您不是超级用户,必须正常进行身份验证。

另一方面,您所做的编辑/etc/sudoers允许斯塔鲁斯用户使用该sudo命令并-u选择运行命令作为月亮用户(不提示输入密码)。例如,当登录时斯塔鲁斯,您可以运行以下命令:

sudo -u moon touch /home/moon/test.file

运行sudo -u moon ls -l /home/moon/test.file会显示新创建的test.file属于月亮用户(就好像它是月亮运行命令而不是斯塔鲁斯)。

相关内容