su 切换用户
su - lisi1 #切换到普通用户 (一般不使用su lisi1的方式,这种方式不切换家目录,不读部分配置文件) su - #切换到root su - lisi1 -c "touch /app/lisifile1" #已lisi1身份执行命令(创建文件)
sudo 作为另一个用户执行命令
rpm -qi sudo #查看sudo按照包信息
rpm -ql sudo #查看sudo包文件清单
查看文档:man 5 sudoers 部分内容如下:
sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用sudo,会提示联系管理员
sudo可以提供日志,记录每个用户使用sudo操作
sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入 场券” (超时需重新输入密码)
主程序文件:/usr/bin/sudo
规则配置文件:/etc/sudoers (440只读文件)
通过visudo命令编辑该配置文件,一般不建议使用root强行写入,且visudo具有语法检查功能:
visudo –c #检查语法 /etc/sudoers: parsed OK visudo #编辑主配置文件/etc/sudoers #includedir /etc/sudoers.d) #配置文件最后有扩展子配置文件 visudo -f /etc/sudoers.d/mysudo #单独编辑指定的子配置文件mysudo
授权用户
格式说明: 用户 登入主机=(代表用户) 命令
user: 运行命令者的身份
host: 授权通过哪些主机执行
(runas):被授权以哪个用户的身份执行
command: 授权运行哪些命令 (执行命令需与授权写法完全一致)
centos6/7都默认生效的授权规则:
root ALL=(ALL) ALL
当想修改root的UID(0)取消其管理员身份时,root通过此处任可以执行所有操作。
示例:
授权lisi用户在192.168.31.7机器上拥有root的身份执行mount 将cdrom 挂载到 mnt上。
visudo #编辑配置文件 root ALL=(ALL) ALL lisi 192.168.31.7=(root) usr/bin/mount /dev/cdrom /mnt/ #授权规则写入配置文件,一般要写命令的绝对路径 su - wang sudo mount /dev/cdrom /mnt/ #执行命令,必须与配置文件中的一致
因/etc/sudoers此配置文件内容太多,且可能有其他人使用,所以此文件的最后提供了扩展子配置文件,如下:
#includedir /etc/sudoers.d (此处#不是注释),可在此目录下增加自己使用的子配置文件
cd /etc/sudoers.d/ vim lisi #新建子配置文件 lisi 192.168.31.7=(root) usr/bin/mount /dev/cdrom /mnt/ #写入配置文件,一般要写命令的绝对路径 chmod 440 wang #修改文件权限 visudo -c visudo -f /etc/sudoers.d/lisi #如检查有问题,也可用此命令单独编辑此子配置文件# su - lisi sudo mount /dev/cdrom /mnt/ #操作命令需要与配置文件中定义完全一致
visudo命令默认使用的是vi的编辑器,打开后内容没有颜色显示,可使用以下两种方式增加颜色
export EDITOR=vim #设置使用的默认编辑器为vim。只在当次有效 修改配置,一直有效 cd /etc/profile.d vim my.sh #新建自定义文件 #!/bin/bash export EDITOR=vim . my.sh #生效
当通过中间人授权执行命令时,需执行2次sudo命令
lisi1 ALL=(lisi2) ALL lisi2 ALL=(root) ALL su - lisi1 sudo -u lisi2 sudo cat /etc/shadow #lisi1被授权以lisi2的身份,lisi2被授权以root身份执行命令 免输入口令验证的方式:在配置文件命令前加上 NOPASSWD: lisi2 ALL=(root) NOPASSWD:ALL
授权组
授权组规则格式: %组名 登入主机=(代表用户) 命令
示例: %wheel ALL=(ALL) NOPASSWD: ALL (centos7默认授权wheel组,有安全隐患)
%wheel: 此组内的成员都可以获得运行命令者的身份
groupmems -a lisi1 -g lisia #用户lisi1加入lisia组中 %lisia ALL=(root) NOPASSWD: ALL
sudo其它配置文件
时间戳文件:/var/db/sudo
首次验证身份执行命令后会在此文件中生成时间戳文件,若当前时间超过时间戳5分钟,执行命令时会再次验证
日志文件:/var/log/secure
cat /var/log/secure |grep sudo #过滤sudo的操作
配置文件支持使用通配符glob:
?:任意单一字符 * :匹配任意长度字符 [wxc]:匹配其中一个字符 [!wxc]:除了这三个字符的其它字符 \x : 转义 [[alpha]] :字母 示例: /bin/ls [[alpha]]*
配置文件规则有两类; 1、别名定义:不是必须的 2、授权规则:必须的
别名
如果授权的用户或操作比较多或比较复杂,可以使用别名,
别名的写法:
Users和runas: 用户名和组名可以用UID来代替
username --- #uid (替代) %group_name --- %#gid (替代) user_alias|runas_alias (使用用户名别名)
host: (在哪些主机上操作)
ip或hostname network(/netmask) (192.168.31.0/16) host_alias #使用主机别名
command: (执行那些命令)
command name directory #可以执行此文件夹下的所有指令 sudoedit #授权可以编辑sudo配置文件/etc/sudoers.d/lisi。变相具有管理员权限 Cmnd_Alias #命令加别名
关于sudoedit的操作过程
lisi1 ALL=(root) sudoedit su - lisi1 sudoedit /etc/sudoers.d/lisi1 #此时lisi1可以编辑sudo的配置文件,变相具有管理员权限
别名的定义
别名有四种类型:User_Alias, Runas_Alias, Host_Alias ,Cmnd_Alias
别名格式:[A-Z]([A-Z][0-9]_)* #不能有小写字母
别名定义: Alias_Type NAME1 = item1, item2, item3 : NAME2 = item4, item5 (同一类型下可以定义多个别名用冒号分开)
例:User_Alias admin=lisi1,lisi2:opt=lisi1,lisi3,lisi4
示例1:
Student ALL=(ALL) ALL #授权Student在所有主机上代表所有人执行任何操作 %wheel ALL=(ALL) ALL #授权%wheel组成员在所有主机上代表所有人执行任何操作
示例2:
student ALL=(root) /sbin/pidof,/sbin/ifconfig #授权student在所有主机上代表root执行pidof与ifconfig命令 %wheel ALL=(ALL) NOPASSWD: ALL #授权%wheel组成员在所有主机上代表所有人执行所有命令,且不用验证密码 User_Alias NETADMIN= lisi1,lisi2 #定义授权用户的别名 Cmnd_Alias NETCMD = /usr/sbin/ip #定义授权命令的别名 NETADMIN ALL=(root) NETCMD #授权别名内的用户(lisi1,lisi2)在所有主机上代表root执行命令别名内的命令(ip命令)
示例4
User_Alias SYSADER=lisi1,lisi2,%lisia (定义用户别名,可以将组加入到用户别名的清单中) User_Alias DISKADER=tom (定义别名为单一用户) Host_Alias SERS=www.hliang.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 (授权用户别名成员在别名主机上代表root(不写默认root)执行命令别名的命令) DISKADER ALL=(OP) DSKCMD (同上)
示例5
User_Alias ADMINUSER = lisi1,lisi2 Cmnd_Alias ADMINCMD = /usr/sbin/useradd,/usr/sbin/usermod, /usr/bin/passwd [a-zA-Z]*, !/usr/bin/passwd root 命令别名定义:ADMINCMD=增加用户命令;修改用户账户命令;修改任意用户密码,不包含修改root密码 ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel 别名内用户在所有主机代表root执行别名命令内的命令及userdel。别名内的命令不需输入密码,userdel命令需要输入密码
示例6
代表用户不止一个时,若代表tom次数较多时,可将tom设置成默认,执行命令时可以不加:-u tom
Defaults:lisi1 runas_default=tom #当lisi1代表多人时,设置lisi1默认代表tom lisi1 ALL=(tom,jerry) ALL #lisi1代表不止一人 sudo passwd hliang #不加-u,默认代表tom执行命令 sudo -u jerry passwd hliang #代表jerry执行命令需加-u
示例7
lisi1 192.168.1.6,192.168.1.8=(root) /usr/sbin/,!/usr/sbin/useradd #可执行/usr/sbin目录下的所有命令,除了/usr/sbin/useradd命令
示例8
lisi1 ALL=(ALL) /bin/cat /var/log/messages* (此种用*的方法不正确,有安全隐患)
注意:此处除了可以查看messages,还可查看其它文件如;/etc/shadow,有安全隐患
sudo cat /var/log/message /etc/shadow /etc/sudoers
解决方式:
lisi1 ALL=(ALL) /bin/cat /var/log/messages*, !/bin/cat /var/log/messages* *
sudo命令
ls -l /usr/bin/sudo
sudo –i –u lisi1 切换身份 (切换时输入自己的口令,一般使用su切换身份)
sudo [-u user] COMMAND
-V 显示版本信息等配置信息,root执行时显示详细信息,普通用户只显示部分版本信息
-u user 指定代表的用户,不写默认为root
sudo -u lisi1 cat /etc/passwd
-l,ll 列出用户在主机上可用的和被禁止的命令 (查看当前用户被授权的信息)
su - lisi1 sudo -l (sudo -ll) 两种显示的格式不同
-v 再延长密码有效期限5分钟,更新时间戳 (被授权用户直接操作 sudo -v)
su - lisi1 sudo -v
-k 清除时间戳(1970-01-01),下次需要重新输密码
-K 删除时间戳文件 ,与-k效果类似,需要重新输密码
-b 在后台执行指令
-p 改变询问密码的提示符号 示例:(编辑密码提示符的显示格式)
sudo -p "password on %h for user %p:" (man sudoers /%p 查看)
来源:oschina
链接:https://my.oschina.net/u/4844418/blog/4785099