Linux中/etc目录下passwd shadow group gshadow 四个文件功能说明介绍以及etc目录下login.defs和etc目录下deafult子目录中useradd文件中每个配置项功能说明介绍

发布时间 2023-03-25 16:21:07作者: 暴躁凯凯在线锤人

1./etc/passwd

介绍:Linux 系统中的 /etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。

root@root:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
admin:x:3:3:admin:/dev:/usr/sbin/nologin

字段与字段之间以:隔开,每个字段代表的意思如下:

1.用户名。(就是一串代表用户身份的字符串)

2.用户的密码占位符。(之前用户的密码原本存储在该字段,处于安全考虑,最后专门有了/etc/shadow文件,现在默认均由“x”替代,“x” 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中)


 

        注释:在早期的 UNIX 中,这里保存的就是真正的加密密码串,但由于所有程序都能读取此文件,非常容易造成用户数据被窃取。虽然密码是加密的,但是采用暴力破解的方式也是能够进行破解的。因此,现在 Linux 系统把真正的加密密码串放置在 /etc/shadow 文件中,此文件只有 root 用户可以浏览和操作,这样就最大限度地保证了密码的安全。需要注意的是,虽然 “x” 并不表示真正的密码,但也不能删除,如果删除了 “x”,那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆(只能在使用无密码登录,远程是不可以的),除非特殊情况(如破解用户密码),这当然是不可行的。


 

3.用户UID值,一般情况下,root的UID为0,1-499默认为系统账号,有的更大些到1000,500-65535为用户的可登录账号,有的系统从1000开始。(UID,也就是用户 ID。每个用户都有唯一的一个 UID,Linux 系统通过 UID 来识别不同的用户)


 

UID 范围:                                                     用户身份:

                 0                                                                      超级用户   ( 0 就代表这个账号是管理员账号)

                 1~499                                                              系统用户 (伪用户)

                 500~65535                                                      普通用户   (2.6.x 内核之后的 Linux 系统已经可以支持 232 个 UID 了 )               


 

4.用户的gid,linux的用户都会有两个ID,一个是用户uid,一个是用户组id。(在我们登录的时候,输入用户名和密码,首先到/etc/passwd查看是否有你输入的账号或者用户名,有的话将该账号与对应的UID和GID(在/etc/group中)读出来。然后读出主文件夹与shell的设置,然后再去检验密码是否正确,正确的话正常登录)

5.用户的账号说明解释。

6.用户的家目录文件夹。

7.用户使用的shell,如果换成/sbin/nologin时默认是没有登录环境的。(Shell 就是 Linux 的命令解释器,是用户和 Linux 内核之间沟通的桥梁)

 

‹每行用户信息都以 “:” 作为分隔符,划分为 7 个字段,每个字段所表示的含义如下:

用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell›

 

2./etc/shadow

介绍:Linux 系统中的/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”(文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性)

复制代码
root@www:~# cat /etc/shadow
root:$6$X9iEgIhv$wGtrUhjiNRp72LgCTzC1qdi.myfSU9S5nqsfr.m1KInUFoeOUBN73AmMy5sTe91biJLdHgsoimZQzeD9EvGlv1:16769:0:99999:7:::
daemon:*:16547:0:99999:7:::
bin:*:16547:0:99999:7:::
sys:*:16547:0:99999:7:::
sync:*:16547:0:99999:7:::
games:*:16547:0:99999:7:::
man:*:16547:0:99999:7:::
复制代码

字段与字段之间以:隔开,每个字段代表的意思如下:

1.用户名,与/etc/passwd中的第一个字段一致。

2.用户的密码加密字段(“该字段存放的是加密后的用户口令字,如果为空,则对应用户没有口令,登录时不需要口令; 星号代表帐号被锁定; 双叹号表示这个密码已经过期了。 $6$开头的,表明是用SHA-512加密的, $1$ 表明是用MD5加密的 $2$ 是用Blowfish加密的 $5$ 是用 SHA-256加密的。)

3.“最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。(一般这个时间起点是1970年1月1日)

4.“最小时间间隔”指的是两次修改口令之间所需的最小天数。

5.“最大时间间隔”指的是口令保持有效的最大天数。

6.“警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。

7.“不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。

8.“失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。

9.最后一个字段,为保留字段,暂时没有任何含义。

  • 注意:这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。很多软件透过这个功能,在密码串前加上 “!”、“*” 或 “x” 使密码暂时失效

   忘记自己的账户密码,该怎么处理呢?

对于普通账户的密码遗失,可以通过 root 账户解决,它会重新给你配置好指定账户的密码,而不需知道你原有的密码(利用 root 的身份使用 passwd 命令即可)

 

3. /etc/group

介绍:Linux 系统中的/ect/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中

 

[root@localhost ~]#cat/etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
…省略部分输出…
lamp:x:502:

字段与字段之间以:隔开,每个字段代表的意思如下:

1.  组名-也就是是用户组的名称,有字母或数字构成。同 /etc/passwd 中的用户名一样,组名不能重复

2.  组密码标志 与 passwd 中的第二字段特性相同, “x” 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中,只是我们通常不给组设置密码。

3.  GID 群组的 ID 号,Linux 系统就是通过 GID 来区分用户组的,同用户名一样.(组名也只是为了便于管理员记忆)

      这里的组 GID 与 /etc/passwd 文件中第 4 个字段的 GID 相对应。(实际上,/etc/passwd 文件中使用 GID 对应的群组名,就是通过此文件对应得到的)

