[toc]
组的基本原理
组账户信息保存在/etc/group 和/etc/gshadow 两个文件中.
/etc/group组账户信息
1[root@zls ~]# head -2 /etc/group 2root:x:0: 3bin:x:1:bin,daemon 4 5// /etc/group由':' 分割, 分割为4个字段,每个字段的具体含义如下: 6字段名称 71.组的名称 82.组的密码(存在/etc/gshadow) 93.组GID信息 104.仅显示附加成员,基本成员不显示
/etc/gshadow组密码信息
1[root@zls ~]# head -2 /etc/gshadow 2root::: 3bin:::bin,daemon 4 5// /etc/gshadow由 ':' 分割, 分割为4个字段,每个字段的具体含义如下: 6字段名称 71.组名称 82.组密码 93.组管理员 104.仅显示附加成员,基本成员不显示
1.使用groupadd 命令新增组 groupadd [-g GID] groupname
1//创建基本组, 不指定gid 2[root@zls ~]# groupadd no_gid 3[root@zls ~]# tail -n1 /etc/group 4no_gid:x:1000: 5 6//创建基本组, 指定gid为5555 7[root@zls ~]# groupadd -g 5555 yes_gid 8[root@zls ~]# tail -n1 /etc/group 9yes_gid:x:5555: 10 11//创建系统组,gid从201-999 12[root@zls ~]# groupadd -r sys_group 13[root@zls ~]# tail -n1 /etc/group 14sys_group:x:990:
2.使用groupmod 命令新增组
1//-g 修改组gid 2[root@zls ~]# groupmod -g 1111 no_gid 3[root@zls ~]# tail -1 /etc/group 4no_gid:x:1111: 5 6//-n 修改组名称 7[root@zls ~]# groupmod -n active_group yes_gid 8[root@zls ~]# tail -1 /etc/group 9active_group:x:5555:
3.使用groupdel删除组
-
该命令 没有特殊选项,如果一个用户有基本组和附加组,只能删除附加组,不能删除基本组
#删除组 [root@zls ~]# groupdel active_group
#删除用户附加组 [root@docker ~]# id zls uid=1069(zls) gid=5005(zls) groups=5005(zls),5004(devops) [root@docker ~]# groupdel devops [root@docker ~]# id zls uid=1069(zls) gid=5005(zls) groups=5005(zls)
#无法删除用户基本组 [root@zls ~]# tail -n1 /etc/group network_sa:x:5008: [root@zls ~]# groupdel network_sa groupdel: cannot remove the primary group of user 'zls_zls' #只有删除用户或者用户变更基本后,方可删除该组
4.使用gpasswd设置组密码【了解即可】
1[root@zls ~]# groupadd devops 2[root@zls ~]# gpasswd devops 3Changing the password for group devops 4New Password: 5Re-enter new password:
5.使用newgrp命令切换基本组身份[了解即可]
1//检查账户信息 2[root@docker ~]# useradd zls 3[root@docker ~]# id zls 4uid=1069(zls) gid=5005(zls) groups=5005(zls) 5 6//切换普通用户 7[root@docker ~]# su - zls 8 9//创建新文件,并验证权限 10[zls@docker ~]$ touch file_roots 11[zls@docker ~]$ ll 12-rw-rw-r-- 1 zls zls 0 Jun 13 10:06 file_roots 13 14//切换组信息 15[zls@docker ~]$ newgrp devops 16Password: 17 18//建立文件,检查权限 19[zls@docker ~]$ touch file_test 20[zls@docker ~]$ ll 21total 0 22-rw-rw-r-- 1 zls zls 0 Jun 13 10:06 file_roots 23-rw-r--r-- 1 zls devops 0 Jun 13 10:08 file_test
用户身份切换
Linux系统中,有时候普通用户有些事情是没办法操作,除非是root管理员用户才能做到。这时就需要临时切换到root管理员身份来做事了。那么在学习如何切换用户之前,我们先来了解下用户工作环境。
如何在普通用户的情况下,完成日常工作? 1)su 切换用户,使用普通用户登录,然后使用su命令切换到root。 优点:简单,方便 缺点:需要知道root密码,不安全,切换到root没有日志审计功能
2)sudo 提权,当需要使用root权限时,进行提权,而无需切换至root用户。 优点:安全,方便 缺点:复杂
1.Shell分类
1交互式shell //等待用户输入执行的命令(终端操作,需要不断提示) 2非交互式shell //执行shell脚本, 脚本执行结束后shell自动退出 3 4登陆shell //需要输入用户名和密码才能进入shell su - zls 5非登陆shell //不需要输入用户和密码就能进入,比如执行sh, bash, su username 6 7//查看登陆shell 8[root@zls ~]# pstree 9 10//临时设置,永久设置需要写配置文件 11[root@zls ~]# export PS1='[\h@\u \t]#' 12[zls@root 02:06:28]#
2.bash shell配置文件
1Bash的配置文件保存用户的工作环境 2 3个人配置文件: ~/.bash_profile ~/.bashrc 4全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc 5 6profile类文件, 设定环境变量, 登陆前运行的脚本和命令 7bashrc 类文件, 设定本地变量, 定义命令别名 8 9全局配置和个人配置设置冲突, 优先使用个人配置准
3.shell配置文件应用顺序
1//登录式shell配置文件执行顺序 2/etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc 3 4//非登陆式shell配置文件执行顺序 5~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh 6 7 8#验证登陆shell和非登陆shell配置文件执行顺序, 在每个配置文件加入一段 “echo”即可。 9#最后通过登陆shell和非登录shell方式登陆linux, 即可验证执行顺序。
扩展登录提示信息
开机动画 vim motd
1 _ooOoo_ 2 o8888888o 3 88" . "88 4 (| -_- |) 5 O\ = /O 6 ____/`---'\____ 7 .' \\| |// `. 8 / \\||| : |||// \ 9 / _||||| -:- |||||- \ 10 | | \\\ - /// | | 11 | \_| ''\---/'' | | 12 \ .-\__ `-` ___/-. / 13 ___`. .' /--.--\ `. . __ 14 ."" '< `.___\_<|>_/___.' >'"". 15 | | : `- \`.;`\ _ /`;.`/ - ` : | | 16 \ \ `-. \_ __\ /__ _/ .-` / / 17======`-.____`-.___\_____/___.-`____.-'====== 18 `=---=' 19^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 20 佛祖保佑 永不宕机 21 https://www.driverzeng.com 22 23 24 25// _ooOoo_ 26// o8888888o 27// 88" . "88 28// (| -_- |) 29// O\ = /O 30// ____/`---'\____ 31// . ' \\| |// `. 32// / \\||| : |||// \ 33// / _||||| -:- |||||- \ 34// | | \\\ - /// | | 35// | \_| ''\---/'' | | 36// \ .-\__ `-` ___/-. / 37// ___`. .' /--.--\ `. . __ 38// ."" '< `.___\_<|>_/___.' >'"". 39// | | : `- \`.;`\ _ /`;.`/ - ` : | | 40// \ \ `-. \_ __\ /__ _/ .-` / / 41// ======`-.____`-.___\_____/___.-`____.-'====== 42// `=---=' 43// 44// ............................................. 45// 佛祖镇楼 BUG辟易 46// 佛曰: 47// 写字楼里写字间,写字间里程序员; 48// 程序人员写程序,又拿程序换酒钱。 49// 酒醒只在网上坐,酒醉还来网下眠; 50// 酒醉酒醒日复日,网上网下年复年。 51// 但愿老死电脑间,不愿鞠躬老板前; 52// 奔驰宝马贵者趣,公交自行程序员。 53// 别人笑我忒疯癫,我笑自己命太贱; 54// 不见满街漂亮妹,哪个归得程序员? 55 56 57/** 58 * ┏┓ ┏┓+ + 59 * ┏┛┻━━━┛┻┓ + + 60 * ┃ ┃ 61 * ┃ ━ ┃ ++ + + + 62 * ████━████ ┃+ 63 * ┃ ┃ + 64 * ┃ ┻ ┃ 65 * ┃ ┃ + + 66 * ┗━┓ ┏━┛ 67 * ┃ ┃ 68 * ┃ ┃ + + + + 69 * ┃ ┃ Code is far away from bug with the animal protecting 70 * ┃ ┃ + 神兽保佑,代码无bug 71 * ┃ ┃ 72 * ┃ ┃ + 73 * ┃ ┗━━━┓ + + 74 * ┃ ┣┓ 75 * ┃ ┏┛ 76 * ┗┓┓┏━┳┓┏┛ + + + + 77 * ┃┫┫ ┃┫┫ 78 * ┗┻┛ ┗┻┛+ + + + 79 */
4.如果全局配置和个人配置出现冲突, 那么如何验证呢?
1编辑全局配置 /etc/profile 新增一行: PS1='[\h@\u \t]#' 2[zls@root 02:16:57]# //当前终端shell环境 3 4编辑个人配置 ~/.bash_profile 新增一行: PS1='[\u@\H]#' 5 6 7[zls@root 02:18:27]#su zls_zls 8[zls_zls@zls root]$ 9 10[zls@root 02:18:34]# su - zls_zls 11[zls_zls@zls.com]#
5.创建用户,并登录系统
1[root@zls ~]# useradd zls 2[root@zls ~]# echo "123"|passwd --stdin zls 3 4//使用zls用户登录当前Linux系统 5➜ ~ ssh zls@192.168.56.111 6zls@192.168.56.111's password: 7[zls@zls ~]$ 8 9//可以使用whoami查看当前登录用户 10[zls@zls ~]$ whoami 11zls
6.切换用户,使用命令su [-] username
su命令后面跟-代表进入登陆式shell 如果su命令后不加-代表进入非登陆式shell,他们之间的区别在于加载的环境变量不一样。
普通用户
su -代表直接切换至root用户身份, 但需要输入root用户密码。
1[zls@zls ~]$ pwd 2/home/zls 3 4//不加 '-' 切换到root账户下时,当前目录没有变化 5[zls@zls ~]$ su 6密码: 7[root@zls zls]# pwd 8/home/zls 9[root@zls zls]# exit 10exit 11 12//加 '-'切换到root账户,当前目录为root账户的家目录。 13[zls@zls ~]$ su - 14密码: 15[root@zls ~]# pwd 16/root
7.以某个用户的身份执行某个服务,使用命令su -c username
1[root@zls ~]# su - zls -c 'ifconfig' 2[root@zls ~]# su - zls -c 'ls ~'
5.用户身份提权
1.su命令sudo命令
su命令在切换用户身份时,如果每个普通用户都能拿到root用户的密码,当其中某个用户不小心泄漏了root的密码,那系统会变得非常不安全。 为了改进这个问题,从而产生了sudo这个命令。 sudo执行一个仅有root身份才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root的密码而是用户自己的密码。 默认只有root用户能使用sudo命令,普通用户想要使用sudo需要root预先设定,即使用 visudo命令去编辑相关的配置文件/etc/sudoers
2.Centos7提权
1[root@zls ~]# usermod zls -G wheel 2//日志审计 3[root@zls ~]$ sudo tail -f /var/log/secure
3.CentOS6提权
1#1.系统安装后就有sudo命令,如果没有sudo命令,可通过如下方式安装 2[root@zls ~]# yum install -y sudo 3 4#2.使用`visudo`命令编辑sudo配置文件, 相当于 vim /etc/sudoers`配置文件 5[root@zls ~]# visudo #会对配置进行验证 6zls ALL=(ALL) /bin/rm, /bin/cp #新增 7 8#3.配置选项详解 91.用户名 2.主机名 3.角色名 4.命令名 10root ALL= (ALL) ALL 11zls ALL 使用最高角色执行 /bin/rm, /bin/cp #允许使用sudo执行命令 12zls ALL=(ALL) NOPASSWD:/bin/cp, /bin/rm //不需要密码使用rm、cp命令 13 14#4.使用visudo -c检查配置文件 15[root@zls ~]# visudo -c 16/etc/sudoers: parsed OK
4.普通用户验证sudo权限
11.切换普通用户 2[root@zls ~]# su - zls 3 42.检查普通用户sudo权限明细 5[zls@zls ~]$ sudo -l 6... 7User zls may run the following commands on this host: 8 (ALL) /bin/rm, (ALL) /bin/cp 9 103.普通用户删除opt目录,删除失败 11[zls@zls ~]$ rm -rf /opt/ 12rm: cannot remove `/opt': Permission denied 13 144.使用sudo提权,验证用户权限是否可用,需要输入普通用户的密码 15[zls@zls ~]$ sudo rm -rf /opt
5.sudo免密码配置选项
1#1.普通用户执行sudo不需要输入密码配置 2[root@zls ~]# visudo 3zls ALL=(ALL) /bin/rm, /bin/cp #默认 4zls ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp #修改后 5 6#2.默认普通用户无权删除 7[zls@zls ~]$ rm -f /root/002 8rm: cannot remove `/root/002': Permission denied 9 10#3.验证sudo免密码执行权限 11[zls@zls ~]$ sudo rm -f /root/002
6.sudo配置组
1//如果每增加一个用户需配置一行sudo,这样设置非常麻烦。所以可以进行如下设置 2 3%zls ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp #新增组 4//group1这个组的所有用户都拥有sudo的权力。接下来只需要将用户加入该组即可。 5 6//创建用户加入该组 7[root@zls ~]# groupadd zls 8[root@zls ~]# useradd zls1 -g zls 9[root@zls ~]# useradd zls2 -g zls 10 11//root用户建立目录 12[root@zls ~]# mkdir /root/zls_sudo 13 14//切换用户并删除测试 15[root@zls ~]# su - zls1 16[zls1@zls ~]$ rm -rf /root/zls_sudo 17rm: cannot remove `/root/zls_sudo': Permission denied 18 19//使用sudo 20[zls1@zls ~]$ sudo rm -rf /root/zls_sudo
当然配置文件/etc/sudoers包含了诸多配置项,可以使用命令man sudoers来获得帮助信息。
下面介绍一个很实用的案例,我们的需求是将Linux服务器设置成如下: 1.仅允许使用普通账户登陆Linux服务器,禁止root直接登录 2.可以让普通用户不输入密码就能sudo su -切换到root账户
1//禁止root用户登陆 2[root@zls ~]# sed -i 's@#PermitRootLogin yes@PermitRootLogin no@g' /etc/ssh/sshd_config 3[root@zls ~]# systemctl restart sshd 4 5//配置sudo权限 6[root@zls ~]# visudo 7User_Alias USER_SU = zls1,zls2,zls 8Cmnd_Alias SU = /bin/su 9USER_SU ALL=(ALL) NOPASSWD:SU 10 11//使用root登陆服务器失败 12➜ ~ ssh root@192.168.56.11 13root@192.168.56.11's password: 14Permission denied, please try again. 15 16//使用普通用户登陆服务器 17➜ ~ ssh zls@192.168.56.11 18zls@192.168.56.11's password: 19Last login: Mon Oct 30 09:28:21 2017 from 192.168.56.2 20 21//使用sudo提权至root用户 22[zls@zls ~]$ sudo su - 23[root@zls ~]# 24 25 26 27 28sudo企业案例 29 1)优化ssh禁止root用户登录 30 [root@oldboyedu ~]# vim /etc/ssh/sshd_config 31 修改禁止root用户登录 32 原来: 33 #PermitRootLogin yes 34 修改成: 35 PermitRootLogin no 36 37 修改ssh的端口 38 原来: 39 #Port 22 40 修改成: 41 Port 52013 42 43 2)重启ssh服务 44 [root@oldboyedu ~]# systemctl restart sshd 45 46 3)关闭防火墙 47 [root@oldboyedu ~]# systemctl stop firewalld 48 49 4)visudo 50 User_Alias USER_SU = zls1,zls2,zls 51 Cmnd_Alias SU = /bin/su 52 USER_SU ALL=(ALL) NOPASSWD:SU
7.sudo执行流程:
1.普通用户执行sudo命令, 会检查/var/db/sudo是否存在时间戳缓存 2.如果存在则不需要输入密码, 否则需要输入用户与密码 3.输入密码会检测是否该用户是否拥有该权限 4.如果有则执行,否则报错退出