在我的 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
。
简单的解决方案是切换回root
first(只需运行exit
),然后切换到moon
.
现在,visudo
这里无关紧要。您没有使用,因此您在那里(在编辑的文件sudo
中)所做的任何更改都不会影响 的行为,只是它不是同一程序。/etc/sudoers
visudo
su
sudo
无论如何,您显示的行 ( moon ALL=(starus) NOPASSWD: ALL
) 只是意味着用户moon
可以以用户身份运行任何命令,starus
而sudo
无需输入密码。这并不意味着任何人都可以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
属于月亮用户(就好像它是月亮运行命令而不是斯塔鲁斯)。