4.  组中附加用户  这个字段是空的,说明没有向其中添加其他用户。

     并且在这一字段,是看不到初始用户的,要想查看该组的初始用户,则要通过 GID 来与 passwd 文件对照查看。

 

4. /etc/gshadow

介绍:/etc/passwd 文件存储用户基本信息,同时考虑到账户的安全性,将用户的密码信息存放另一个文件 /etc/shadow 中。而 /etc/gshadow 文件也是如此,组用户信息存储在 /etc/group 文件中,而将组用户的密码信息存储在 /etc/gshadow 文件中

借助 Vim 命令查看一下此文件中的内容:

[root@localhost ~]#cat/etc/gshadow
root:::
bin:::bin, daemon
daemon:::bin, daemon
...省略部分输出...
lamp:!::

字段与字段之间以:隔开,每个字段代表的意思如下:


 

组名:加密密码:组管理员:组附加用户列表

 

1.  组名 同 /etc/group 文件中的组名相对应。

2.  组密码 对于大多数用户来说,通常不设置组密码,因此该字段常为空,但有时为 “!”,指的是该群组没有组密码

3.  组管理员 组管理员的用户名  Linux 系统中账号太多,而超级管理员 root 可能比较忙碌,因此当有用户想要加入某群组时,root 或许不能及时作出回应。这种情况下,如果有群组管理员,那么他就能将用户加入自己管理的群组中,也就免去麻烦 root 了    (由于目前有 sudo 之类的工具,因此群组管理员的这个功能已经很少使用了 )

4.  组中附加用户 该字段显示这个用户组中有哪些附加用户,和 /etc/group 文件中附加组显示内容相同

 

5./etc/login.defs

介绍:/etc/login.defs文件定义了与/etc/password和/etc/shadow配套的用户限制设定。这个文件是需要的,缺失并不会影响系统的使用,但是也许会产生意想不到的错误。

         (如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准,也就是说/etc/shadow的配置优先级高于/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

  

 

6./etc/default/useradd

介绍:/etc/default/useradd文件是在使用useradd添加用户时的一个需要调用的一个默认的配置文件,可以使用“useradd -D参数“,这样的命令格式来修改文件里面的内容


[root@w ~]# cat /etc/default/useradd


# useradd defaults file


GROUP=100


HOME=/home 注:把用户的家目录建在/home中。


INACTIVE=-1 注:是否启用帐号过期停权,-1表示不启用。


EXPIRE= 注:帐号终止日期,不设置表示不启用。


SHELL=/bin/bash 注:新用户默认所有的shell类型。


SKEL=/etc/skel 注:配置新用户家目录的默认文件存放路径。


CREATE_MAIL_SPOOL=yes 注:创建mail文件。

  

 

 

useradd命令参数 注释说明
-c comment #新帐号password档的说明栏
-d home_dir #新帐号每次登入时所使用的home_dir。预设值为default_home内login名称
-e expire_date #*帐号终止日期。日期的指定格式为MM/DD/YY。
-f inactive_days #帐号过期几日后记久停权。当值为0时帐号则立刻被停权。而当值为-1时则关闭此功能,预设值为-1。
-g initial_group #*group名称或以数字来做为用户登入起始用户组(group)。用户组名称须为系统现有存在的名称。用户组数字也须为现有存在的用户组。预设的用户组数字为1。
-G group,[...] #*定义此用户为多个不同groups的成员。每个用户组使用","逗号分隔。用户组名称-g选项的限制。默认值为用户的起始用户组。
-m #用户目录如不存在则自动建立。如使用-k选项,skeleton_dir内的档案将复制至用户目录下。然后在/etc/skel目录下的档案也会复制过去取代。任何在skeleton_diror /etc/skel的目录也相同会在用户目录下一一建立。The-k同-m不建立目录以及不复制任何档案为预设值。
-M #*不建立用户家目录,优先于/etc/login.defs文件的设定。
-n #默认情况用户的用户组与用户的名称会相同。如果命令加了-n参数,就不会生成和用户同名的用户组了。
-r #此参数是用来建立系统帐号。系统帐号的UID会比定义在系统档上/etc/login.defs.的UID——MIN来的小。注意useradd此用法所建立的帐号不会建立用户家目录,也不会在乎记录在/etc/login.defs.的定义值。如果你想要有用户家目录额外指定-m参数来建立系统帐号。这是Red Hat额外增设的选项。
-s shell #*用户登入后使用shell名称。默认值为不填写,这样系统会帮你指定预设的登入shell。指明用户的默认shell程序,可用列表在/etc/shells文件中
-u uid #*用户的ID值。这个值必须是唯一的,除非用-o选项。数字不可为负值。

 

命令示例:

 

添加一个用户old,并指定属于sa组,要求组ID为801,uid为808,并且不建立家目录及禁止其登录

[root@cat ~]# groupadd sa -g 801
#创建用户组sa指定gid 801,这个是groupadd命令的用法
[root@cat ~]# tail -1 /etc/group
sa:x:801:
[root@cat ~]# useradd -u 808 -g sa -M -s /sbin/nologin old
#创建用户old属于指定组sa,指定uid 808,用户名old
[root@cat ~]# tail -1 /etc/passwd
old:x:808:801::/home/old:/sbin/nologin
[root@cat ~]# id old
uid=808(old) gid=801(sa) groups=801(sa)

  

新增用户并设置终止日期

[root@cat ~]# useradd -e "2016/06/01" m1
[root@cat ~]# chage -l m1
Last password change : May 26, 2016
Password expires : never
Password inactive : never
Account expires : Jun 01, 2016
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7