su命令:switch user
用户切换:两种,登录式和非登录式
(1)登录式切换:su - user
,su -l user
(2)非登录式切换:su user -c 'COMMAND'
查看帮助文档:man sudo
sudo命令:类似于以管理员身份运行
以另外一个用户身份执行指定的命令
授权机制:通过sudo的授权文件实现,/etc/sudoers
查看帮助文档:man sudoers
授权文件有两类内容:
- 别名的定义,即为变量;
- 授权项,可使用别名进行授权,要先定义别名;
授权项(每一行一个授权项)格式:
who where=(runas) commands
user hosts=(runas) commands
谁 通过哪些主机=(以谁的身份) 运行什么命令
查看帮助文档:man visudo
使用visudo编辑/etc/sudoers文件,直接输入visudo命令
注意:用户通过sudo获得的授权,只能以sudo命令来启动;wheel组拥有管理员权限;
sudo命令用法
格式:sudo [options] COMMAND
-u username:以指定用户的身份运行命令;
-l:列出用户能以sudo方式执行的所有命令;
-k:清除(密码)此前缓存用户成功认证的结果;
useradd centos
sudo -u centos whoami 管理员可以任何身份运行任何命令
usermod -aG wheel centos 把用户vuser加入wheel组拥有管理员权限;
echo centos |passwd --stdin centos
id centos
su - centos
[fedora@promote ~]$ sudo -l 输入centos用户的密码才能显示;
(ALL) ALL 表示拥有所有权限;
[fedora@promote ~]$ sudo -u root whoami
显示:root
[fedora@promote ~]$ sudo -u root useradd fedora 以root身份添加用户;
[fedora@promote ~]$ tail /etc/passwd
who:用户
username:单个用户;
#uid:单个用户的ID号;
%groupname:组内的所有用户;
%#gid:组内的所有用户;
user_alias:用户别名;
where:主机地址
ip或hostname:单个主机;
NetAddr:网络地址;支持多种表示格式;
host_alias:主机别名;
whom(ranas):以指定用户身份运行
username:单个用户;
#uid:单个用户的ID号;
runas_alias:以指定用户身份运行;
commands:命令
command:单个命令;
directory:指定目录内的所有应用程序;
sudoedit:特殊权限,可编辑sudoers文件,可用于向其它用户授予sudo权限;
示例:fedora ALL=(root) /usr/sbin/useradd, /usr/sbin/usermod
例如:
[root@promote ~]# echo fedora |passwd --stdin fedora
[root@promote ~]# which useradd
[root@promote ~]# which usermod
[root@promote ~]# visudo 表示编辑/etc/sudoers文件;
(可以使用单个文件放在/etc/sudoers.d目录下)
fedora ALL=(root) /usr/sbin/useradd, /usr/sbin/usermod
注释:
fedora:定义的用户
ALL=(root):指定用户,不写表示所有用户;
/usr/sbin/useradd, /usr/sbin/usermod 可运行的命令;
[fedora@promote ~]# su - fedora 登录fedora用户;
[fedora@promote ~]$ sudo -l 列出权限;
[fedora@promote ~]$ sudo /usr/sbin/useradd slackware
[fedora@promote ~]$ tail -1 /etc/passwd
[fedora@promote ~]$ sudo -userdel -r slackware 但不能执行此命令;
定义别名的方法
ALIAS_TYPE NAME=item1,item2,...
ALIAS_TYPE:4种,注意书写格式大小写;
User_Alias:用户别名
Host_Alias:很少用,不做说明;
Runas_Alias:很少用,不做说明;
Cmnd_Alias:命令别名
NAME:别名的名称字符,必须使用全大写字母;
例如:
User_Alias USERADMINS=tom,jerry
Cmnd_Alias USERADMINCMNDS=/usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd
USERADMINS ALL=(root) USERADMINCMNDS
示例:
Cmnd_Alias USERADMINCMNDS=/usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd [a-z]*,!/usr/bin/passwd root, /usr/sbin/userdel
注意:Cmnd_Alias授权非常有风险的命名时,如passwd命令,一定要谨慎;
例如:
[root@promote ~]# visudo
User_Alias USERADMINS=tom, jerry
Cmnd_Alias USERADMINCMNDS=/usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd, /usr/sbin/userdel
USERADMINS ALL=(root) USERADMINCMNDS
[root@promote ~]# su - tom
[fedora@promote ~]$ sudo -l 第一次要输入密码;查看用户拥有的权限;密码保存5分钟;
[fedora@promote ~]$ useradd user1 不能执行;要以sudo运行命令;
[fedora@promote ~]$ sudo useradd user1 添加用户;
[fedora@promote ~]$ tail -1 /etc/passwd 添加成功;
[fedora@promote ~]$ sudo passwd user1 改密码;授权管理员后也可改管理员密码,是授权的漏洞;要定义不能接root字符串;
[root@promote ~]# visudo
修改其中的Cmnd_Alias指令:禁止修改管理员密码;
Cmnd_Alias USERADMINCMNDS=/usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd [a-z]*,!/usr/bin/passwd root, /usr/sbin/userdel
验证:
[fedora@promote ~]$ sudo -l
[fedora@promote ~]$ sudo passwd root 显示不允许运行;
例如:
普通用户要su - root,如果root用户没有密码,就不能切换root用户;
[fedora@promote ~]$ su - root
但是,授权这个用户能够以sudo的方式运行任何命令:
[fedora@promote ~]$ sudo su - root
表示以管理员身份切换管理员;此时只需要当前用户的密码即可运行管理员命令;
这就是为什么普通用户不需要切换管理员身份,仍然能用root身份运行命令;
在安装系统时,不设管理员密码,但是可以把第一个用户授权以管理员身份运行命令;想用管理员时直接用sudo su -
例如:centos用户就授权以管理员身份运行;
[root@promote ~ ]# su - centos
[fedora@promote ~ ]$ sudo su - 要求输入centos密码;
授权任何用户,这个用户就可以以任何用户的身份,运行任何命令;这又是个安全漏洞;
将来在工作中,尽量以普通用户身份直接登录,但是授权这个普通用户的身份以管理员登录即可;使用sudo就能执行所有命令;
使用sudo会记录了日志中;
常用命令标签
NOPASSWD:无需密码执行命令;
PASSWD:需要密码执行命令;
标签之后的所有命令都是生效的;
示例:
fedora ALL=(root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod, PASSWD: /usr/sbin/userdel
注意:在授权需特别谨慎是命令时,要使用sudo方式执行命令需要密码,不但包含passwd命令需要密码,还有包含su命令;
如果能以管理员身份运行su命令,就相当于su到管理员不需要密码;
例如:
[root@promote ~]# su - fedora
[fedora@promote ~]$ sudo -l 使用sudo命令第一次要输入密码;
可以授权sudo命令中,某个命令执行时不需要密码
[root@promote ~]# visudo 使用NOPASSWD标签,表示后面的所有命令都无需密码就可以执行;
fedora ALL=(root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod, PASSWD: /usr/sbin/userdel
[root@promote ~]# su - fedora
[fedora@promote ~]$ sudo -l 无需密码即可执行;
注意:NOPASSWD标签后的所有命令都无需密码,所以要把NOPASSWD标签写在无需密码的的命令后面;
如果能以管理员身份运行su命令,就相当于su到管理员不需要密码;
例如:fedora能以管理员身份运行su命令,这个用户就相当于管理员了
[root@promote ~]# visudo
fedora ALL=(root) /usr/bin/su
[root@promote ~]]# su - fedora
[fedora@promote ~]$ sudo -l 输入密码
查看结果:
(root) /usr/bin/su
[fedora@promote ~]$ sudo su -
此时,普通用户fedora,就以管理员身份登录系统了;所以把用户加入wheel组之前,要慎重考虑;
网友评论