我曾经sudo passwd root
成功设置了root的密码,然后我尝试su到root,但是失败了,没有任何反应。
ubuntu@VM-44-117-ubuntu:~$ sudo su root
ubuntu@VM-44-117-ubuntu:~$
您可以看到用户名没有改变。
然后我尝试使用,su root
但用户名仍然没有改变。
ubuntu@VM-44-117-ubuntu:~$ su root
Password:
ubuntu@VM-44-117-ubuntu:~$
我怎样才能使 su 正确运行?
答案1
默认采用“根”部分。因此:
doug@s15:~$ sudo su
[sudo] password for doug:
root@s15:/home/doug# exit
exit
doug@s15:~$
当然,我 (doug) 是 sudo 成员,因此被允许成为 root:
doug@s15:~$ groups
doug adm cdrom sudo dip plugdev lxd lpadmin sambashare libvirtd
不过,您也可以指定要切换到的用户名。例如:
doug@s15:~$ sudo su root
root@s15:/home/doug# exit
exit
doug@s15:~$ sudo su richard
richard@s15:/home/doug$ exit
exit
更多信息请参阅蘇曼页。
现在,综上所述,您系统上的行为确实看起来很奇怪。如果我取消用户 richard 的 sudo 权限:
doug@s15:~$ sudo deluser richard sudo
Removing user `richard' from group `sudo' ...
Done.
然后,在另一个终端中,以 richard 身份登录并尝试使用 su,我得到:
richard@s15:~$ groups
richard adm cdrom dip plugdev lxd lpadmin sambashare libvirtd
richard@s15:~$ sudo su
[sudo] password for richard:
richard is not in the sudoers file. This incident will be reported.
richard@s15:~$
那么为什么你什么都没得到?(这是你最初的问题)?
你的计算机是虚拟的,并且托管在其他地方吗?托管网站经常会为 root 等做一些奇怪的事情。你的 su 版本符合这个要求吗?:
-rwsr-xr-x 1 root root 40128 May 16 2017 /bin/su
答案2
您可以完全避免这种情况,而不会损害系统的安全性。如果您需要 root shell:
sudo -s
现在,您以 root 身份进入 shell。正常注销即可返回。诚然,在某些情况下,让 root 拥有密码似乎很不错,例如当您需要运行 rsync 之类的服务来设置或恢复联网计算机上的内容时。在这些情况下,我通常会让服务拉动而不是推送。例如,
sudo rsync -a you@remotehost:/root_owned_dirs/ /root_owned_dirs/
如果两边都需要 root 权限,我会尝试在暴露在外界最少的机器上设置 root 密码,然后从暴露较多的那一边拉取。这样,如果我很着急,错误就会出现在较难攻击的系统上。
在这种情况下:
sudo passwd root
设置密码,然后
su
并且您有一个 root 身份的 shell。
我的秘密议程是改掉愚蠢的习惯运行“sudo su”。字面意思是,
“哦,计算机,请授予我比现在更大的权限,这样我就可以向你请求更大的权限。”
这不是糟糕的,太傻了。
答案3
尝试这个:
就像你之前做的那样:
$ sudo su
[sudo] password for doug:
这将提示您输入 root 的新密码:
root@s15:/home/doug# passwd
[[new password for root]]
像之前一样退出
$ exit
现在尝试使用上面提供的密码以 root 身份登录
$ su