4.Linux用户组和权限管理

4. Linux用户组和权限管理

4.1 Linux用户和组介绍

4.1.1 用户和组的关系

  • 查看用户所属组

    $ id snowing 
    # uid:用户 gid:用户主组 groups:用户主组及其附属组
    uid=1000(snowing) gid=1000(snowing) groups=1000(snowing),4(adm),24(cdrom),27(sudo)
    
    #一个用户必须有一个主组,且只能有一个
    $ id -g snowing 
    1000
    $ id -gn snowing 
    snowing
    
    #一个用户可以有多个附属组,也可以没有附属组
    $ id -G snowing 
    1000 4 24 27 30 46 122 135 136
    $ groups snowing 
    snowing : snowing adm cdrom sudo dip plugdev lpadmin lxd sambashare
    

4.1.2 用户和组相关配置文件

  • 查看配置文件帮助文档

    # (报错:No manual entry for group) 安装man-pages包
    $ yum install -y man-pages
    
    # (报错:nothing appropriate) 刷新man缓存
    $ mandb
    
    # whatis FILENAME : 查询FILE的man章节序号
    passwd (1)           - change user password
    passwd (5)           - the password file
    
    # /etc/passwd
    $ man 5 passwd
    
    # /etc/shadow
    $ man 5 shadow
    
    # /etc/group
    $ man 5 group
    
    # /etc/gshadow
    $ man 5 gshadow 
    
  • /etc/passwd 用户文件

    # name:password:UID:GID:comment:directory:shell
    $ getent passwd sara
    sara:x:1002:1002:saraName:/home/sara:/bin/bash
    
    $ cat /etc/passwd
    demo:x:1001:1001::/home/demo:/bin/bash
    
  • /etc/shadow 密码管理文件

    # login name : encrypted password : date of last password change : minimum password age : maximum password age:
    # password warning period : password inactivity period : account expiration date : reserved field
    $ getent shadow sara
    sara:!!:19583:0:99999:7:::
    
    # 用户名:密码:上次改口令时间:最小改口令间隔:最大改口令间隔:口令到期前几天预警:口令到期后几天禁用:口令到期日期
    # cat /etc/shadow
    demo:$6$rN.m2Oca$UwSheU52AhJxbed6VeVKjTP.5H4DGXxWTovGb6.dJJ4TNqLUIV5defcW5/y6SEldSN7NgJaTy.xpHCVkK54D40:19549:0:99999:7:::
    
  • /etc/group 组文件

    # group_name : password : GID : user_list
    $ getent group Sara
    Sara:x:1002:
    
    # 组名:密码占位符:组ID:组成员
    $ cat /etc/group
    demo:x:1001:demo,sara
    
  • /etc/gshadow 组密码管理文件

    # group name : encrypted password : administrators : members
    $ getent gshadow Sara
    Sara:!::
    
    # 组名:组密码占位符:组管理员:组成员
    $ cat /etc/gshadow
    demo:!::demo,sara
    

4.1.4 默认配置文件模板

  • 执行useradd LOGIN命令所参考的模板配置文件

    # useradd defaults file
    $ cat /etc/default/useradd 
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/bash
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes
    
    # home directory 默认包含文件来源
    $ ls -a /etc/skel
    .  ..  .bash_logout  .bash_profile  .bashrc
    
  • /etc/shadow 文件模板

    # shadow password suite configuration
    # 用户shadow配置文件模板
    cat /etc/login.defs
    

4.2 Linux用户和组管理

