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切换到其他用户组,这个命令的参数就是目的用户组。
posted @ 2021-08-10 16:45  whml  阅读(187)  评论(0编辑  收藏  举报