对运维人员来说,Linux 系统中有一个很重要的命令 —— sudo!可能你早就已经猜到了,它的字面意思是“超级用户才能做!”(super user do!),可以说 sudo 在 Linux 中是一个统管一切的命令。相信很多 Linux 用户都曾有过这样的经历:在终端中试着运行某个命令,结果却遇到“拒绝访问”T_T … 那么,很多时候,sudo 就是你所需要的命令!

Linux 系统不是已经有 root 用户吗?直接登录或切换(su “switch user”)成 root 不行吗?为什么还需要 sudo 命令?没错,我们直接登录 root 用户当然没问题,但正所谓“权力越大,责任也越大!”,相对而言,使用 sudo 更加合理、安全。

那这个 sudo 实际能做些什么呢?如果你在任何Linux命令的前面加上“sudo”这个前缀,那么它会以提升的权限来运行该命令。一般来说,普通用户要执行系统的服务或管理任务,以及修改配置文件等操作都需要提升的权限,比如配置、重启 LAMP(Linux Apache MySQL PHP)服务器。

其实在 Windows 中也有类似的功能,下面这个对话框是不是很熟悉?当你试图处理任何重要操作时,Windows 就会弹出用户帐户控制(ACL)对话框,在对话框中会问你是否想继续执行(你真的要运行刚才点击的这个程序吗?),点击“是”随后执行该任务。

这里写图片描述

像 Windows 的这种询问式操作是比较友好的,而 Linux 在这方面就显得更有戏剧性。要是没有适当的权限,一些操作会显得相当怪异。比如:正在编辑的那个重要的配置文件就会无法保存,刚刚安装的那个程序被拒绝运行,源代码编译不了等等。这时候,你要做的就是请求权限

举个栗子:

[rudy@ ~]$ reboot
reboot: must be superuser
[rudy@ ~]$ sudo reboot
[sudo] password for rudy:

Broadcast message from root (pts/0) (Fri Aug 4 18:55:46 2017)

The system is going down for reboot NOW!

我们使用 reboot 命令重启系统,第一次提示“必须是超级用户”,所以我们需要使用 sudo 请求超级用户权限。sudo要求你提供用户密码。请注意:它要求 你提供的是你的密码,而不是根密码。最后,我们看到表明现在将重启系统的广播信息。sudo 就像是个神奇的命令,会发出神奇的指令。

这里写图片描述

Suderos 文件可谓是 sudo 的基础。它控制着谁可以使用 sudo 命令来获得提升的权限。它通常位于/etc/sudoers。想编辑这个文件,最有效最 安全的方式就是,使用visudo命令。这个命令会以提升权限启动vi编辑器,那样你就能编辑并保存该文件。它还会给sudoers文件上文件锁,那样别 人无法编辑该文件。一旦你完成了编辑工作,它会分析文件,查找有无简单的错误。编辑sudo文件要比仅仅使用任何旧的文本编辑器来得安全得多。

该文件含有许多参数。你可以指定哪些用户或哪些用户助可以执行哪些命令。我们准备为自己授予访问sudo的权限,为此只要在底部添加:

username ALL=(ALL) ALL # 为用户"username"授予sudo访问权
%wheel ALL=(ALL) ALL   #为属于wheel用户组的所有用户授予sudo访问权

现在指定的用户名就能够使用所有根权限了。你还可以允许某个用户或用户组只对特定服务或服务器拥有sudo访问权,以取代ALL参数,不过那是另一个话题了。

几个选项

与任何优秀的命令一样,也有几个很棒的选项可以让sudo处理更多的事务。

  • sudo -b 会在后台运行命令。这对显示许多实时输出内容的命令来说很有用。
  • sudo -s 会运行以提升权限指定的外壳,为你提供#提示符(别忘了退出!)
  • sudo su - 会让你成为根用户,并装入你那些自定义的用户环境变量。

有没有现在就用它?

我们想要运行重要任务时,sudo提供了安全的提升权限。在Ubuntu用户当中,它也许是使用最广泛、功能最强大的命令,因为它已成为该发行版中的首选方法。既然你拥有了这么大的权利,那么在运行命令时务必要做到安全!世上可没有su-undo撤销命令!


Logo

更多推荐