zoukankan      html  css  js  c++  java
  • linux之用户、用户组、用户提权

    一、用户管理

    1、介绍

    1、Linux下系统允许同一个时刻多个用户同时登陆,创建用户,对用户进行管理,可以避免因root权限过大,造成故障。

    2、用户密码存放的位置

    用户信息都是存在/etc/passwd,但是没有存密码,密码是存在/etc/shadow中

    密码存放文件/etc/shadow

     3、用户UID一般约定

    用户uid 约定含义
    0 超级管理员,最高权限
    1~200 系统用户,用来运行系统自带的进程,默认已创建
    201~999 系统用户,用来运行用户安装的程序,这类用户无需登录系统
    1000以上 普通用户,正常可以登陆系统的用户,权限比较小,执行的任务有限

    二、用户相关的命令

    1、查看用户

    [root@192 ~]# id
    uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    # uid:用户id,系统只能识别uid,不能识别名字,人看名字
    # gid:组id
    
    # id+用户名,查看指定用户
    [root@192 ~]# id mysql
    uid=5002(mysql) gid=5002(mysql) groups=5002(mysql)

    2、新增用户

    注意:adduser也可以创建用户,但是adduser命令软链接是指向useradd命令,实质还是执行adduser

    #选项
    # -u 指定要创建用户的UID,不允许冲突
    # -g 指定要创建用户默认组
    # -G 指定要创建用户附加组,逗号隔开可添加多个附加组
    # -d 指定要创建用户家目录
    '''
    /bin/bash     # 可以登陆系统
    /sbin/nologin # 不可以登陆系统,一般用在只需启动服务的那些用户
    '''
    # -s 指定要创建用户的bash shell  /bin/bash   /sbin/nologin
    # -c 指定要创建用户注释信息
    # -M 给创建的用户不创建家目录
    # -r 创建系统账户,默认无家目录
    
    
    #1.创建nq31用户,UID5001,基本组students,附加组sa 注释信息,登陆shell:/bin/bash
    [root@192 ~]# groupadd sa       #新增一个组
    [root@192 ~]# groupadd students #新增一个组
    [root@192 ~]# useradd -u 5001 -g students -G sa -c "这是用户注释信息" -s /bin/bash nq31
    
    #2.创建mysql系统用户,-M不建立用户家目录 -s指定nologin使其用户无法登陆系统
    [root@192 ~]# useradd mysql -M -s /sbin/nologin
    [root@192 ~]# useradd -r admin -s /sbin/nologin

    3、修改用户信息

    #选项
    # -u 指定要修改用户的UID
    # -g 指定要修改用户基本组
    # -G 指定要修改用户附加组,使用逗号隔开多个附加组, 覆盖原有的附加组,-aG追加
    # -d 指定要修改用户家目录 -md 旧家搬新家
    # -s 指定要修改用户的bash shell
    # -c 指定要修改用户注释信息
    # -l 指定要修改用户的登陆名
    # -L 指定要锁定的用户
    # -U 指定要解锁的用户
    
    #1.检查此前创建的用户信息
    [root@bgx ~]# grep "bgx" /etc/passwd
    bgx:x:5001:503:2019 new student:/home/bgx:/bin/bash
    
    #2.修改bgx用户uid、gid,附加组  -a表示追加
    [root@bgx ~]# groupadd -g 5008 network_sa
    [root@bgx ~]# groupadd -g 5009 devops
    [root@bgx ~]# usermod -u 6001 -g5008 -a -G 5009 bgx
    
    #3.修改bgx用户的注释信息, 用户家目录, 登录shell, 登录名 -l:改名字,-md,把环境也带过去
    [root@bgx ~]# usermod -c "2019 new student" -md /bgx -s /bin/sh -l change_bgx bgx
    
    #检查是否修改成功
    [root@bgx ~]# grep "bgx" /etc/passwd
    bgx_lqz:x:6001:5008:2019 new student:/bgx:/bin/sh
    [root@bgx ~]# id change_bgx
    uid=6001(change_bgx) gid=5008(network_sa) groups=5008(network_sa),503(sa),5009(devops)
    [root@bgx ~]# ll -d /bgx
    drwx------. 2 bgx_lqz network_sa 4096 2014-09-23 00:13 /bgx
    
    #4.锁定用户[扩展]
    [root@bgx ~]# echo "123" |passwd --stdin change_bgx
    [root@bgx ~]# usermod -L change_bgx  #锁定后会无法登陆系统
    
    #5.解锁用户[扩展]
    [root@bgx ~]# usermod -U change_bgx

    4、删除用户

    使用userdel命令删除账户

    #选项 -r 删除用户同时删除它的家目录
    
    #1.删除user1用户,但不删除用户家目录和 mail spool
    [root@bgx ~]# userdel user1
    [root@bgx ~]# ls /var/spool/mail/
    
    #2.-r参数可以连同用户家目录一起删除(慎用)
    [root@bgx ~]# userdel -r user1

    5、设置、修改密码

    '''
    root超级用户可以给其他用户修改密码
    普通用户只能自己修改自己
    '''
    passwd + 用户名
    echo "密码" | passwd --stdin 用户名 #非交互式修改密码

    三、用户组管理

    1、用户组概念

    用户组本质:就是一种逻辑层面的定义,逻辑上将多个用户归纳至一个组,当对组操作,就相当于对组内所有用户操作

    主要分为:基本组、附加组

     2、组的信息位置

    一般存放在 /etc/group 和 /etc/gshadow两个文件

    (1)/etc/group 配置(比较重要)

     (2)/etc/gshadow配置文件

     3、组的基本命令

    #查看所有组命令:cat /etc/group
    #查看当前用户所属组:groups
    #查看用户所属组;groups 用户名
    '''
    1、groupadd 新增组
    '''
    #创建基本组, 不指定gid
    [root@bgx ~]# groupadd no_gid
    [root@bgx ~]# tail -n1 /etc/group
    no_gid:x:1000:
    #创建基本组, 指定gid为5555
    [root@bgx ~]# groupadd -g 5555 yes_gid
    [root@bgx ~]# tail -n1 /etc/group
    yes_gid:x:5555:
    #创建系统组,gid从201-999
    [root@bgx ~]# groupadd -r sys_group
    [root@bgx ~]# tail -n1 /etc/group
    sys_group:x:990:
    
    '''
    2、groupmod修改组           
    #-g 修改组gid
    '''
    [root@bgx ~]# groupmod -g 1111 no_gid
    [root@bgx ~]# tail -1 /etc/group
    no_gid:x:1111:
    #-n 修改组名称(把yes_gid名字改为active_group)
    [root@bgx ~]# groupmod yes_gid -n active_group 
    [root@bgx ~]# tail -1 /etc/group
    active_group:x:5555:
    
    '''
    # 3、groupdel删除组
    注意:删除时需要注意,如果用户存在基本组则无法直接删除该组,如果删除用户则会移除默认的私有组,而不会移除基本组
    '''
    
    # 私有组的情况,直接删除用户,组也就没了
    [root@bgx ~]# userdel jack
    #删除组
    [root@bgx ~]# groupdel active_group
    #删除用户附加组
    [root@bgx ~]# id lqz
    uid=1069(lqz) gid=5005(lqz) groups=5005(lqz),5004(devops)
    [root@bgx ~]# groupdel devops
    [root@bgx ~]# id lqz
    uid=1069(lqz) gid=5005(lqz) groups=5005(lqz)
    #无法删除用户基本组
    [root@bgx ~]# groupdel network_sa
    groupdel: cannot remove the primary group of user 'bgx_lqz'
    #只有删除用户或者用户变更基本后,方可删除该组
    
    '''
    4、gpasswd设置组密码
    '''
    [root@bgx ~]# groupadd devops
    [root@bgx ~]# gpasswd devops
    Changing the password for group devops
    New Password:
    Re-enter new password:
        
    '''
    5、newgrp切换基本组身份
    '''
    #使用newgrp切换到devops组
    [lqz@bgx ~]$ newgrp devops
    Password:
    
    #5.创建文件,检查属主和属组
    [lqz@bgx ~]$ touch file_test
    [lqz@bgx ~]$ ll
    -rw-rw-r-- 1 lqz lqz 0 Jun 13 10:06 file_roots
    -rw-r--r-- 1 lqz devops     0 Jun 13 10:08 file_test

    4、组变更命令chgrp

    '''
    --------组变更命令---------
    chgrp options 所属群组 文件或目录
    --------options参数-----------
    -c或--changes 效果类似"-v"参数,但仅回报更改的部分。
    -f或--quiet或--silent  不显示错误信息。
    -h或--no-dereference  只对符号连接的文件作修改,而不更动其他任何相关文件。
    -R或--recursive  递归处理,将指定目录下的所有文件及子目录一并处理。(常用)
    -v或--verbose  显示指令执行过程。
    --help  在线帮助。
    --reference=<参考文件或目录>  把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。
    --version  显示版本信息
    '''
    [root@VM-4-16-centos ~]#chgrp -R hr /home/test/  #将test文件夹所有文件属组更改为hr
    [root@VM-4-16-centos ~]#ll /home/test
    total 4
    -rwxr-xr-x 1 root hr    0 Jan 10 15:26 file
    drwxr-xr-x 2 root hr 4096 Jan 10 15:53 mulu

     四、用户提权

    1、提权方式

    (1)用户提权方式有两种:

    su:切换到root用户,需要知道root的密码,安全性不高

    sudo:无需切换到root,方便安全,但是,相对会复杂一点

    2、su 

    '''
    su - username  属于登陆式shell
    su username    属于非登陆式shell
    区别:加载的环境变量不一样,su - 会加载用户的环境变量
    普通用户切换超级用户需要密码
    超级用户切换普通用户不需要密码
    '''
    #1.普通用户使用su切换root
    [root@VM-4-16-centos ~]$ su 
    密码:         #输入root的密码
    [root@VM-4-16-centos ~]# pwd
    /root
    #2.普通用户使用su -切换到root,会加载root的环境变量
    [test@VM-4-16-centos ~]$ su -
    Password: 
    Last login: Sat Jan  9 15:31:28 CST 2021 on pts/0
    Last failed login: Sat Jan  9 15:34:20 CST 2021 from 222.186.133.50 on ssh:notty
    There were 104 failed login attempts since the last successful login.
    [root@VM-4-16-centos ~]#pwd
    /root
    #3.以某个用户的身份执行某个服务,使用命令su -c username
    [root@VM-4-16-centos ~]#su - test -c 'ifconfig'
    [root@VM-4-16-centos ~]# su - lqz -c 'ls ~'
    # 4 关闭root远程登陆,普通用户登进来,su - 切换到root用户
    vim /etc/ssh/sshd_config
    PermitRootLogin yes  # 设成no

    3、sudo

    sudo方式:使用方式,在命令前添加sudo,进行提权

    (1) 命令配置

    '''
    sudo配置
    检测配置是否有误:visudo -c
    查看对主机有哪些权限:sudo -l
    '''
    #1、快速配置方式:将用户加到wheel组中,因为wheel组是已经配置了sudo的 
    [root@VM-4-16-centos test2]# usermod test2 -G wheel
    
    #2、正常配置方式,在vi sudo 或者vim /etc/sudoers中配置
    [root@VM-4-16-centos test2]# vim /etc/sudoers
    ## The COMMANDS section may have other options added to it.
    ##
    ## Allow root to run any commands anywhere 
    # Defaults   env_keep += "HOME"
    
    ..........
    '''
    用户名        主机名=(角色名)  命令名
    test             ALL=(ALL)        ALL
    注意:用户名前加%表示组
    '''
    test ALL=(ALL) ALL #允许用户test执行sudo所有命令,需要输入密码
    test ALL=(ALL) NOPASSWD:/usr/bin/yum,/usr/sbin/useradd  #  允许用户test执行sudo中的yum、useradd命令,不需要输入密
    %wheel  ALL=(ALL)       ALL

    (2)sudo四种别名

    '''
    sudo四种类型别名:
    1、用户别名:User_Alias
    2、主机别名:Host_Alias
    3、runas别名:Runas_Alias
    4、COMMAND别名:Cmnd_Alias
    
    总结:四类别名都需要大写,都可以进行嵌套
    '''
    #1、用一个用户别名一次性将多个用户定义为一个用户组
    User_Alias 自定义用户别名 = 用户1,用户2....
    User_Alias UA = root,%wheel
    User_Alias UB= UA
    #注意:用户名还可以是%用户组名,已经定义好的用户别名
    
    #2、使用主机别名来定义一组主机
    Host_Alias HOSTSNAME(自定义别名) = localhost1,localhost2
    #注意,主机名可以是一个ip地址、网络地址、也可以是已经定义了的主机别名
    
    #3、使用其他用户的身份去执行相关的命令
    Runas_Alias RA(自定义别名) = username,uid,%wheel
    
    #4、命令别名
    Cmnd_Alias NETWORKING(自定义别名) = /sbin/ifconfig, /bin/ping
    #命令可以是目录,也可以是其他定义好的命令别名

    (3)命令使用限制

    1、sudo的用户别名,将多个用户定义成一个组,进行命令使用限制

     2、将用户添加到指定的组里,然后给组分配权限

     (4)sudo执行流程

    五、扩展知识点shell

    (1)shell主要分为四类:

    交互式shell,等待用户输入命令进行交互(日常使用ssh操作服务器一样)

    非交互式shell,执行shell脚本,结束后会自动退出

    登陆shell,需要输入用户名和密码才能进入shell

    非登陆shell,不需要输入用户和密码就能进入shell

    (2)shell配置文件

    个人配置文件: ~/.bash_profile    ~/.bashrc

    全局配置文件:/etc/profile  /etc/profile.d/*.sh   /etc/bashrc

    注意:个人优先级大于全局

               profile类文件,主要设定环境变量,登陆前运行的脚本和命令

               bashrc类文件,主要是设定本地变量,定义命令的别名

    登陆式shell配置文件执行顺序:/etc/profile -> /etc/profile.d/.sh -> /.bash_profile -> /.bashrc -> /etc/bashrc

    非登陆式shell配置文件执行顺序:~/.bashrc -> /etc/bashrc -> /etc/profile.d/.sh

  • 相关阅读:
    Python正则表达式很难?一篇文章搞定他,不是我吹!
    该用Python还是SQL?4个案例教你节省时间
    解决mysql中只能通过localhost访问不能通过ip访问的问题
    MySql按周/月/日分组统计数据的方法
    jquery清空form表单
    eclipse 创建 maven web工程
    微信授权登录
    bootstrap滑动开关插件使用
    去除编译警告@SuppressWarnings注解用法详解(转)
    dataTables添加序号和行选中框
  • 原文地址:https://www.cnblogs.com/nq31/p/14253715.html
Copyright © 2011-2022 走看看