4.2.1 Linux组管理

  • groupadd 新增组

    # 命令格式
    groupadd [options] GROUP
    
    # -g, --gid GID  新增时指定gid
    $ groupadd -g 1001 sara
    
    # -r, --system  创建系统账户
    $ groupadd -r groupName
    
  • groupmod 修改组

    # 命令格式
    groupmod [options] GROUP
    
    # -g, --gid GID  修改组id
    $ groupmod -g 2000 groupName
    
    # -n, --new-name NEW_GROUP  修改组名
    $ groupmod -n NewGroupName groupName
    
    # 查看
    $ getent group NewGroupName
    NewGroupName:x:2000:
    
  • groupdel 删除组

    # 命令格式
    groupdel [options] GROUP
    
    # 默认删除,如果是用户主组则无法删除
    $ groupdel NewGroupName
    groupdel: cannot remove the primary group of user 'test'
    
    # -f, --force 强制删除,即使时用户主组也可以删除(centos7没有该选项)
    $ groupdel -f NewGroupName
    

4.2.2 Linux用户管理

  • useradd 新增用户

    # 命令格式
    useradd [options] LOGIN
    
    # 常用选项
      -r, --system                  create a system account
      -u, --uid UID                 user ID of the new account
      -g, --gid GROUP               name or ID of the primary group of the new account
      -G, --groups GROUPS           list of supplementary groups of the new account
      -c, --comment COMMENT         GECOS field of the new account
      -d, --home-dir HOME_DIR       home directory of the new account
      -s, --shell SHELL             login shell of the new account
    
    # 创建非系统用户
    $ useradd -u 1002 -g Sara -G demo -c "saraName" -d /home/sara -s /bin/bash sara
    
    # 创建系统用户
    useradd -r -u 48 -g apache -c "Apache" -d /var/www -s /sbin/nologin apache
    
  • usermod 修改用户

    # 命令格式
    usermod [options] LOGIN
    
    # 常用选项,参考useradd的选项(没有-r选项)
    usermod -u -g -G -c -d -s userName
    
    # 修改uid
    $ usermod -u 1007 userName
    
  • userdel 删除用户

    # 命令格式
    $ userdel [options] LOGIN
    
    # 默认删除,保留家目录和邮箱
    $ userdel userName
    
    # -f, --force 强制删除,正在登录的用户也可以删除
    $ userdel -f loginUser
    
    # -r, --remove 同时删除家目录和邮箱
    $ userdel -r userName
    

4.2.3 Linux密码管理

  • passwd 修改密码

    # 命令格式
    passwd [options] [LOGIN]
    
    # 默认交互式修改
    $ passwd userName
    
    # 非交互式修改(centos7)
    $ echo "123456" | passwd --stdin userName
    $ echo "userName:123456" | chpasswd
    
    # 非交互式更改(ubuntu,密码不能太简单)
    $ sudo su - root
    $ echo "userName:12345678" | chpasswd
    
  • chage 命令修改/etc/shadow文件(密码策略文件)

    # 命令格式
    chage [options] LOGIN
    
    # 默认交互式修改
    [root@localhost ~]# chage userName
      Minimum Password Age [0]: 7
      Maximum Password Age [99999]: 500
      Last Password Change (YYYY-MM-DD) [2023-08-14]: 2023-08-21           
      Password Expiration Warning [7]: 3
      Password Inactive [-1]: 5
      Account Expiration Date (YYYY-MM-DD) [-1]: 2024-08-01 
    # 查看修改结果
    $ getent shadow userName
    userName:!!:19590:7:500:3:5:19936:
    
    # 使用选项修改
    $ chage -m 0 -M 99999 -w 7 -I -1 -E -1 userName
    # 查看修改结果
    $ getent shadow userName
    userName:!!:19590:0:99999:7:::
    
    # 强制下次登录时修改密码
    $ chage -d 0 userName
    
  • su 切换用户

    # 命令格式
    su [options] [-] LOGIN
    
    # Change UID and GID to userName (不切换工作环境)
    $ su userName
    
    # -, -l, --login   make the shell a login shell (切换工作环境)
    $ su - userName
    $ su -l userName
    
    # -c `CMD` 以指定用户指定单条命令
    $ su - root -c `cat /etc/sudoers`
    

