用户基本操作(三)
用户身份切换
如何在普通用户的情况下,完成日常工作?
1)su
切换用户,使用普通用户登录,然后使用su命令切换到root。
优点:简单,方便
缺点:需要知道root密码,不安全,切换到root没有日志审计功能
2)sudo
提权,当需要使用root权限时,进行提权,而无需切换至root用户。
优点:安全,方便
缺点:复杂
shell分类
交互式shell //等待用户输入执行的命令(终端操作,需要不断提示)
非交互式shell //执行shell脚本, 脚本执行结束后shell自动退出
登陆shell //需要输入用户名和密码才能进入shell su - zls
非登陆shell //不需要输入用户和密码就能进入,比如执行sh, bash, su username
//查看登陆shell
[root@zls ~]# pstree
//临时设置,永久设置需要写配置文件
[root@zls ~]# export PS1='[\h@\u \t]#'
[zls@root 02:06:28]
bash shell配置文件
Bash的配置文件保存用户的工作环境
个人配置文件: ~/.bash_profile ~/.bashrc
全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc
profile类文件, 设定环境变量, 登陆前运行的脚本和命令
bashrc 类文件, 设定本地变量, 定义命令别名
全局配置和个人配置设置冲突, 优先使用个人配置准
shell配置文件应用顺序
//登录式shell配置文件执行顺序
/etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc
//非登陆式shell配置文件执行顺序
~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh
#验证登陆shell和非登陆shell配置文件执行顺序, 在每个配置文件加入一段 “echo”即可。
#最后通过登陆shell和非登录shell方式登陆linux, 即可验证执行顺序。
如果全局配置和个人配置出现冲突, 那么如何验证呢?
编辑全局配置 /etc/profile 新增一行: PS1='[\h@\u \t]#'
[zls@root 02:16:57]# //当前终端shell环境
编辑个人配置 ~/.bash_profile 新增一行: PS1='[\u@\H]#'
[zls@root 02:18:27]#su zls_zls
[zls_zls@zls root]$
[zls@root 02:18:34]# su - zls_zls
[zls_zls@zls.com]#
创建用户,并登录系统
[root@zls ~]# useradd zls
[root@zls ~]# echo "123"|passwd --stdin zls
//使用zls用户登录当前Linux系统
➜ ~ ssh zls@192.168.56.111
zls@192.168.56.111's password:
[zls@zls ~]$
//可以使用whoami查看当前登录用户
[zls@zls ~]$ whoami
zls
切换用户,使用命令su [-] username
su命令后面跟-
代表进入登陆式shell
如果su命令后不加-
代表进入非登陆式shell
,他们之间的区别在于加载的环境变量不一样。
注意:普通用户su -
代表直接切换至root
用户身份, 但需要输入root
用户密码。
超级管理员root
用户使用su - username
切换普通用户不需要输入任何密码。
[zls@zls ~]$ pwd
/home/zls
//不加 '-' 切换到root账户下时,当前目录没有变化
[zls@zls ~]$ su
密码:
[root@zls zls]# pwd
/home/zls
[root@zls zls]# exit
exit
//加 '-'切换到root账户,当前目录为root账户的家目录。
[zls@zls ~]$ su -
密码:
[root@zls ~]# pwd
/root
.以某个用户的身份执行某个服务,使用命令su -c username
[root@zls ~]# su - zls -c 'ifconfig'
[root@zls ~]# su - zls -c 'ls ~'
用户身份提权
su
命令在切换用户身份时,如果每个普通用户都能拿到root
用户的密码,当其中某个用户不小心泄漏了root
的密码,那系统会变得非常不安全。
为了改进这个问题,从而产生了sudo
这个命令。
sudo
执行一个仅有root
身份才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root
的密码而是用户自己的密码。
默认只有root
用户能使用sudo
命令,普通用户想要使用sudo
需要root
预先设定,即使用 visudo
命令去编辑相关的配置文件/etc/sudoers
centos7提权
[root@zls ~]# usermod zls -G wheel
//日志审计
[root@zls ~]$ sudo tail -f /var/log/secure
centos6提权
#1.系统安装后就有sudo命令,如果没有sudo命令,可通过如下方式安装
[root@zls ~]# yum install -y sudo
#2.使用`visudo`命令编辑sudo配置文件, 相当于 vim /etc/sudoers`配置文件
[root@zls ~]# visudo #会对配置进行验证
zls ALL=(ALL) /bin/rm, /bin/cp #新增
#3.配置选项详解
1.用户名 2.主机名 3.角色名 4.命令名
root ALL= (ALL) ALL
zls ALL 使用最高角色执行 /bin/rm, /bin/cp #允许使用sudo执行命令
zls ALL=(ALL) NOPASSWD:/bin/cp, /bin/rm //不需要密码使用rm、cp命令
#4.使用visudo -c检查配置文件
[root@zls ~]# visudo -c
/etc/sudoers: parsed OK
普通用户验证sudo权限
#1.切换普通用户
[root@zls ~]# su - zls
#2.检查普通用户sudo权限明细
[zls@zls ~]$ sudo -l
...
User zls may run the following commands on this host:
(ALL) /bin/rm, (ALL) /bin/cp
#3.普通用户删除opt目录,删除失败
[zls@zls ~]$ rm -rf /opt/
rm: cannot remove `/opt': Permission denied
#4.使用sudo提权,验证用户权限是否可用,需要输入普通用户的密码
[zls@zls ~]$ sudo rm -rf /opt
sudo免密码配置选项
#1.普通用户执行sudo不需要输入密码配置
[root@zls ~]# visudo
zls ALL=(ALL) /bin/rm, /bin/cp #默认
zls ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp #修改后
#2.默认普通用户无权删除
[zls@zls ~]$ rm -f /root/002
rm: cannot remove `/root/002': Permission denied
#3.验证sudo免密码执行权限
[zls@zls ~]$ sudo rm -f /root/002
sudo配置组
//如果每增加一个用户需配置一行sudo,这样设置非常麻烦。所以可以进行如下设置
%zls ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp #新增组
//group1这个组的所有用户都拥有sudo的权力。接下来只需要将用户加入该组即可。
//创建用户加入该组
[root@zls ~]# groupadd zls
[root@zls ~]# useradd zls1 -g zls
[root@zls ~]# useradd zls2 -g zls
//root用户建立目录
[root@zls ~]# mkdir /root/zls_sudo
//切换用户并删除测试
[root@zls ~]# su - zls1
[zls1@zls ~]$ rm -rf /root/zls_sudo
rm: cannot remove `/root/zls_sudo': Permission denied
//使用sudo
[zls1@zls ~]$ sudo rm -rf /root/zls_sudo
当然配置文件/etc/sudoers
包含了诸多配置项,可以使用命令man sudoers
来获得帮助信息。
下面介绍一个很实用的案例,我们的需求是将Linux
服务器设置成如下:
1.仅允许使用普通账户登陆Linux
服务器,禁止root直接登录
2.可以让普通用户不输入密码就能sudo su -
切换到root
账户
//禁止root用户登陆
[root@zls ~]# sed -i 's@#PermitRootLogin yes@PermitRootLogin no@g' /etc/ssh/sshd_config
[root@zls ~]# systemctl restart sshd
//配置sudo权限
[root@zls ~]# visudo
User_Alias USER_SU = zls1,zls2,zls
Cmnd_Alias SU = /bin/su
USER_SU ALL=(ALL) NOPASSWD:SU
//使用root登陆服务器失败
➜ ~ ssh root@192.168.56.11
root@192.168.56.11's password:
Permission denied, please try again.
//使用普通用户登陆服务器
➜ ~ ssh zls@192.168.56.11
zls@192.168.56.11's password:
Last login: Mon Oct 30 09:28:21 2017 from 192.168.56.2
//使用sudo提权至root用户
[zls@zls ~]$ sudo su -
[root@zls ~]#
sudo执行流程
1.普通用户执行sudo命令, 会检查/var/db/sudo是否存在时间戳缓存
2.如果存在则不需要输入密码, 否则需要输入用户与密码
3.输入密码会检测是否该用户是否拥有该权限
4.如果有则执行,否则报错退出
掌握—》熟悉—》了解
- 掌握:倒背如流。
- 熟悉:正背如流。
- 了解:看到能够想起。
如果喜欢本篇博文,博文左边可以点个赞,谢谢您啦!
如果您喜欢厚颜无耻的博主我,麻烦点个
关注