1、sudo 介绍
sudo 即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。
在最早之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。sudo于1980年前后推出,sudo使一般用户不需要知道超级用户的密码即可获得
权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信
息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。
由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如Ubuntu、Mac OS X等。
sudo特性
- sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
- sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
- sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
- sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440
2、sudo 组成
- 包
- sudo
- 配置文件
- /etc/sudo.conf
- 授权规则配置文件
- /etc/sudoers
- /etc/sudoers.d
- 安全编辑授权规则文件和语法检查工具
- /usr/sbin/visudo
- 授权编辑规则文件的工具
- /usr/bin/sudoedit
- 执行授权命令
- /usr/bin/sudo
- 时间戳文件
- /var/db/sudo
- 日志文件
- /var/log/secure
#检查语法
visudo -c
#检查指定配置文件语法
visudo -f /etc/sudoers.d/test
3、sudo 命令
ls -l /usr/bin/sudo
sudo -i -u test 切换身份功能和 su 相似,但不一样,sudo必须提前授权,
而且要输入自已的密码
sudo [-u user] COMMAND
-V 显示版本信息等配置信息
-u user 默认为root
-l,ll 列出用户在主机上可用的和被禁止的命令
-v 再延长密码有效期限5分钟,更新时间戳
-k 清除时间戳(1970-01-01),下次需要重新输密码
-K 与-k类似,还要删除时间戳文件
-b 在后台执行指令
-p 改变询问密码的提示符号
示例:-p "password on %h for user %p: "
4、sudo 授权规则配置
# 配置文件格式说明:/etc/sudoers, /etc/sudoers.d/
# 配置文件中支持使用通配符 glob
? 任意单一字符
* 匹配任意长度字符
[wxc] 匹配其中一个字符
[!wxc] 除了这三个字符的其它字符
\x 转义
[[alpha]] 字母
- 配置文件规则有两类
- 别名定义:不是必须的
- 授权规则:必须的
# sudoers 授权规则格式
用户 登入主机=(代表用户) 命令
user host=(runas) command
# 范例
root ALL=(ALL) ALL
# 格式
user: 运行命令者的身份
host: 通过哪些主机
(runas):以哪个用户的身份
command: 运行哪些命令
- sudoers的别名
- User和runas:
- username
- #uid
- %group_name
- %#gid
- user_alias|runas_alias
- host:
- ip或hostname
- network(/netmask)
- host_alias
- command:
- command name
- directory
- sudoedit
- Cmnd_Alias
- User和runas:
- sudo别名有四种类型:
- User_Alias
- Runas_Alias
- Host_Alias
- Cmnd_Alias
# 别名格式
[A-Z]([A-Z][0-9]_)*
# 别名定义
Alias_Type NAME1 = item1,item2,item3 : NAME2 = item4, item5
# 范例
Student ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
# 范例
student ALL=(root) /sbin/pidof,/sbin/ifconfig
%wheel ALL=(ALL) NOPASSWD: ALL
# 范例
User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip,/usr/sbin/ifconfig
NETADMIN ALL=(root) NETCMD
# 范例
User_Alias SYSADER=test1,test2,%admins
User_Alias DISKADER=test3
Host_Alias SERS=www.test.com,192.168.1.0/24
Runas_Alias OP=root
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
SYSADER SERS= SYDCMD,DSKCMD
DISKADER ALL=(OP) DSKCMD
# 范例
User_Alias ADMINUSER = adminuser1,adminuser2
Cmnd_Alias ADMINCMD = /usr/sbin/useradd,/usr/sbin/usermod, /usr/bin/passwd [azA-Z]*, !/usr/bin/passwd root
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel
# 范例
Defaults:test runas_default=tom
test ALL=(tom,jerry) ALL
test$ sudo cmd #默认代表tom执行cmd
test$ sudo -u jerry cmd
# 范例
test 192.168.1.6,192.168.1.8=(root) /usr/sbin/,!/usr/sbin/useradd
# 范例
[root@centos8 ~]#vim /etc/sudoers.d/test
test ALL=(ALL) sudoedit
# test 可以执行下面命令
sudoedit /etc/sudoers
sudoedit /etc/sudoers.d/test
# 修改验证密码间隔为2分钟
vim /etc/sudoers
Defaults env_reset , timestamp_timeout=2
sudo -V
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END