Linux账户管理

一、/etc/passwd文件

/etc/passwd文件是Linux/UNIX安全的关键文件之一.该文件用于用户登录时校验 用户的口令,当然应当仅对root可写.文件中每行的一般格式为:

LOGNAME:PASSWORD:UID:GID:USERINFO:HOME:SHELL

每行的头两项是登录名和加密后的口令,后面的两个数是UID和GID,接着的一项是系统管理员想写入的有关该用户的任何信息,最后两项是两个路径名: 一个是分配给用户的HOME目录,第二个是用户登录后将执行的shell(若为空格则缺省为/bin/bash)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost init.d]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

每行代表一个用户,用冒号分隔来定义用户的属性,以第一行“root:x:0:0:root:/root:/bin/bash”为例,依次说明:

  • root代表登录名称。
  • x代表密码,但实际密码存放于/etc/shadow文件中,如果是*表示不能登录,如果为空是不需要密码即可登录。
  • 此项表示用户ID,是用户在内核中的唯一标识。
  • 用户组ID,是/etc/group用户组中的ID,用户组可定义用户的权限。
  • 用户的真正名称,包含用户的一些信息,如用户的真实姓名,电话等。
  • 用户的主目录,当用户登录后,将此目录作为工作目录。
  • 用户使用的命令行,即用户在登录后运行的终端程序。当设置为/sbin/nologin时表示此账户不可登录。
    其中超级用户root的UID和GID为0,有一些用户没有登录权限,nobody的权限最小,它没有写入权限,为了安全考虑,可以用它来运行一些程序。

二、/etc/shadow文件

此文件存放着Linux用户的密码,包含用户的验证信息、经过加密的密码、密码过期日期等。

文件格式与/etc/passwd类似,字段之间用冒号分隔。
格式:

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost init.d]# cat /etc/shadow
root:$6$QcYGGtNvT5/BAXCP$CBZHUaReIswP1sD9Tik/WvF1dZErMzAVd5f9ybJnPW/lGX.ikAVSOWQMzm9pyxvew8u6Kw2MGW70FuDV9Yvp1/:17204:0:99999:7:::
bin:*:15628:0:99999:7:::
daemon:*:15628:0:99999:7:::
adm:*:15628:0:99999:7:::
lp:*:15628:0:99999:7:::
sync:*:15628:0:99999:7:::
shutdown:*:15628:0:99999:7:::
halt:*:15628:0:99999:7:::
mail:*:15628:0:99999:7:::
uucp:*:15628:0:99999:7:::
operator:*:15628:0:99999:7:::
games:*:15628:0:99999:7:::
gopher:*:15628:0:99999:7:::
ftp:*:15628:0:99999:7:::
nobody:*:15628:0:99999:7:::
dbus:!!:17204::::::
vcsa:!!:17204::::::
saslauth:!!:17204::::::
postfix:!!:17204::::::
sshd:!!:17204::::::

以第一行root为例,依次说明:

  • “登录名”是与/etc/passwd文件中的登录名相一致的用户账号
  • “口令”字段放的是用户的密码,如果为空,则对应的用户不需要密码即可登录。如果是*代表帐号被锁定,是!!表示这个密码已经过期。

    $1$ 表明是用MD5加密的
    $2$ 是用Blowfish加密的
    $5$ 是用SHA-256加密的
    $6$开头的,表明是用SHA-512加密的

  • “最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数
  • “最小时间间隔”指的是两次修改口令之间所需的最小天数
  • “最大时间间隔”指的是口令保持有效的最大天数
  • “警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数
  • “不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数
  • “失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了

三、/etc/group文件

用户组所有的所有信息都存放在该文件中,格式如下:

组名:口令:组标识号:组内用户列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[root@localhost etc]# cat /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon
tty:x:5:
disk:x:6:
lp:x:7:daemon
mem:x:8:
kmem:x:9:
wheel:x:10:
mail:x:12:mail,postfix
uucp:x:14:
man:x:15:
games:x:20:
gopher:x:30:
video:x:39:
dip:x:40:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
dbus:x:81:
floppy:x:19:
vcsa:x:69:
cdrom:x:11:
tape:x:33:
dialout:x:18:
saslauth:x:76:
postdrop:x:90:
postfix:x:89:
sshd:x:74:

