Linux用户的基本操作3 (组的基本管理,用户提权)

[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.如果有则执行,否则报错退出

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )