sudo提权的使用

简介:

Sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样会减少了root用户的登录和管理时间,不过Sudo不是对shell的一个代替,它是面向每个命令的

一、sudo命令语法

sudo [-bhHpV] [-s ] [-u <用户>] [指令]

sudo [-klv]

参数

-b 在后台执行指令。
 -h 显示帮助。
 -H 将HOME环境变量设为新身份的HOME环境变量。
 -k 结束密码的有效期限,也就是下次再执行sudo时便需要输入密码。
 -l 列出目前用户可执行与无法执行的指令。
 -p 改变询问密码的提示符号。
 -s 执行指定的shell。
 -u <用户> 以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份。
 -v 延长密码有效期限5分钟。
 -V 显示版本信息。
 -S 从标准输入流替代终端来获取密码

二、sudo程序相关文件

/etc/sudoers
/etc/init.d/sudo
/etc/pam.d/sudo
/var/lib/sudo
/usr/share/doc/sudo
/usr/share/lintian/overrides/sudo
/usr/share/bash-completion/completions/sudo
/usr/bin/sudo
/usr/lib/sudo

三、基本配置

系统默认创建了一个名为 wheel 的组。只要把用户加入这个组,用户就具有了 sudo 的权限。
至于如何把用户加入 wheel 组,您可以直接编辑 /etc/group 文件,当然您得使用一个有 sudo 权限的用户来干这件事:


或者您可以使用 usermod 命令把用户添加到一个组中:

sudo usermod -a -G wheel yanghaoyu

上面的设置中我们把用户 yanghaoyu 添加到了 wheel 组中,所以当用户 yanghaoyu 登录后就可以通过 sudo 命令以 root 权限执行命令了

四、详细配置

sudo 命令的配置文件为 /etc/sudoers。(注意,/etc/sudoers 的配置内容十分丰富,我们仅做简单的介绍。要了解更多信息,请参考 man sudoers。)

编辑这个文件是有单独的命令的 visudo(这个文件我们最好不要使用 vim 命令来打开),是因为一旦你的语法写错会造成严重的后果,这个工具会替你检查你写的语法,这个文件的语法遵循以下格式:

who where whom command

说白了就是哪个用户在哪个主机以谁的身份执行那些命令,那么这个 where, 是指允许在那台主机 ssh 连接进来才能执行后面的命令,文件里面默认给 root 用户定义了一条规则:

root    ALL=(ALL:ALL)       ALL

root    表示 root 用户。
ALL     表示从任何的主机上都可以执行,也可以这样 192.168.100.0/24。
(ALL:ALL)   是以谁的身份来执行,ALL:ALL 就代表 root 可以任何人的身份来执行命令。
ALL     表示任何命令。
那么整条规则就是 root 用户可以在任何主机以任何人的身份来执行所有的命令。

现在我们可以回答 yanghaoyu 为什么具有通过 root 权限执行命令的能力了。打开 /etc/sudoers 文件:

wheel 组中的所有用户都具有通过 root 权限执行命令的能力!

再看个例子:

nick   192.168.10.0/24=(root) /usr/sbin/useradd

上面的配置只允许 nick 在 192.168.10.0/24 网段上连接主机并且以 root 权限执行 useradd 命令。

设置 sudo 时不需要输入密码

执行 sudo 命令时总是需要输入密码事件很不爽的事情(抛开安全性)。有些应用场景也需要在执行 sudo 时避开输入密码的交互过程。
那么需要如何设置呢?其实很简单,只需要在配置行中添加 NOPASSWD: 就可以了:

user    ALL=(ALL) NOPASSWD: ALL

sudo 的日志

在 ubuntu 中,sudo 的日志默认被记录在 /var/log/audit/auth.log 文件中。当我们执行 sudo 命令时,相关日志都是会被记录下来的。比如下图中显示的就是一次执行 sudo 命令的日志:

linux sudo linux sudo提权_系统管理员