具体解释:

  • 组名:是用户组的名称,由字母或数字组成
  • 口令:存放用户组加密后的口令,一般这个字段为空或为*
  • 组标识号:组标识号跟用户的标识号一个意思,被系统内部用来标识组,别称GID
  • 组内用户列表:存放属于这个组的用户,不同的用户用逗号(,)分隔

一些常见用户组的作用:

  • root组:超级用户组,具有最高权限
  • bin组:此用户组可管理大部分命令
  • daemon组:可管理后台进程
  • sys组:可管理系统文件
  • adm组:类似 wheel 的管理器群组,这个组的权限允许该组成员不用 su 就能读取日志文件
  • tty组:操作ttyAMA0串口
  • lp组:访问打印设备,管理打印服务
  • whell组:管理组,通常用于 sudo 和 su 命令权限

四、/etc/gshadow文件

/etc/gshadow是/etc/group的加密资讯文件,用户组的管理密码存放在这个文件中。
格式如下:

组名:口令:组管理者:组内用户列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[root@localhost etc]# cat /etc/gshadow
root:::
bin:::bin,daemon
daemon:::bin,daemon
sys:::bin,adm
adm:::adm,daemon
tty:::
disk:::
lp:::daemon
mem:::
kmem:::
wheel:::
mail:::mail,postfix
uucp:::
man:::
games:::
gopher:::
video:::
dip:::
ftp:::
lock:::
audio:::
nobody:::
users:::
utmp:!::
utempter:!::
dbus:!::
floppy:!::
vcsa:!::
cdrom:!::
tape:!::
dialout:!::
saslauth:!::
postdrop:!::
postfix:!::
sshd:!::

具体解释:

  • 组名:是用户组的名称,由字母或数字构成
  • 口令:用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码
  • 组管理者:这个字段也可为空,如果有多个用户组管理者,用逗号(,)分割
  • 组内用户列表:如果有多个成员,用逗号(,)分割

五、/etc/default/useradd文件

/etc/default/useradd为在创建用户时使用的规则文件,即使用useradd添加用户不使用任何参数时,将读取此文件的配置。

1
2
3
4
5
6
7
8
9
[root@localhost etc]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

具体解释:

  • GROUP=100

    用户组ID

  • HOME=/home

    用户的主目录

  • INACTIVE=-1

    是否启用帐号过期停权,-1表示不启用

  • EXPIRE=

    帐号终止日期,不设置表示不启用

  • SHELL=/bin/bash

    新建账户使用shell的种类,默认使用bash

  • SKEL=/etc/skel

    默认添加用户的目录默认文件存放位置。也就是说,当用户用useradd添加用户时,用户主目录下的文件都是从这个目录中复制的

  • CREATE_MAIL_SPOOL=yes

    是否创建邮箱缓存,yes表示创建

六、/etc/login.defs文件

该文件设置用户帐号限制的文件,比如密码的最大过期天数、密码的最大长度。但该文件的设置对root账户无效,且优先级低于/etc/shadow,如果/etc/shadow有相同的配置,则以/etc/shadow为准。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
[root@localhost ~]# cat /etc/login.defs
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#
# *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
#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
PASS_WARN_AGE 7
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 500
UID_MAX 60000
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 500
GID_MAX 60000
#
# 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
# 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
# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512

