sudo详解
目录
前言
1、原理
二、命令
三、sudo配置
1、配置文件
2、时间戳文件
3、日志文件
4、配置文件支持使用通配符glob
5、配置文件规则有两类
6、授权规则
1)授权格式
2)格式说明
7、sudo别名
1)别名有四种类型
2)别名格式
前言
Sudo(substitute user [或 superuser] do),是一种程序,用于类Unix操作系统如BSD,Mac OS X,以及GNU/Linux以允许用户
通过安全的方式使用特殊的权限运行程序(通常为系统的超级用户)。
对linux有一定了解的人多少也会知道点关于sudo命令。sudo命令核心思想是权限的赋予 ,即某个命令的所属用户不是你自己,而你
却有权限执行它。但是我们需要注意的是,虽然你有权限执行这个命令,但是在执行的时候却仍是以这个命令本身所属用户来完成的[注释
1]。(su命令类似sudo命令,但是两者的差别在于前者su是一个粗粒度权限赋予,对su最好的理解我觉得是change user running
command permanent。即永久的切换到了su过去的用户,然后以这个su到的新用户干它能干的一切事情,而sudo则是指在执行某个命令
的时候临时切换到这个命令的所属用户执行[注释1],而且sudo可以做到以单个命令为单位将权限赋予给其他用户,相比su显得更加灵活。)
1、原理
在sudo于1980年前后被写出之前[2],一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。
sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”)[3];在一般用户需要获取特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟[4],可在/etc/sudoers自定义),使用sudo不需要再次输入密码。
由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户替换超级用户作为管理账号,例如Ubuntu、Mac OS X等。
二、命令
语法
sudo [-bhHpV][-s ][-u <用户>][指令]
或sudo [-klv]
参数
-a type 使用指定的 BSD 认证类型
-b 在后台运行命令
-C fd 关闭所有 >= fd 的文件描述符
-E 在执行命令时保留用户环境
-e 编辑文件而非执行命令
-g group 以指定的用户组执行命令
-H 将 HOME 变量设为目标用户的主目录。
-h 显示帮助消息并退出
-i [command] 以目标用户身份运行一个登录 shell
-K 完全移除时间戳文件
-k 无效的时间戳文件
-l[l] command 列出用户能执行的命令
-n 非交互模式,将不提示用户
-P 保留组向量,而非设置为目标的组向量
-p prompt 使用指定的密码提示
-S 从标准输入读取密码
-s [command] 以目标用户身份运行 shell
-U user 在列表时,列出指定用户的权限
-u user 以指定用户身份运行命令(或编辑文件)
-V 显示版本信息并退出
-v 更新用户的时间戳而不执行命令
-- 停止处理命令行参数
三、sudo配置
1、配置文件
/ect/sudoers
下文的中授权或别名写入该文件即可
执行visudo命令可编写
/ect/sudoers.d/
可在该目录下自定义文件并将授权或别名写入。
2、时间戳文件
/va/db/sudo
3、日志文件
/var/log/secure
4、配置文件支持使用通配符glob:
?:任意单一字符
*:匹配任意长度字符
[wxc]:匹配其中一个字符
[!wxc]:除了这三个字符的其它字符
\x :转义
`alpha` :字母 示例 /bin/ls `alpha`*
5、配置文件规则有两类
1、别名定义:不需必须的
2、授权规则:必须的。
6、授权规则
1)授权格式
用户 登入主机=(代表用户) 命令
示例 :
root ALL=(ALL) ALL
wang ALL=(ALL) /bin/mount /dev/sr1 /mnt/dvd2
#意思是任何主机可以登录用户wang并代表所有用户利用所有的权限执行mount命令将/dev/sr1 挂载到/mnt/dvd2
授权用户 主机=[(切换到哪些用户或用户组)] [是否需要密码验证] 命令1,[(切换到哪些用户或用户组)] [是否需要密码验证] [命令
2],[(切换到哪些用户或用户组)] [是否需要密码验证] [命令3]......
%wheel ALL=(ALL) NOPASSWD: ALL
#这里的NOPASSWD 代表无需密码验证。
2)格式说明:
user :运行命令者的身份
host:通过那些主机
(runas):以那个用户的身份
Command :运行那些命令
User和runas
username
#uid
%group_name
%#gid
User_aliasrunas_ailas
Host:
Ip或hostname
netwoek(/netmask)
host_alias
command:
command name
directory
sudoedit
Cmnd_Alias
7、sudo别名
别名:(这里的别名可以理解为定义的组)
1)别名有四种类型:
User_Alias #用户别名 别名成员可以是用户,用户组(前面要加%号)
Runas_Alias #用来定义runas别名,指定的是“目的用户”,即sudo 允许切换至的用户;
Host_Alias #which host 那些主机上
Cmnd_Alias # command执行那些命令
2)别名格式
别名必须命名是包含大写字母、下划线以及数字,但必须以一个大写字母开头[A_Z]([A_Z][0-9]_)*
示例: User_Alias NAME = wang,alice
Cmnd_Alias DISKMAG=/sbin/fdisk,/sbin/parted
Cmnd_Alias NETMAG=/sbin/ifconfig,/etc/init.d/network
Runas_Alias OP = root, operator
Host_Alias HT01=localhost,st05,st04,10,0,0,4,255.255.255.0,192.168.1.0/24
Cmnd_Alias ADMINCMD = /usr/sbin/useradd
Cmnd_Alias CMD=/usr/sbin/usermod, /usr/bin/passwd [a-zA-Z]*
Cmnd_Alias CMD1=!/usr/bin/passwd root #!意思代表取反