目录linux
如何在普通用户的状况下,完成平常工做?
1)su
切换用户,使用普通用户登陆,而后使用su命令切换到root。
优势:简单,方便
缺点:须要知道root密码,不安全,切换到root没有日志审计功能shell
2)sudo
提权,当须要使用root权限时,进行提权,而无需切换至root用户。
优势:安全,方便
缺点:复杂vim
交互式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的配置文件保存用户的工做环境 我的配置文件: ~/.bash_profile ~/.bashrc 全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc profile类文件, 设定环境变量, 登录前运行的脚本和命令 bashrc 类文件, 设定本地变量, 定义命令别名 全局配置和我的配置设置冲突, 优先使用我的配置准
//登陆式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命令后面跟-
表明进入登录式shell
若是su命令后不加-
表明进入非登录式shell
,他们之间的区别在于加载的环境变量不同。centos
注意:普通用户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
[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
bash
[root@zls ~]# usermod zls -G wheel //日志审计 [root@zls ~]$ sudo tail -f /var/log/secure
#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
#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
#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,这样设置很是麻烦。因此能够进行以下设置 %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
帐户ssh
//禁止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 ~]#
1.普通用户执行sudo命令, 会检查/var/db/sudo是否存在时间戳缓存
2.若是存在则不须要输入密码, 不然须要输入用户与密码
3.输入密码会检测是否该用户是否拥有该权限
4.若是有则执行,不然报错退出测试