具体解释:

  • MAIL_DIR /var/spool/mail

    创建用户时,要在目录/var/spool/mail中创建一个用户mail文件

  • PASS_MAX_DAYS 99999

    密码的最大有效期天数

  • PASS_MIN_DAYS 0

    两次修改密码所需间隔的最小天数

  • PASS_MIN_LEN 5

    密码的最小长度,对root无效

  • PASS_WARN_AGE 7

    密码过期前多少天提示

  • UID_MIN 500

    创建用户时,默认使用的最小UID

  • GID_MAX 60000

    创建用户时,最大UID,即在创建用户时,不指定UID,则默认UID范围为500-60000

  • USERDEL_CMD /usr/sbin/userdel_local

    删除用户时,所需要执行的脚本

  • CREATE_HOME yes

    在使用useradd创建用户时,在不加 -M 及 -m 时,是否主动建立用户主目录

  • UMASK 077

    表示创建新文件的默认权限,最高权限为777,当UMASK的值为077,则默认创建的文件为777-077=700,表示创建文件的默认权限为700

  • USERGROUPS_ENAB yes

    如果用户组的成员为空,则在使用的userdel删除用户时,同时删除该用户所属组

  • ENCRYPT_METHOD SHA512

    使用SHA512加密密码

七、/etc/skel文件夹

当使用useradd命令创建用户时,会从此文件夹下复制全部文件至所创建用户的home目录下,比如可以放置一些系统的说明文件或者环境变量。

八、/etc/sudoers文件的使用方法

此文件可控制哪些账户可使用sudo权限执行某些命令,打开该文件可看见一行:

1
root ALL=(ALL) ALL

表示只有root用户能使用sudu来执行命令,如果想让一个test用户使用sudo来临时获取root权限,添加如下行:

1
test ALL=(ALL) ALL

但是,test在使用sudo来获取root权限执行命令时,是需要输入密码的,如果不需要密码:

1
test ALL=(ALL) NOPASSW:ALL

如果想限制test用户在使用sudo临时获取root权限时,只允许执行某些命令:

1
test ALL=(ALL) NOPASSW:/bin/cat

以上表示test用户在使用sudu临时获取root权限时,不需要输入密码,但只能使用cat命令来查看文件,如果不想让用户执行某些命令,其它命令都可以执行:

1
test ALL=(ALL) NOPASSW:ALL,!/bin/cat

以上表示test用户在使用sudo临时获取root权限时,不需要输入密码,且所有命令都可以执行,但不能使用cat命令来查看文件。
其他一些说明:

1
test localhost.localdomain=(root) NOPASSWD:/bin/ls

具体解释:test用户可以在localhost.localdomain这台主机上无需密码使用sudo命令来获取root权限执行ls命令

九、useradd命令详解

  • 名称:useradd - 帐号建立或更新新使用者的资讯

  • 语法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    useradd [-c comment] [-d home_dir]
    [-e expire_date] [-f inactive_time]
    [-g initial_group] [-G group[,...]]
    [-m [-k skeleton_dir] | -M] [-s shell]
    [-u uid [ -o]] [-n] [-r] login
    useradd -D [-g default_group] [-b default_home]
    [-f default_inactive] [-e default_expire_date]
    [-s default_shell]
  • 描述

    • 新帐号建立
      当不加-D参数,useradd指令使用命令列来指定新帐号的设定值and使用系统上的预设值.新使用者帐号将产生一些系统档案,使用者目录建立,拷备起始档案等,这些均可以利用命令列选项指定。此版本为RedHat Linux提供,可帮每个新加入的使用者建立个
      别的group,毋须添加-n选项。useradd可使用的选项为

      1
      -c comment

      新帐号password档的说明栏。

      1
      -d home_dir

      新帐号每次登入时所使用的home_dir。预设值为default_home内login名称,并当成登入时目录名称。

      1
      -e expire_date

      帐号终止日期。日期的指定格式为MM/DD/YY。

      1
      -f inactive_days

      帐号过期几日后永久停权。当值为0时帐号则立刻被停权。而当值为-1时则关闭此功能,预设值为-1.

      1
      -g initial_group

      group名称或以数字来做为使用者登入起始群组(group)。群组名须为现有存在的名称。群组数字也须为现有存在的群组。预设的群组数字为1。

      1
      -G group,[...]

      定义此使用者为此一堆groups的成员。每个群组使用”,”区格开来,不可以夹杂空白字元。群组名同-g选项的限制。定义值为使用者的起始群组。

      1
      -m

      使用者目录如不存在则自动建立。如使用-k选项skeleton_dir内的档案将复制至使用者目录下。然而在/etc/skel目录下的档案也会复制过去取代。任何在skeleton_dir or /etc/skel的目录也相同会在使用者目录下一 一建立。The -k同-m不建立目录以及不复制任何档案为预设值。

      1
      -M

      不建立使用者目录,即使/etc/login.defs系统档设定要建立使用者目录。

      1
      -n

      预设值使用者群组与使用者名称会相同。此选项将取消此预设值。

      1
      -r

      此参数是用来建立系统帐号。系统帐号的UID会比定义在系统档上/etc/login.defs.的UID_MIN来的小。注意useradd此用法所建立
      的帐号不会建立使用者目录,也不会在乎纪录在/etc/login.defs.的定义值。如果你想要有使用者目录须额外指定-m参数来建立
      系统帐号。这是REDHAT额外增设的选项。

      1
      -s shell

      使用者登入后使用的shell名称。预设为不填写,这样系统会帮你指定预设的登入shell。

      1
      -u uid

      使用者的ID值。必须为唯一的ID值,除非用-o选项。数字不可为负值。预设为最小不得小于999而逐次增加。0~999传统上是保留给系统帐号使用。

    • 改变预设值
      当-D选项出现时,useradd秀出现在的预设值,或是藉由命令列的方式更新预设值。可用选项为∶

      1
      -b default_home

      定义使用者所属目录的前一个目录。使用者名称会附加在default_home后面用来建立新使用者的目录。当然使用-d后则此选项无效。

      1
      -e default_expire_date

      使用者帐号停止日期。

      1
      -f default_inactive

      帐号过期几日后停权。

      1
      -g default_group

      新帐号起始群组名或ID。群组名须为现有存在的名称。群组ID也须为现有存在的群组。

      1
      -s default_shell

      使用者登入后使用的shell名称。往后新加入的帐号都将使用此shell。如不指定任何参数,useradd显示目前预设的值。

