Linux组和提权
目 录
2.3 如果全局配置和个人配置出现冲突, 那么如何验证呢? 1
2.4 切换用户,使用命令su [-] username 1
组命名管理**
group组信息和密码信息
组账户信息保存在/etc/group和/etc/gshadow两个文件中。
/etc/group 组账户信息
[root@oldboy ~]# head -3 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
// /etc/group由 ':' 分割成4个字段,每个字段的具体含义如下:
字段名称 注释说明
1.组账户名称 //组的名称
2.密码占位符 //组的密码(存在/etc/gshadow)
3.组GID //组GID信息
4.组成员 //这里仅显示附加成员,基本成员不显示
/etc/gshadow 组密码信息
[root@oldboy ~]# head -4 /etc/gshadow
root:::
bin:::
daemon:::
sys:::
// /etc/gshadow由 ':' 分割成4个字段,每个字段的具体含义如下:
字段名称 注释说明
1.组账户名称 //组名称
2.密码占位符 //组密码
3.组管理员 //组管理员
4.组成员 //这里仅显示附加成员,基本成员不显示
groupadd增加新组
groupadd [-g GID] groupname
-g:指定组的GID,不指定GID时,GID从1000开始
[root@oldboy ~]# tail -1 /etc/group
music:x:2000:
-r:创建系统组,gid从201-999
[root@oldboy ~]# tail -1 /etc/group
song:x:996:
使用groupmod命令修改组信息
groupmod [选项] groupname
-g:修改组GID
[root@oldboy ~]# tail -1 /etc/group
song:x:3001:
-n:修改组名称
[root@oldboy ~]# tail -1 /etc/group
song1:x:3001:
使用groupdel删除组
groupdel groupname
当该组是用户的基本组时无法删除,只有删除用户或者用户变更基本后,方可删除该组
[root@oldboy ~]# tail -1 /etc/passwd
cat:x:6002:3001::/home/cat:/bin/bash
[root@oldboy ~]# groupdel song1
groupdel:不能移除用户"cat"的主组
当该组只是用户的附加组时,可以直接删除
uid=6002(cat) gid=3000(music) 组=3000(music),3001(song1)
[root@oldboy ~]# groupdel song1
使用gpasswd设置组密码
[root@oldboy ~]# gpasswd music
正在修改 music 组的密码
新密码:
请重新输入新密码:
使用newgrp命令切换基本组身份
//检查账户信息
[root@oldboy ~]# id oldboy
uid=6001(oldboy) gid=5008(network_sa) gro
5身份切换*****
Shell分类
1、交互式shell 等待用户输入执行提交的命令(终端操作), exit退出
2、非交互式shell 执行shell脚本, 脚本执行结束shell自动退出
3、登陆shell 需要输入用户名和密码才能进入shell, su - oldboy
4、非登陆shell 不需要输入用户和密码就能进入,比如执行, sh, bash
查看登陆shell
[root@oldboy ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
//临时设置,永久设置需要写配置文件
[root@oldboy ~]# export PS1='[\h@\u \t]#'
[oldboy@root 02:06:28]#
bash配置文件
Bash的配置文件保存用户的工作环境
个人配置文件: ~/.bash_profile ~/.bashrc
全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc
profile类文件, 设定环境变量, 登陆前运行的脚本和命令
bashrc 类文件, 设定本地变量, 定义命令别名
全局配置和个人配置设置冲突, 以个人设置为准
1、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]#'
[oldboy@root 02:16:57]# //当前终端shell环境
编辑个人配置 /home/oldboy/.bash_profile 新增一行: PS1='[\u@\H]#'
[oldboy@root 02:18:27]#su oldboy
[oldboy@oldboy root]$
[oldboy@root 02:18:34]# su - oldboy
[oldboy@oldboy.com]#
创建用户,并登录系统
[root@oldboy ~]# useradd oldboy
[root@oldboy ~]# echo "123"|passwd --stdin oldboy
更改用户 oldboy 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
//使用oldboy用户登录Linux
oldboy@10.0.0.200's password:
Last login: Sun Nov 5 17:23:06 2017 from 10.0.0.200
[oldboy@oldboy ~]$
//可以使用whoami查看当前登录用户
[oldboy@oldboy ~]$ whoami
oldboy
切换用户,使用命令su [-] username
su命令后面跟 - 代表进入登陆式shell 否则代表进入非登陆式shell 只不过他们所执行的环境变量配置文件不一样。
普通用户su -不加username时可以切换root用户, 但需要输入密码。
超级管理员root用户使用su -切换普通用户不需要密码。
[oldboy@oldboy ~]$ pwd
/home/oldboy
//不加 '-' 切换到root账户下时,当前目录没有变化
[oldboy@oldboy ~]$ su
密码:
[root@oldboy oldboy]# pwd
/home/oldboy
[root@oldboy oldboy]# exit
exit
//加上 '-' 切换到root账户后,当前目录为root账户的家目录。
//当用root切换普通用户时,是不需要输入密码的。
[oldboy@oldboy ~]$ su -
密码:
[root@oldboy ~]# pwd
/root
以某个用户的身份执行某个服务,使用命令su -c username
[root@oldboy ~]# su - oldboy -c 'ifconfig'
[root@oldboy ~]# su - oldboy -c 'ls ~'
sudo提升权限*****
su切换用户身份,如果每个普通用户都能切换到root身份,如果某个用户不小心泄漏了root的密码,那系统会变得非常不安全。
为了改进这个问题,从而产生了sudo这个命令。使用sudo执行一个root才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root的密码而是用户自己的密码。
默认只有root用户能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的,即,使用 visudo命令去编辑相关的配置文件/etc/sudoers
centos7提权方法
[root@oldboy ~]# usermod -G wheel oldboy
sudo配置选项详解
//下面解释如上每行代表含义
用户名 | 主机名 | 角色名 | 命令名 | ||
root | ALL= | (ALL) | ALL | ||
oldboy | ALL | 使用最高角色执行 | /bin/rm, | /bin/cp | //执行命令 |
oldboy | ALL=(ALL) | NOPASSWD:/bin/cp, | /bin/rm | 不需要密码使用rm、cp命令 |
普通用户验证sudo权限
//切换普通用户
[root@oldboy ~]# su - oldboy
检查普通用户sudo权限明细
[oldboy@oldboy ~]$ sudo -l
...省略部分
User oldboy may run the following commands on this host:
(ALL) /bin/rm, (ALL) /bin/cp
//普通用户删除opt目录,删除失败
[oldboy@oldboy ~]$ rm -rf /opt/
rm: cannot remove `/opt': Permission denied
//使用sudo提权,验证用户权限是否可用,需要输入普通用户的密码
[oldboy@oldboy ~]$ sudo rm -rf /opt
sudo免密码配置选项
//普通用户执行sudo不需要输入密码配置
[root@oldboy ~]# visudo
//修改前
oldboy ALL=(ALL) /bin/rm, /bin/cp
//修改后
oldboy ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp
//默认普通用户无权删除
[oldboy@oldboy ~]$ rm -f /root/002
rm: cannot remove `/root/002': Permission denied
//验证sudo免密码执行权限
[oldboy@oldboy ~]$ sudo rm -f /root/002
sudo配置组
//如果每增加一个用户需配置一行sudo,这样设置太麻烦了。所以可以进行如下设置:
//新增组
%oldboy ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp
//group1这个组的所有用户都拥有sudo的权力。接下来只需要将用户加入该组即可。
//创建用户加入该组
[root@oldboy ~]# groupadd oldboy
[root@oldboy ~]# useradd oldboy -g oldboy
[root@oldboy ~]# useradd oldgirl -g oldboy
//root用户建立目录
[root@oldboy ~]# mkdir /root/oldboy_sudo
//切换用户并删除测试
[root@oldboy ~]# su - oldboy
[oldboy1@oldboy ~]$ rm -rf /root/oldboy_sudo
rm: cannot remove `/root/bgx_sudo': Permission denied
//使用sudo
[oldboy1@oldboy ~]$ sudo rm -rf /root/oldboy_sudo
当然配置文件/etc/sudoers包含了诸多配置项,可以使用命令 man sudoers 来获得帮助信息。
下面介绍一个很实用的案例,我们的需求是把Linux服务器设置成这个样子:只允许使用普通账户登陆Linux服务器,但可以让普通用户不输入密码就能sudo su -切换到root账户。
//禁止root用户登陆
[root@oldboy ~]# sed -i 's@#PermitRootLogin yes@PermitRootLogin no@g' /etc/ssh/sshd_config
[root@oldboy ~]# systemctl restart sshd
配置sudo权限
[root@oldboy ~]# visudo
User_Alias USER_SU = oldboy1,oldboy
Cmnd_Alias SU = /bin/su
USER_SU ALL=(ALL) NOPASSWD:SU
//使用root登陆服务器失败
ssh root@10.0.0.200
root@10.0.0.200's password:
Permission denied, please try again.
//使用普通用户登陆服务器
~ ssh oldboy@10.0.0.200
oldboy@10.0.0.200's password:
Last login: Mon Oct 30 09:28:21 2017 from 10.0.0.1
//使用sudo提权至root用户
[oldboy@oldboy ~]$ sudo su -
[root@oldboy ~]#
sudo日志审计
通过sudo和syslog配合实现对所有用户进行权限的日志审计并将记录日志集中管理,实施后让所有运维和开发执行的sudo命令都有记录可查,杜绝了内部人员的操作安全隐患。
sudo日志审计,专门针对sudo命令的系统用户记录其执行的命令相关信息,所谓sudo命令日志审计,并不记录普通用户的操作,而是记录执行sudo命令的用户操作。
安装sudo、rsysylog
[root@oldboy ~]# yum install -y sudo rsyslog
//检测是否安装成功
[root@oldboy ~]# rpm -qa rsyslog sudo
rsyslog-8.24.0-16.el7.x86_64
sudo-1.8.19p2-13.el7.x86_64
配置/etc/sudoers记录日志路径
[root@oldboy ~]# echo "Defaults logfile=/var/log/sudo.log" >>/etc/sudoers
//查看追加的日志配置
[root@oldboy ~]# tail -1 /etc/sudoers
Defaults logfile=/var/log/sudo.log
//检查语法
[root@oldboy ~]# visudo -c
/etc/sudoers: parsed OK
配置rsyslog日志服务
[root@oldboy ~]# echo "local2.debug /var/log/sudo.log" >>/etc/rsyslog.conf
//重启rsyslog服务
[root@oldboy ~]# systemctl restart rsyslog
普通用户使用sudo权限验证日志记录
//使用普通执行sudo命令
[oldboy@oldboy ~]$ rm -rf /root/test/
rm: 无法删除"/root/test": 权限不够
[oldboy@oldboy ~]$ sudo rm -rf /root/test/
//检查用户在什么时间执行过什么操作
[oldboy@oldboy ~]$ tail /var/log/sudo.log
Nov 7 07:56:58 : oldboy : TTY=pts/1 ; PWD=/home/oldboy ; USER=root ;
COMMAND=/bin/rm -rf /root/test/
17874
日志审计
[root@oldboy ~]$ sudo tail -f /var/log/secure
系统安装后就有sudo命令,如果没有sudo命令,可通过如下方式安装
[root@oldboy ~]# yum install -y sudo
使用visudo命令编辑/etc/sudoers配置文件
//执行visudo,等于使用vi编辑sudoers配置文件
[root@oldboy ~]# visudo
默认
root ALL=(ALL) ALL
//新增
oldboy ALL=(ALL) /bin/rm, /bin/cp
//root默认就拥有sudo最高权限,我们在该行下新增oldboy用户,让此用户拥有sudo权限
//使用visudo -c检查配置文件
[root@oldboy ~]# visudo -c
/etc/sudoers: parsed OK