4.2.4 Linux用户查看

  • id 查看用户信息

    # 命令格式
    id [OPTION] LOGIN
    
    # 默认显示uid gid groups
    $ id demo
    uid=1000(demo) gid=1001(zookeeper) groups=1001(zookeeper),1002(docker)
    
    $ id -u demo
    1000
    $ id -g demo
    1001
    $ id -G demo
    1001 1002
    
    # -n,显示名称,需要和其他选项组合使用,-un,-gn,-Gn
    $ id -un demo
    demo
    $ id -gn demo
    zookeeper
    $ id -Gn demo
    zookeeper docker
    

4.2.5 sudo权限

  • sudo权限管理

    # 修改配置文件方式
    $ vim /etc/sudoers
    
    # visudo命令方式
    $ visudo                               
    ## Same thing without a password
    # %wheel        ALL=(ALL)       NOPASSWD: ALL
    demo        ALL=(ALL)       NOPASSWD: ALL
    

4.3 Linux权限管理

4.3.1 Linux文件权限介绍

  • [ugoa...] 说明

    u : the user who owns it  
    g : other users in the file's group  
    o : other users not in the file's group  
    a : all users  
    
  • [rwxXst...] 说明

    r : read, ( w : write ) , ( x : execute or search for directories )  
    X : execute/search only if the file is a directory or already has execute  permission for some user  
    s : set user or group ID on execution  
    t : restricted deletion flag or sticky bit  
    
    # 对于文件夹而言
    r : ls
    w : touch , rm , mkdir , rmdir
    x : cd
    
  • OCTAL-MODE 说明

    # OCTAL-MODE 通常由3个8进制数字组成(实际有4个)
    the first digit :the user who owns the file
    the second digit:users in the file's group
    the third digit :other users not in the file's group
    
    # 每个8进制是由3位2进制组成,每位依次代表rwx
    read (4), write (2), and execute (1)
    
    #    此处的[111][101][100] 不妨用 [421][401][400]表示,便于理解
    754 <---> [421][401][400] <---> [rwx][r-x][r--]
    ugo <--->  uuu  ggg  ooo  <--->  uuu  ggg  ooo
    

4.3.2 符号模式 (a symbolic mode)

  • chmod 符号模式管理权限

    # 命令格式
    chmod [OPTION]... MODE[,MODE]... FILE...
    
    ######### 模式:[ugoa...][[-+=][rwxXst...]...]
    chmod [ugoa][-+=][rwxXst] FILE
    $ chmod g+wx fileNAME
    
    # [ugoa...],对谁赋权
    a single letter from the set ugoa
    
    # [rwxXst...],赋什么权
    either zero or more letters from the set rwxXst
    
    ########## 参数 ################
    # -R, --recursive 递归添加,为所有用户(a)只对文件夹添加执行权限(X)
    $ chmod -R a+X dirName
    

4.3.3 八进制数字模式 (an octal number)

  • chmod 数字模式管理权限

    # 命令格式
    chmod [OPTION]... OCTAL-MODE FILE...
    
    ############ 模式 : OCTAL-MODE ####################
    chmod OCTAL-MODE fileName
    
    # 赋权 754 
    $ chmod 754 fileName
    
    # 赋权 754 含义分析
    chmod [421][401][400] fileName
    chmod [rwx][r-x][r--] fileName
    
    ############ 参数  ####################
    # -R, --recursive 递归添加
    $ chmod -R 754 dirName
    

4.3.3 修改文件所属用户及组

  • chown 修改文件所属用户和组

    # 命令格式
    chown [OPTION]... [OWNER][:[GROUP]] FILE...
    
    # 只修改用户
    chown sara fileName
    
    # 修改用户和组
    chown sara:SaraGroup fileName
    
    # -R, --recursive 递归修改
    chown -R sara:SaraGroup dirName
    
  • chgrp 只修改文件所属组

    # 命令格式
    chgrp [OPTION]... GROUP FILE...
    
    # -R, --recursive 递归修改
    chgrp SaraGroup dirName
    

4.4 Linux默认文件权限和特殊文件权限

