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

Stella981
• 阅读 563

[toc]

组的基本原理

组账户信息保存在/etc/group/etc/gshadow 两个文件中.

/etc/group组账户信息

[root@zls ~]# head -2 /etc/group
root:x:0:
bin:x:1:bin,daemon

// /etc/group由':' 分割, 分割为4个字段,每个字段的具体含义如下:
字段名称
1.组的名称
2.组的密码(存在/etc/gshadow)
3.组GID信息
4.仅显示附加成员,基本成员不显示

/etc/gshadow组密码信息

[root@zls ~]# head -2 /etc/gshadow
root:::
bin:::bin,daemon

// /etc/gshadow由 ':' 分割, 分割为4个字段,每个字段的具体含义如下:
字段名称
1.组名称
2.组密码
3.组管理员
4.仅显示附加成员,基本成员不显示

1.使用groupadd 命令新增组 groupadd [-g GID] groupname

//创建基本组, 不指定gid
[root@zls ~]# groupadd no_gid
[root@zls ~]# tail -n1 /etc/group
no_gid:x:1000:

//创建基本组, 指定gid为5555
[root@zls ~]# groupadd -g 5555 yes_gid
[root@zls ~]# tail -n1 /etc/group
yes_gid:x:5555:

//创建系统组,gid从201-999
[root@zls ~]# groupadd -r sys_group
[root@zls ~]# tail -n1 /etc/group
sys_group:x:990:

2.使用groupmod 命令新增组

//-g 修改组gid
[root@zls ~]# groupmod -g 1111 no_gid
[root@zls ~]# tail -1 /etc/group
no_gid:x:1111:

//-n 修改组名称
[root@zls ~]# groupmod -n active_group yes_gid
[root@zls ~]# tail -1 /etc/group
active_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设置组密码【了解即可】

[root@zls ~]# groupadd devops
[root@zls ~]# gpasswd devops
Changing the password for group devops
New Password:
Re-enter new password:

5.使用newgrp命令切换基本组身份[了解即可]

//检查账户信息
[root@docker ~]# useradd zls
[root@docker ~]# id zls
uid=1069(zls) gid=5005(zls) groups=5005(zls)

//切换普通用户
[root@docker ~]# su - zls

//创建新文件,并验证权限
[zls@docker ~]$ touch file_roots
[zls@docker ~]$ ll
-rw-rw-r-- 1 zls zls 0 Jun 13 10:06 file_roots

//切换组信息
[zls@docker ~]$ newgrp devops
Password:

//建立文件,检查权限
[zls@docker ~]$ touch file_test
[zls@docker ~]$ ll
total 0
-rw-rw-r-- 1 zls zls 0 Jun 13 10:06 file_roots
-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分类

交互式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]#

2.bash shell配置文件

Bash的配置文件保存用户的工作环境

个人配置文件: ~/.bash_profile ~/.bashrc
全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc

profile类文件, 设定环境变量, 登陆前运行的脚本和命令
bashrc 类文件, 设定本地变量, 定义命令别名

全局配置和个人配置设置冲突, 优先使用个人配置准

3.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, 即可验证执行顺序。

扩展登录提示信息

开机动画 vim motd

                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            佛祖保佑       永不宕机
      https://www.driverzeng.com



//                            _ooOoo_
//                           o8888888o
//                           88" . "88
//                           (| -_- |)
//                            O\ = /O
//                        ____/`---'\____
//                       .   ' \\| |// `.
//                        / \\||| : |||// \
//                       / _||||| -:- |||||- \
//                         | | \\\ - /// | |
//                        | \_| ''\---/'' | |
//                        \ .-\__ `-` ___/-. /
//                      ___`. .' /--.--\ `. . __
//                   ."" '< `.___\_<|>_/___.' >'"".
//                  | | : `- \`.;`\ _ /`;.`/ - ` : | |
//                  \ \ `-. \_ __\ /__ _/ .-` / /
//          ======`-.____`-.___\_____/___.-`____.-'======
//                              `=---='
//
//          .............................................
//          佛祖镇楼                  BUG辟易
//          佛曰:
//          写字楼里写字间,写字间里程序员;
//          程序人员写程序,又拿程序换酒钱。
//          酒醒只在网上坐,酒醉还来网下眠;
//          酒醉酒醒日复日,网上网下年复年。
//          但愿老死电脑间,不愿鞠躬老板前;
//          奔驰宝马贵者趣,公交自行程序员。
//          别人笑我忒疯癫,我笑自己命太贱;
//          不见满街漂亮妹,哪个归得程序员?


/**
 *        ┏┓  ┏┓+ +
 *       ┏┛┻━━━┛┻┓ + +
 *       ┃      ┃  
 *       ┃   ━   ┃ ++ + + +
 *       ████━████  ┃+
 *       ┃       ┃ +
 *       ┃   ┻   ┃
 *       ┃      ┃ + +
 *       ┗━┓   ┏━┛
 *         ┃   ┃           
 *         ┃   ┃ + + + +
 *         ┃   ┃    Code is far away from bug with the animal protecting
 *         ┃   ┃ +     神兽保佑,代码无bug  
 *         ┃   ┃
 *         ┃   ┃  +         
 *         ┃    ┗━━━┓ + +
 *         ┃        ┣┓
 *         ┃       ┏┛
 *         ┗┓┓┏━┳┓┏┛ + + + +
 *          ┃┫┫ ┃┫┫
 *          ┗┻┛ ┗┻┛+ + + +
 */

4.如果全局配置和个人配置出现冲突, 那么如何验证呢?

编辑全局配置 /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]#

5.创建用户,并登录系统

[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

6.切换用户,使用命令su [-] username

su命令后面跟-代表进入登陆式shell 如果su命令后不加-代表进入非登陆式shell,他们之间的区别在于加载的环境变量不一样。

普通用户su -代表直接切换至root用户身份, 但需要输入root用户密码。

[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

7.以某个用户的身份执行某个服务,使用命令su -c username

[root@zls ~]# su - zls -c 'ifconfig'
[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提权

[root@zls ~]# usermod zls -G wheel
//日志审计
[root@zls ~]$ sudo tail -f /var/log/secure

3.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

4.普通用户验证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

5.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

6.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)优化ssh禁止root用户登录
    [root@oldboyedu ~]# vim /etc/ssh/sshd_config
    修改禁止root用户登录
    原来:
    #PermitRootLogin yes
    修改成:
    PermitRootLogin no
    
    修改ssh的端口
    原来:
    #Port 22
    修改成:
    Port 52013

    2)重启ssh服务
    [root@oldboyedu ~]# systemctl restart sshd

    3)关闭防火墙
    [root@oldboyedu ~]# systemctl stop firewalld

    4)visudo
    User_Alias USER_SU = zls1,zls2,zls
    Cmnd_Alias SU = /bin/su
    USER_SU ALL=(ALL) NOPASSWD:SU
7.sudo执行流程:

1.普通用户执行sudo命令, 会检查/var/db/sudo是否存在时间戳缓存 2.如果存在则不需要输入密码, 否则需要输入用户与密码 3.输入密码会检测是否该用户是否拥有该权限 4.如果有则执行,否则报错退出

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
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
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这