sudo
来自sudo包
man 5 sudoers
sudo能够授权指定用户在指定主机上运行某些命令,如果未授权用户用尝试使用 sudo ,会提示联系管理员。
sudo可以提供日志,记录每个用户使用sudo 操作
sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
sudo使用时间戳文件来完成类似“检票”的 系统,默认存活期为5分钟的 “入场券”
通过visudo 命令编辑配置文件,具有语法检查功能
visudo –c 检查语法
配置文件:
/etc/sudoers, /etc/sudoers.d/
时间戳文件:
/var/db/sudo
日志文件:
/var/log/secure
配置文件支持使用通配符glob:
?: 任意单一字符
* : 匹配任意长度字符
[wxc]: 匹配其中一个字符
[!wxc]: 除了这三个字符的其它字符
\x : 转义
[[alpha]] : 字母,示例: /bin/ls [[alpha]]*
配置文件规则有两类:
1 、别名定义: 不是必须的
2 、授权规则: 必须的
sudoers
授权规则格式:
用户 登入的主机=( 代表用户) 命令
user host=(runas)command
示例:
root ALL=(ALL) ALL
格式说明:
user: 运行命令者的身份
host: 通过哪些主机
(runas) :以哪个用户的身份
command: 运行哪些命令
别名
Users 和runas:
username
#uid
%group_name
%#gid
user_alias|runas_alias
host:
ip 或hostname
network(/netmask)
host_alias
command:
command name
directory
sudoedit
Cmnd_Alias
sudo 别名
别名有四种类型:User_Alias, Runas_Alias, Host_Alias,Cmnd_Alias
别名格式:[A-Z]([A-Z][0-9]_)*
别名定义:
Alias_Type NAME1 = item1, item2, item3 : NAME2 =item4, item5
示例
示例1:
Student ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
示例2:
student ALL=(root) /sbin/pidof,/sbin/ifconfig
%wheel ALL=(ALL) NOPASSWD: ALL
示例3
User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip
NETADMIN ALL= (root)NETCMD
示例4
User_Alias SYSADER=wang,mage,%admins
User_Alias DISKADER=tom
Host_Alias SERS=www.magedu.com,172.16.0.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
示例5
User_Alias ADMINUSER = adminuser1,adminuser2
Cmnd_Alias ADMINCMD = /usr/sbin/useradd,/usr/sbin/usermod, /usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel
示例6
Defaults:wang runas_default=tom
wang ALL=(tom,jerry) ALL
示例7
wang 192.168.175.136,192.168.175.138=(root)
/usr/sbin/,!/usr/sbin/useradd
示例8
wang ALL=(ALL) /bin/cat /var/log/messages*
visudo命令
visudo - safely edit the sudoers file
visudo [-chqsV] [-f sudoers] [-x output_file]
Options:
-c, --check 仅检查模式
-f, --file=sudoers 指定的sudoers文件定位
-h, --help 帮助信息
-q, --quiet 少量语法错误信息
-s, --strict 严格语法检查
-V, --version 显示版本信息
-x, --export=output_file 采用JSON格式写sudoers到指定输出文件
sudo 命令
ls -l /usr/bin/sudo
sudo –i –u wang 切换身份
sudo - execute a command as another user
sudo -h | -K | -k | -V
sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-u user] [VAR=value] [-i|-s] [<command>]
sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-u user] file
Options:
-A, --askpass 为密码提示使用帮助项目
-b, --background 在后台运行命令
-C, --close-from=num 关闭所有文件描述符 >= num
-E, --preserve-env 当运行命令时保护用户环境
-e, --edit 编辑文件来取代运行的命令
-g, --group=group 以指定的组名或组id来运行命令
-H, --set-home 给目标用户的家目录设置HOME 变量
-h, --help 显示帮助
-h, --host=host 在主机上运行命令 (if supported by plugin)
-i, --login 使用目标用户运行登陆shell环境,也可指定运行命令
-K, --remove-timestamp 完全移除时间戳文件
-k, --reset-timestamp 使时间戳文件失效
-l, --list 列出用户的特权或检查指定的命令
-n, --non-interactive non-interactive 模式, 不使用提示
-P, --preserve-groups 保存组本身的取代设置给目标的
-p, --prompt=prompt 使用指定的密码提示
-r, --role=role 使用指定的角色来创建SELinux指定的安全上下文内容
-S, --stdin 从标准输入中读取命令
-s, --shell 使用指定的用户运行shell环境,同时可以指定命令
-t, --type=type 使用指定的类型创建 SELinux安全上下文
-U, --other-user=user 采用列表模式,显示用户的特权
-u, --user=user 以指定用户或id运行命令或编辑文件
-V, --version 显示版本信息
-v, --validate 在不运行命令的情况下,更新用户的时间戳
-- 停止处理命令行参数
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:"