sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,shutdown、init等等。这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性。sudo是对Shell的一个代替,它是面向每个命令的。
它的特性主要有这样几点:
① sudo能够限制用户只在某台主机上运行某些命令。
② sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
③ sudo使用时间戳文件——日志来执行类似的“检票”系统。当用户调用sudo并且输入他的密码时,用户获得了一张存活期为5分钟的票(这个值可以在/etc/sudoers设置)。
④ sudo的配置文件是/etc/sudores,属性必须为0440,它允许系统管理员集中地管理用户的使用权限和使用主机。
选 项 | 作 用 |
---|---|
-V | 显示版本编号 |
-h | 显示版本编号及指令的使用方式说明 |
-l | 显示出自己(执行 sudo 的使用者)的权限 |
-v | 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码 |
-k | 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟) |
-b | 将要执行的指令放在背景执行 |
-p prompt | 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称 |
-u username/#uid | 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码) |
-s | 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell |
-H | 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root ) |
command | 要以系统管理者身份(或以 -u 更改为其他人)执行的指令 |
[tom@localhost ~]$ sudo -V
Sudo 版本 1.8.23
Sudoers 策略插件版本 1.8.23
Sudoers 文件语法版本 46
Sudoers I/O plugin version 1.8.23
② 列出当前用户权限
[tom@localhost /]$ sudo -l
匹配 %2$s 上 %1$s 的默认条目:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS
DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS
LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 tom 可以在 localhost 上运行以下命令:
(root) /sbin/useradd
③ 以root身份使用useradd命令创建cat用户
[tom@localhost /]$ sudo -u root useradd cat
3、如何编辑配置文件呢?
编辑sudo的配置文件/etc/sudoers一般不直接使用vi(vi /etc/sudoers)去编辑,因为sudoers配置有一定的语法,直接用vi编辑保存系统不会检查语法,如果有错也会保存从而导致sudo工具无法使用,最好使用visudo
命令去配置。虽然visudo也是调用vi去编辑,但是保存时会进行语法检查,有错误会给出提示。
接下来,我们以一个栗子来教会大家该如何配置:
//创建tom用户,并为其创建密码
[root@localhost ~]# useradd tom
[root@localhost ~]# echo "123456" | passwd --stdin tom
更改用户 tom 的密码 。
passwd:所有的身份验证令牌已经成功更新。
//使用visudo打开配置文件
[root@localhost ~]# visudo
//文件中字段很多,我们需要做更改的地方在这里
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
...
//root 表示用户名,如果是用户组,可以写成"%group_name"
//第一个ALL:代表可以执行sudo命令的主机(ALL表示任何主机)
//第二个ALL:代表可以执行sudo命令的时候以哪个用户的身份执行(ALL表示root用户)
//第三个ALL:代表可以sudo可以执行的命令,多个命令可以用","分隔(ALL表示所有命令)
//为tom用户添加在任何主机上以root用户身份使用useradd命令的权限
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
tom ALL=(root) /sbin/useradd //可以使用 which 命令查看命令的二进制可执行文件位置
[root@localhost ~]# su - tom //切换到tom用户
[tom@localhost ~]$ sudo -l //查看tom用户拥有的特殊权限
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] tom 的密码:
匹配 %2$s 上 %1$s 的默认条目:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 tom 可以在 localhost 上运行以下命令:
`(root) /sbin/useradd` //这里说明我们以及添加成功了
[tom@localhost ~]$ sudo useradd jerry //我们以添加一个jerry用户为例作为测试
[tom@localhost ~]$ tail -1 /etc/passwd //验证/etc/passwd文件是否添加成功
jerry:x:4003:4003::/home/jerry:/bin/bash
[root@localhost ~]# tail /var/log/secure //查看安全日志
Mar 10 22:12:25 localhost sudo: tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ; COMMAND=/sbin/user add jerry //使用tom用户以root身份使用useradd命令创建jerry用户的记录