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


    组的基本原理

    组账户信息保存在/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 	]#'
    [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 	]#'
    [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.如果有则执行,否则报错退出

  • 相关阅读:
    分页存储过程
    C#,单元测试
    telerik reporting报表
    在Linq to sql 和 Entity framework 中使用lambda表达式实现left join
    .NET提供了三种后台输出js的方式:
    转换人民币大小金额
    ASP.Net Post方式获取数据流的一种简单写法
    js数组中两个有相同删除一个
    我的个人博客
    It is the courage
  • 原文地址:https://www.cnblogs.com/gongjingyun123--/p/11108366.html
Copyright © 2020-2023  润新知