4.4.1 Linux文件默认权限

  • umask 命令与文件默认权限的计算

    ################## 新建文件默认权限:666-umask[奇数位加1] ##################
    # umask=022,666-022=644
    [root@localhost ~]# umask 022
    # 666-umask=644,没有奇数位,ugo=644
    [root@localhost ~]# touch a.txt
    [root@localhost ~]# ll
    -rw-r--r--  1 root root    0 Aug 22 21:34 a.txt
    
    # umask=035,666-035=631
    [root@localhost ~]# umask 035
    # 666-umask=631,存在奇数位,ugo=631(奇数位+1)=642
    [root@localhost ~]# touch b.txt
    [root@localhost ~]# ll
    -rw-r---w-  1 root root    0 Aug 22 22:00 b.txt
    
    ################## 新建文件夹默认权限:777-umask #########################
    # umask=022,777-022=755
    [root@localhost ~]# umask 022
    # 777-umask=755,所以 ugo=755
    [root@localhost ~]# mkdir dirName
    [root@localhost ~]# ll
    drwxr-xr-x  2 root root 4096 Aug 22 22:09 dirName
    
  • umask 设置与查看权限

    # 命令格式
    umask [-p] [-S] [mode]
    
    # 查看umask权限 (默认root为022,普通用户为002)
    [root@localhost ~]# umask
    0022
    
    # 临时设置umask权限,当前shell有效
    $ umask 022
    
    # 永久设置umask权限,修改.bashrc文件,添加umask 022
    echo "umask 022" >> .bashrc
    

4.4.2 Linux特殊文件权限

  • suid 权限

    # suid 权限说明
    set user ID (4) : 用户LOGIN临时以文件所有者身份(UID)执行该二进制文件(可执行文件)
    
    # LOGIN用户执行passwd时,临时以passwd文件所属用户root的身份执行
    [root@localhost ~]# ll /usr/bin/passwd
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
    
    # 新增suid权限,两种方式
    chmod u+s binFileName
    chmod 4xxx binFileName
    
    # 删除suid权限,三种方式
    chmod u-s binFileName
    chmod 0xxx binFileName
    
  • sgid 权限

    # sgid 权限说明,作用在可执行文件上
    set group ID (2) : 用户LOGIN临时以文件所属组的身份(GID)执行该二进制文件(可执行文件)
    
    # sgid 权限说明,作用在目录上
    set group ID (2) : 在该目录下新建文件的所属组,为该文件夹的所属组(GID)相同,而不是与LOGIN相同
    
    
    # 新增suid权限,两种方式
    chmod g+s binFileName
    chmod 2xxx binFileName
    
    # 删除suid权限,三种方式
    chmod g-s binFileName
    chmod 0xxx binFileName
    
  • sticky 权限

    # sticky权限说明,作用于目录上
    sticky (1):restricted deletion,有限制的删除
    
    # 有限制的删除,只能删除各自所属的文件
    [root@localhost ~]# ll -d /tmp
    drwxrwxrwt. 7 root root 4096 Aug 22 21:19 /tmp
    
    # 新增suid权限,两种方式
    chmod o+t dirName
    chmod 1xxx dirName
    
    # 删除suid权限,三种方式
    chmod o-t dirName
    chmod 0xxx dirName
    

4.4.3 Linux文件特殊属性

  • lsattr 查看特殊属性

    # 查看文件夹特殊属性
    [root@localhost ~]# lsattr fileName 
    -----a-------e-- fileName
    
    # 查看文件特殊属性
    [root@localhost ~]# lsattr -d dirName
    ----i--------e-- dirName
    
  • chattr 新增和删除特殊权限

    # 查看特殊属性
    lsattr fileName
    
    # i,immutable 不可变属性(不能删除,重命名,修改)
    # 新增与删除该属性
    $ chattr +i fileName
    $ chattr -i fileName
    
    # a,append only 只能追加 属性
    # 新增与删除该属性
    $ chattr +a fileName
    $ chattr -a fileName
    
posted @ 2022-04-21 15:18  人间丶迷走  阅读(909)  评论(0编辑  收藏  举报