• linux用户与组管理


    用户和组的基本概念:
    每个用户都有用户名且唯一编号:
    uid=0时,超级用户root,
    uid在201-999之间,系统用户,
    uid在1000以上,普通用户
    所属组及其默认的shell:
    /sbin/nologin:系统用户
    bin:普通用户

    /etc/passwd文件里记录的是操作系统中用户的信息,这里面记录了几行就表示系统中有几个系统用户。它的格式大致如下:

    | ------------------------------------------------------------------ |
    | root:x:0:0:root:/root:/bin/bash                                    |   
    |                                                                    |
    | bin:x:1:1:bin:/bin:/sbin/nologin                                   |
    |                                                                    |
    | shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown                       |
    |                                                                    |
    | halt:x:7:0:halt:/sbin:/sbin/halt                                   |
    |                                                                    |
    | ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin                        |
    |                                                                    |
    | nobody:x:99:99:Nobody:/:/sbin/nologin                              |
    |                                                                    |
    | sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin |
    |                                                                    |
    | mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash                |
    |                                                                    |
    | nginx:x:498:499:Nginx web server:/var/lib/nginx:/sbin/nologin      |
    |                                                                    |
    | longshuai:x:1000:1000::/home/longshuai:/bin/bash                   |
    

    每一行表示一个用户,每一行的格式都是6个冒号共7列属性,其中有很多用户的某些列属性是留空的。
    用户名❌uid:gid:用户注释信息:家目录:使用的shell类型

    • 第一列:用户名。注意两个个特殊的用户名,root、nobody
    • 第二列:x。在以前老版本的系统上,第二列是存放用户密码的,但是密码和用户信息放在一起不便于管理(密钥要保证其特殊属性),所以后来将密码单独放在另一个文件/etc/shadow中,这里就都写成x了
    • 第三列:uid
    • 第四列:gid
    • 第五列:用户注释信息。
    • 第六列:用户家目录。注意root用户的家目录为/root
    • 第七列:用户的默认shell,虽然叫shell,但其实可以是任意一个可执行程序或脚本。例如上面的/bin/bash、/sbin/nologin、/sbin/shutdown

    密码文件/etc/shadow
    /etc/shadow文件中存放的是用户的密码信息。该文件具有特殊属性,除了超级管理员,任何人都不能直接读取和修改该文件,而用户自身之所以能修改密码,则是因为passwd程序的suid属性,使得修改密码时临时提升为root权限。

    root:$6$hS4yqJu7WQfGlk0M$Xj/SCS5z4BWSZKN0raNncu6VMuWdUVbDScMYxOgB7mXUj./dXJN0zADAXQUMg0CuWVRyZUu6npPLWoyv8eXPA.::0:99999:7::: 
    ftp:*:16659:0:99999:7::: nobody:*:16659:0:99999:7::: 
    longshuai:$6$8LGe6Eh6$vox9.OF3J9nD0KtOYj2hE9DjfU3iRN.v3up4PbKKGWLOy3k1Up50bbo7Xii/Uti05hlqhktAf/dZFy2RrGp5W/:17323:0:99999:7:::
    
    • 第一列:用户名。
    • 第二列:加密后的密码。但是这一列是有玄机的,有些特殊的字符表示特殊的意义。
      ①.该列留空,即"::",表示该用户没有密码。
      ②.该列为"!",即":!:",表示该用户被锁,被锁将无法登陆,但是可能其他的登录方式是不受限制的,如ssh key的方式,su的方式。
      ③.该列为"",即"::",也表示该用户被锁,和"!"效果是一样的。
      ④.该列以"!"或"!!"开头,则也表示该用户被锁。
      ⑤.该列为"!!",即":!!:",表示该用户从来没设置过密码。
      ⑥.如果格式为"(id)salt(hashed",则表示该用户密码正常。其中)id$的id表示密码的加密算法,(1)表示使用MD5算法,(2a)表示使用Blowfish算法,"(2y)"是另一算法长度的Blowfish,"(5)"表示 SHA-256算法,而"(6)"表示SHA-512算法,可见上面的结果中都是使用sha-512算法的。(5)(6)这两种算法的破解难度远高于MD5。(salt)是加密时使用的salt,$hashed才是真正的密码部分。
    • 第三列:从1970年1月1日到上次密码修改经过的时间(天数)。通过计算现在离1970年1月1日的天数减去这个值,结果就是上次修改密码到现在已经经过了多少天,即现在的密码已经使用了多少天。
    • 第四列:密码最少使用期限(天数)。省略或者0表示不设置期限。例如,刚修改完密码又想修改,可以限制多久才能再次修改
    • 第五列:密码最大使用期限(天数)。超过了它不一定密码就失效,可能下一个字段设置了过期后的宽限天数。设置为空时将永不过期,后面设置的提醒和警告将失效。root等一些用户的已经默认设置为了99999,表示永不过期。如果值设置小于最短使用期限,用户将不能修改密码。
    • 第六列:密码过期前多少天就开始提醒用户密码将要过期。空或0将不提醒。
    • 第七列:密码过期后宽限的天数,在宽限时间内用户无法使用原密码登录,必须改密码或者联系管理员。设置为空表示没有强制的宽限时间,可以过期后的任意时间内修改密码。
    • 第八列:帐号过期时间。从1970年1月1日开始计算天数。设置为空帐号将永不过期,不能设置为0。不同于密码过期,密码过期后账户还有效,改密码后还能登录;帐号过期后帐号失效,修改密码重设密码都无法使用该帐号。
    • 第九列:保留字段。

    组文件/etc/group和/etc/gshadow(包含组密码信息)
    /etc/group包含了组信息。每行一个组,每一行3个冒号共4列属性。
    root:x:0: longshuai:x:500: xiaofang:x:501:zhangsan,lisi

    • 第一列:组名。
    • 第二列:占位符。
    • 第三列:gid。
    • 第四列:该组下的user列表,这些user成员以该组做为辅助组,多个成员使用逗号隔开。

    /etc/login.defs
    /etc/login.defs文件定义了与/etc/password和/etc/shadow配套的用户限制设定。
    如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准,也就是说/etc/shadow的配置优先级高于/etc/login.defs。
    ./etc/login.defs的使用

    # *REQUIRED* required
    #  Directory where mailboxes reside, _or_ name of file, relative to the
    #   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
    #   QMAIL_DIR is for Qmail
    #
    #QMAIL_DIR      Maildir
    MAIL_DIR        /var/spool/mail #创建用户时,要在目录/var/spool/mail中创建一个用户mail文件
    
    #MAIL_FILE      .mail
    
    # Password aging controls:
    #
    #       PASS_MAX_DAYS   Maximum number of days a password may be used.
    #       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
    #       PASS_MIN_LEN    Minimum acceptable password length.
    #       PASS_WARN_AGE   Number of days warning given before a password expires.
    PASS_MAX_DAYS   99999  #密码最大有效期
    PASS_MIN_DAYS   0     #两次修改密码的最小间隔时间
    PASS_MIN_LEN    5     #密码最小长度,对于root无效
    PASS_WARN_AGE   7      #密码过期前多少天开始提示
    
    # Min/max values for automatic uid selection in useradd
    #创建用户时不指定UID的话自动UID的范围
    UID_MIN                   500 #用户ID的最小值
    UID_MAX                 60000   #用户ID的最大值
    
    # Min/max values for automatic gid selection in groupadd
    #自动组ID的范围
    GID_MIN                   500  #组ID的最小值
    GID_MAX                 60000  #组ID的最大值
    
    
    # If defined, this command is run when removing a user.
    # It should remove any at/cron/print jobs etc. owned by
    # the user to be removed (passed as the first argument).
    #
    #USERDEL_CMD    /usr/sbin/userdel_local  #当删除用户的时候执行的脚本
    
    
    #
    # If useradd should create home directories for users by default
    # On RH systems, we do. This option is overridden with the -m flag on
    # useradd command line.
    #
    CREATE_HOME     yes  #使用useradd的时候是够创建用户目录
    
    
    # The permission mask is initialized to this value. If not specified,
    # the permission mask will be initialized to 022.
    
    
    UMASK           077  #创建后用户的权限掩码
    
    # This enables userdel to remove user groups if no members exist.
    
    #
    USERGROUPS_ENAB yes  #用MD5加密密码
    

    注意,/etc/login.defs中的设置控制的是shadow-utils包中的组件,也就是说,该组件中的工具执行操作时会读取该文件中的配置。该组件中包含下面的程序:

    /usr/bin/gpasswd      :administer /etc/group and /etc/gshadow
    /usr/bin/newgrp       :log in to a new group,可用来修改gid,哪怕是正在登陆的会话也可以修改
    /usr/bin/sg           :execute command as different group ID
    /usr/sbin/groupadd    :添加组
    /usr/sbin/groupdel    :删除组
    /usr/sbin/groupmems   :管理当前用户的主组中的成员,root用户则可以指定要管理的组
    /usr/sbin/groupmod    :modify a group definition on the system
    /usr/sbin/grpck       :verify integrity of group files
    /usr/sbin/grpconv     :无视它
    /usr/sbin/grpunconv   :无视它
    /usr/sbin/pwconv      :无视它
    /usr/sbin/pwunconv    :无视它
    /usr/sbin/adduser     :是useradd的一个软链接,添加用户
    /usr/sbin/chpasswd    :update passwords in batch mode
    /usr/sbin/newusers    :update and create new users in batch
    /usr/sbin/pwck        :verify integrity of passsword files
    /usr/sbin/useradd     :添加用户
    /usr/sbin/userdel     :删除用户
    /usr/sbin/usermod     :重定义用户信息
    /usr/sbin/vigr        :edit the group and shadow-group file
    /usr/sbin/vipw        :edit the password and shadow-password file
    /usr/bin/lastlog      :输出所有用户或给定用户最近登录信息
    

    /etc/default/useradd
    创建用户时的默认配置。useradd -D修改的就是此文件。

    [root@xuexi ~]# cat /etc/default/useradd  
    # useradd defaults file
    GROUP=100       # 在useradd使用-N或/etc/login.defs中USERGROUPS_ENAB=no时表示创建用户时不创建同用户名的主组(primary group),
                    # 此时新建的用户将默认以此组为主组,网上关于该设置的很多说明都是错的,具体可看man useradd的-g选项或useradd -D的-g选项
    HOME=/home      # 把用户的家目录建在/home中
    INACTIVE=-1     # 是否启用帐号过期设置(是帐号过期不是密码过期),-1表示不启用
    EXPIRE=         # 帐号过期时间,不设置表示不启用
    SHELL=/bin/bash # 新建用户默认的shell类型
    SKEL=/etc/skel  # 指定骨架目录,前文的/etc/skel就在这里
    CREATE_MAIL_SPOOL=yes  # 是否创建用户mail缓冲
    

    passwd 命令用于修改用户密码,过期时间,认证信息等。
    普通用户只能使用 passwd 命令修改自身的系统密码,而 root 管理员则有权限修改其他所有人的密码。更酷的是,root 管理员在 Linux 系统中
    修改自己或他人的密码时不需要验证旧密码,这一点特别方便。既然 root 管理员可以修改其他用户的密码,就表示完全拥有该用户的管理权限。

    passwd命令:

    passwd-i:锁定密码禁止登录
    passwd-u:解除锁定允许登录``
    passwd-d:删除密码,使用空密码登录
    passwd-e:强制用户下次登录修改密码
    

    usermod 命令修改系统帐户文件来反映通过命令行指定的变化

    usermod命令:

    -a|--append  ##把用户追加到某些组中,仅与-G选项一起使用 
    -c|--comment ##修改/etc/passwd文件第五段comment 
    -d|--home    ##修改用户的家目录通常和-m选项一起使用 
    -e|--expiredate  ##指定用户帐号禁用的日期,格式YY-MM-DD ``
    -f|--inactive    ##用户密码过期多少天后采用就禁用该帐号,0表示密码已过期就禁用帐号,-1表示禁用此功能,默认值是-1 
    -g|--gid     ##修改用户的gid,改组一定存在
    -G|--groups  ##把用户追加到某些组中,仅与-a选项一起使用 
    -l|--login   ##修改用户的登录名称 
    -L|--lock    ##锁定用户的密码 
    -m|--move-home   ##修改用户的家目录通常和-d选项一起使用 
    -s|--shell   ##修改用户的shell 
    -u|--uid     ##修改用户的uid,该uid必须唯一 
    -U|--unlock  ##解锁用户的密码 
    

    userdel 是一个底层用于删除用户的工具,注意权限

    userdel命令:

    userdel-f:强制删除用户
    

    组账号管理:

    1. 增加一个新的用户组使用groupadd命令
      格式:groupadd 选项 用户组
      • -g:指定组,默认GID
      • -o:指于上一个组
    2. 如果要删除一个已有的用户组,使用groupdel命令
      格式:groupdel 用户组
      修改用户组的属性使用groupmod命令
      格式:groupmod 选项 用户组
      • -g:指定新的组标
      • -n:该为新的组名
    3. 如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。
      用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。
  • 相关阅读:
    状压DP之排列perm
    CodeForces 578F Mirror Box
    Berlekamp-Massey算法
    图解git操作
    yapi安装
    springcloud gateway
    springcloud alibaba
    反射和内置方法
    绑定方法与非绑定方法
    多态性和鸭子类型
  • 原文地址:https://www.cnblogs.com/wml3030/p/15124636.html
Copyright © 2020-2023  润新知