权限:更改身份(su&sudo)(070905)

徘徊边缘 提交于 2020-12-10 14:14:07

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 查看)

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!