Linux基础08 组的基本管理, 组的增删改, shell的分类, 环境变量的加载顺序, 登录显示动画, 切换用户su -, 用户提权sudo, sudo企业案例


1.组的基本管理

    [root@zls ~]# head -2 /etc/group
    root:x:0:
    bin:x:1:bin,daemon
    
    // /etc/group由':' 分割, 分割为4个字段,每个字段的具体含义如下:
    字段名称
    1.组的名称
    2.组的密码(存在/etc/gshadow)
    3.组GID信息
    4.仅显示附加成员,基本成员不显示
    
    [root@zls ~]# head -2 /etc/gshadow
    root:::
    bin:::bin,daemon
    
    // /etc/gshadow由 ':' 分割, 分割为4个字段,每个字段的具体含义如下:
    字段名称
    1.组名称
    2.组密码    !:没有密码
    3.组管理员
    4.仅显示附加成员,基本成员不显示
    
    组的分类
    1.基本组
    2.附加组

创建组,修改组,删除组,组创建密码,切换组身份

    #添加组
    groupadd
    -g:指定GID    # groupadd zls_e -g 60000 #创建zls_e, gid为60000
    
    #修改组
    groupmod
    -g:修改GID    # groupmod zls_e -g 5237
    
    #删除组
    groupdel
    注意:如果组内有其他成员,则无法删除
    
    #组创建密码(了解即可)
    gpasswd
    [root@oldboyedu ~]# gpasswd zls_a
    Changing the password for group zls_a
    New Password: 1
    Re-enter new password: 1

    #切换组的身份(了解即可,没什么用)
    newgrp    (切换用户的组身份后,创建的文件通过ll查看,用户组权限会变为切换的组)

2.shell的分类

1.登录式shell
2.非登录式shell
3.交互式shell
4.非交互式shell

3.环境变量加载顺序

    1)登录式shell
    /etc/profile        age=10
    /etc/profile.d/*.sh        age=11
    ~/.bash_profile         age=12
    ~/.bashrc            age=13
    /etc/bashrc        age=14
    
    2)非登录式shell    (像输入bash命令)
    .bashrc
    /etc/bashrc
    /etc/profile.d/*.sh    (所有的sh都加载一遍)

如果有需求,所有用户都需要加载的环境变量,和登录式shell 非登录式shell都支持,把环境变量放在:

    /etc/bashrc
    /etc/profile.d/*.sh

总结:
1.登录式shell,会加载5个地方的环境变量
2.非登录式shell,会加载3个地方的环境变量
2.如果环境变量中配置冲突,最后一个加载的会把之前的冲突的配置覆盖

4. 登录显示动画

vim /etc/motd    开机动画,登录界面(可以用来提示文件在哪里)
                                  _oo0oo_
                                 088888880
                                 88" . "88
                                 (| -_- |)
                                  0\ = /0
                               ___/'---'\___
                             .' \\\\|     |// '.
                            / \\\\|||  :  |||// \\
                           /_ ||||| -:- |||||- \\
                          |   | \\\\\\  -  /// |   |
                          | \_|  ''\---/''  |_/ |
                          \  .-\__  '-'  __/-.  /
                        ___'. .'  /--.--\  '. .'___
                     ."" '<  '.___\_<|>_/___.' >'  "".
                    | | : '-  \'.;'\ _ /';.'/ - ' : | |
                    \  \ '_.   \_ __\ /__ _/   .-' /  /
                ====='-.____'.___ \_____/___.-'____.-'=====
                                  '=---='
 
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                        佛祖保佑    iii    永不死机

5.切换用户(登录式shell)

    su -    (加上-登录式shell,不加-非登陆式shell且不会进家目录,最好加上所有环境变量加载一遍)
    [root@localhost ~]# su - ldc

6.用户提权(一般企业禁止root用户登录, 其他用户需要提权然后才能sudo)

1)sudo (-l:查看sudo的权限 # sudo -l 查看当前用户权限)
下方方法为centos7提权方法:

usermod oldboy1 -G wheel # 添加附加组, 该组有sudu权限(oldboy1需要重连,就可使用sudo)

2) visudo 查看编辑用户权限

    ## Allow root to run any commands anywhere
    用户    主机  身份        命令
    root    ALL=(ALL)       ALL
    zls_a   ALL=(ALL)       ALL(该用户可以使用所有命令,非root要用sudo)
    ldc      ALL=(ALL)       /bin/vim(该用户只能执行vim命令,非root要用sudo)
    ## Allows people in group wheel to run all commands    允许在这个组里的人执行所有命令
    %wheel  ALL=(ALL)       ALL

visudo修改的文件是/etc/sudoers, 如果有vim权限即可修改用户权限(最好使用visudo命令, 有检查语法错误, 防止同事修改问题)

visudo的一些配置

原来:
## These are groups of related commands...

## Networking    (网络相关组)
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

## Installation and management of software    (安装相关组)
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
下方进行修改: ## Allow root to run any commands anywhere root ALL=(ALL) ALL oldboy1 ALL=(ALL) NOPASSWD: ALL(NOPASSWD: ALL就不用输入密码,否则sudo输完密码过几分钟还要输密码) oldboy1 ALL=STORAGE,SOFTWARE (该用户只能运行STORAGE和SOFTWARE组里的命令)

3)sudo配置免密码

#1.普通用户执行sudo不需要输入密码配置
[root@zls ~]# visudo
zls ALL=(ALL) /bin/rm, /bin/cp  #默认
zls   ALL=(ALL)  NOPASSWD:/bin/rm, /bin/cp  #修改后,使用rm和cp不用输密码
        
#2.默认普通用户无权删除
[zls@zls ~]$ rm -f /root/002
rm: cannot remove `/root/002': Permission denied
        
#3.验证sudo免密码执行权限
[zls@zls ~]$ sudo rm -f /root/002

4)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

7.sudo企业案例

    1)优化ssh禁止root用户登录(提权,不要给vim,vi,visudo,su,echo,cat)
    [root@oldboyedu ~]# vim /etc/ssh/sshd_config
    修改禁止root用户登录
    原来:
    #PermitRootLogin yes
    修改成:
    PermitRootLogin no
    
    修改ssh的端口
    原来:
    #Port 22
    修改成:
    Port 52013

    2)重启ssh服务    (无法ssh登录root,可以su切换root。其他用户可用sudo,但要先提权)
    [root@oldboyedu ~]# systemctl restart sshd

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

    4)visudo    (sudo配置文件)
    User_Alias USER_SU = zls1,zls2,zls    # 用户别名, 用于多用户的设置(非同一群组用户)
    Cmnd_Alias SU = /bin/su        # 命令别名, 可用于多命令设置
    USER_SU ALL=(ALL) NOPASSWD:SU    #  编辑多用户权限