十、passwd命令详解

  • 名称:passwd - 更新用户的身份验证令牌
  • 语法:

    1
    2
    passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays]
    [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
  • 参数

    1
    -k

    使即将过期的密码仍保持使用。

    1
    -l

    锁住用户无权更改其密码,仅能通过root权限操作。

    1
    -u

    使用-l参数后,再使用此参数解锁,仅能通过root权限操作。

    1
    -d

    删除用户密码,仅能通过root权限操作。

    1
    -e

    指定密码到期时间,用户在下次登录的时候强制更改密码。

    1
    -n

    使用户在多少天内必须更改密码。

    1
    -x

    指定用户密码最长使用期限。

    1
    -w

    密码更改警告天数,告诉用户,N天后,密码将过期。

    1
    -i

    当用户密码过期后,用户再经过 ‘n‘ 天后没有更改其密码,用户将不能登录

    1
    -S

    显示指定使用者的密码认证种类, 只有具备 root 权限的使用者方可使用。

十一、groupadd命令详解

  • 名称:groupadd - 创建一个用户组
  • 语法:
    1
    groupadd [options] group
  • 参数

    1
    -f

    使用此参数时, 即使指定的组已经存在, 命令依然会正常退出(不返回错误), 当和-g一起使用时, 如果指定的GID已经存在, 则会自动使用另一个GID。

    1
    -g

    在创建组时,指定GID号。

    1
    -h

    限制帮助消息并退出。

    1
    -K

    覆盖/etc/login.defs文件中的默认值,可使用多个-K选项。

    1
    -o

    新建用户组时,指定一个已经存在的GID。

    1
    -p

    新建用户组时,为此用户组设置密码。

    1
    -r

    建立系统用户组,GID低于499。

    十二、账户管理的其他相关命令

    • userdel——删除帐号,加上-r参数,将连同该帐号的home下的文件一同删除。
    • groupdel——删除用户组
    • groupmod——修改组的相关信息

      用法:groupmod [-g gid [-o]] [-n group_name] group
      -g gid 表示指定组的gid,如果使用-o参数,可重复使用gid值
      -n group_name 表示更改的组名

    • usermod——修改账户相关信息
    • chash——用于修改用户登录的shell

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器