如果我发出
sudo /bin/bash`
[sudo] password for mark:
cmp -bl /dev/blah1 /dev/blah2
Run Code Online (Sandbox Code Playgroud)
并使用
sudo cmp -bl /dev/blah1 /dev/blah2
Run Code Online (Sandbox Code Playgroud)
然后以root身份登录?
我看不出有什么不同,如果发出多个命令行,那么rooting
恕我直言,似乎是在命令行中键入 sudo 前缀的逻辑选项。
我已经看到sudo -i
被用来登录到 root,它曾经可以工作,但上周它发出了一个错误。
**编辑**
我以 root 身份登录,发出命令
mark@mark-zotac:~$ sudo cmp -bl /dev/sda "/media/mark/Seagate Expansion Drive/SSD/ssd.img"
[sudo] password for mark:
mark@mark-zotac:~$
Run Code Online (Sandbox Code Playgroud)
它运行了,运行了大约 30 分钟,但产生zero
了nothing
输出。我没有任何失败或成功的迹象......那么我怎么知道比较结果是否成功?
Fai*_*Dar 15
以下内容是直接从root sudo 上的社区 wiki 页面中提取的。
sudo
允许用户在没有 root 登录的情况下作为 root 用户;使用比sudo
以 root 身份登录更安全。
使用的好处
sudo
Ubuntu 默认禁用 root 登录有很多好处,包括:
- 安装人员要问的问题更少。
- 用户不必记住偶尔使用的额外密码(即 root 密码)。如果他们这样做了,他们很可能会忘记它(或者不安全地记录它,让任何人都可以轻松破解他们的系统)。
- 默认情况下,它避免了“我可以做任何事情”的交互式登录。在发生任何重大更改之前,系统会提示您输入密码,这应该让您考虑自己所做的事情的后果。
- sudo 添加了命令 run (in
/var/log/auth.log
)的日志条目。如果您搞砸了,您可以返回并查看运行了哪些命令。- 在服务器上,每一个试图强行进入的破解者都会知道它有一个名为 root 的帐户,并且会首先尝试。他们不知道您其他用户的用户名是什么。由于 root 帐户密码被锁定,这种攻击在本质上变得毫无意义,因为首先没有密码可以破解或猜测。
- 通过在组中添加和删除用户,可以轻松转移管理员权限。当您使用单个 root 密码时,取消用户授权的唯一方法是更改 root 密码。
sudo
可以使用更细粒度的安全策略进行设置。- 不需要与需要在系统上执行某种类型管理任务的每个人共享 root 帐户密码(请参阅上一个项目符号)。
- 认证会在很短的时间后自动过期(可以根据需要设置为尽可能少或为 0);因此,如果您在使用 以 root 身份运行命令后离开终端
sudo
,您将不会无限期地打开 root 终端。使用 sudo 的缺点
虽然对于台式机来说,使用 sudo 的好处很大,但可能存在一些需要注意的问题:
重定向使用 sudo 运行的命令的输出需要不同的方法。例如,考虑
sudo ls > /root/somefile
将不起作用,因为它是设置尝试写入该文件的重定向的 shell,而不是使用 root 权限运行的命令。您可以使用Run Code Online (Sandbox Code Playgroud)ls | sudo tee -a /root/somefile
追加,或
Run Code Online (Sandbox Code Playgroud)ls | sudo tee /root/somefile
覆盖内容。您还可以将整个命令传递给在 sudo 下运行的 shell 进程,以便使用 root 权限写入文件,例如
Run Code Online (Sandbox Code Playgroud)sudo sh -c "ls > /root/somefile"
- 在许多办公环境中,系统上唯一的本地用户是 root。所有其他用户都是使用 NSS 技术(例如 nss-ldap)导入的。要设置工作站或修复它,在网络出现故障的情况下,
nss-ldap
需要 root。这往往会使系统无法使用,除非破解。此处需要额外的本地用户或启用的 root 密码。本地用户帐户的 $HOME 应该在本地磁盘上,而不是在 NFS(或任何其他网络文件系统)上,并且.profile
/.bashrc
不引用 NFS 挂载上的任何文件。这通常是 root 的情况,但如果添加非 root 救援帐户,则必须手动采取这些预防措施。然而,使用本地用户的优势sudo
就是可以轻松跟踪命令,如上面的好处所述。关于root登录的误解
是不是
sudo
比不安全su
?基本的安全模型是相同的,因此这两个系统共享它们的主要弱点。任何使用
su
或sudo
必须被视为特权用户的用户。如果该用户的帐户被攻击者盗用,攻击者也可以在用户下次这样做时获得 root 权限。用户帐户是这条链中的薄弱环节,因此必须像 root 一样受到保护。在更深奥的层面上,
sudo
提供一些鼓励不同工作习惯的功能,这可以对系统的安全性产生积极影响。sudo
常用于只执行一条命令,而su
一般用于打开一个shell并执行多条命令。该sudo
方法降低了无限期打开 root shell 的可能性,并鼓励用户尽量减少对 root 权限的使用。我将无法进入单用户模式!
Ubuntu 中的 sulogin 程序被修补以处理锁定 root 密码的默认情况。
我可以在不输入密码的情况下从控制台获取 root shell!
您必须输入密码。
控制台用户可以访问引导加载程序,并且可以在引导过程中以各种方式获得管理权限。例如,通过指定一个替代的 init(8) 程序。Linux 系统通常不会在控制台上配置为安全的,并且需要额外的步骤(例如,设置 root 密码、引导加载程序密码和 BIOS 密码)来确保安全。请注意,控制台用户通常可以物理访问机器,因此也可以通过其他方式对其进行操作。
关于 sudo 和 shell 的特别说明
Ubuntu 的设计者不建议或支持以下任何方法。
请不要向其他人建议这个,除非您个人可以 24/7 全天候为用户提供支持,如果他们因以 root 身份运行 shell 而出现问题。
要启动 root shell(即可以在其中运行 root 命令的命令窗口)、启动 root 的环境和登录脚本,请使用:
sudo -i
(类似于sudo su -
,为您提供 root 环境配置)要启动 root shell,但保留当前 shell 的环境,请使用:
sudo -s
(类似于sudo su
)下面是一些之间的差异的简要概述
su
,su -
以及sudo -{i,s}
Run Code Online (Sandbox Code Playgroud)HOME=/root uses root's PATH env vars sudo -i Y Y[2] N sudo -s N Y[2] Y sudo bash N Y[2] Y sudo su Y N[1] Y [1] PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games (probably set by /etc/environment) [2] PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
这个问题没有什么关系之间的差异sudo
和su
。
手册页cmp
内容如下:
cmp 实用程序比较任何类型的两个文件并将结果写入标准输出。默认情况下,如果文件相同, cmp 是静默的;如果它们不同,则报告出现第一个不同的字节和行号。
所以没有输出意味着两个文件是一样的。