S_lion's Studio

linux用户与组管理(上篇)

字数统计: 3.2k阅读时长: 13 min
2021/07/30 Share

基本概念

Linux 继承了UNIX 对用户的优秀支持,其属于多用户的操作系统。在linux中用户与组都是一种身份认证资源。

每个用户都有用户名、用户的唯一编号uid、所属组及其默认的shell,可能还有密码、家目录、附属组、注释信息等。每个组也有自己的名称、组唯一编号gid。一般来说,gid和uid都是相同的,但可以根据自己的实际需求来设置。组分为主组(primary group)和辅助组(secondary group)两种,用户一定会属于某个主组,也可以同时加入多个辅助组。

在Linux中,用户按权限来分类,可以分为3类:

  • 超级管理员

    超级管理员是最高权限者,它的uid为0,默认超级管理员用户名为root。

  • 系统用户

    由系统或程序自行建立的账户被称为系统用户,特点是他们具有某些特权但又不需要登录操作系统。他们的uid范围从201到999,centos6的uid范围是1到499,出于安全考虑,它们一般不用来登录,所以它们的shell一般是/sbin/nologin,而且大多数时候它们是没有家目录的。

  • 普通用户

    普通用户是权限受到限制的用户,默认只能执行/bin、/usr/bin、/usr/local/bin和自身家目录下的命令。它们的uid从1000开始。尽管普通用户权限收到限制,但是它对自身家目录下的文件是有所有权限的。

默认root用户的家目录为/root,其他用户的家目录一般在/home下以用户名命名的目录中。

用户管理文件

用户文件

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

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
[root@slions_pc1 ~]# 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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin

/etc/passwd 内容总共分为 7 个区域 ,以“ :” 作为区域的分隔符。

1
用户名:x:uid:gid:用户注释信息:家目录:使用的shell类型

第一列:用户名。区分大小写,账户名可以以字母 , 数字 , 英文句号 ‘.’, 下 划线 ‘_’, 连字符 ‘-‘ 等连和使用,账户名必须唯一

第二列:x。在以前老版本的系统上,第二列是存放用户密码的,但是密码和用户信息放在一起不便于管理(密钥要保证其特殊属性),所以后来将密码单独放在另一个文件/etc/shadow中,这里就都写成x了。

第三列:uid。UID 号应该唯一,UID 号 0-999 为保留 UID

第四列:gid。

第五列:用户注释信息。

第六列:用户家目录,普通账户主目录默认建立在 /home 下。

第七列:用户的默认shell,虽然叫shell,但其实可以是任意一个可执行程序或脚本。

密码文件

/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
[root@slions_pc1 ~]# cat /etc/shadow
root:$6$JifzPmKZFWt52T4M$2s.UGoczIsSGCFKiqw/KhfWsiLKgwAHqY3dq8jLsHg4/RGZ1NoSKhmgfeEgZiPLJVWJbafyoVLiVRptCi4KIs1::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
lp:*:17834:0:99999:7:::
sync:*:17834:0:99999:7:::
shutdown:*:17834:0:99999:7:::
halt:*:17834:0:99999:7:::
mail:*:17834:0:99999:7:::
operator:*:17834:0:99999:7:::
games:*:17834:0:99999:7:::
ftp:*:17834:0:99999:7:::
nobody:*:17834:0:99999:7:::
systemd-network:!!:18768::::::
dbus:!!:18768::::::
polkitd:!!:18768::::::
libstoragemgmt:!!:18768::::::
abrt:!!:18768::::::
rpc:!!:18768:0:99999:7:::
sshd:!!:18768::::::
postfix:!!:18768::::::
ntp:!!:18768::::::
chrony:!!:18768::::::
tcpdump:!!:18768::::::

其有 9 个区域,每个区域的作用如下 :

第一列:用户名。( 与 /etc/passwd 一致 )
第二列:加密后的密码。但是这一列是有玄机的,有些特殊的字符表示特殊的意义。

  • ①.该列留空,即”::”,表示该用户没有密码。

  • ②.该列为”!”,即”:!:”,表示该用户被锁,被锁将无法登陆,但是可能其他的登录方式是不受限制的,如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) 起到用户前一次修 改密码的天数。
第四列:密码最少使用期限(天数)。密码前次与下一次修改的时间间隔 , 一般为“0”位不设定,可随时修改。
第五列:密码最大使用期限(天数)。超过了它不一定密码就失效,可能下一个字段设置了过期后的宽限天数。设置为空时将永不过期,后面设置的提醒和警告将失效。root等一些用户的已经默认设置为了99999,表示永不过期。如果值设置小于最短使用期限,用户将不能修改密码。
第六列:密码过期前多少天就开始提醒用户密码将要过期。空或0将不提醒。
第七列:密码过期后宽限的天数,在宽限时间内用户无法使用原密码登录,必须改密码或者联系管理员。设置为空表示没有强制的宽限时间,可以过期后的任意时间内修改密码。
第八列:帐号过期时间。从1970年1月1日开始计算天数。设置为空帐号将永不过期,不能设置为0。不同于密码过期,密码过期后账户还有效,改密码后还能登录;帐号过期后帐号失效,修改密码重设密码都无法使用该帐号。
第九列:保留字段。

组文件

/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
37
38
39
40
41
42
43
44
45
46
47
48
49
[root@slions_pc1 ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:33:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
input:x:999:
systemd-journal:x:190:
systemd-network:x:192:
dbus:x:81:
polkitd:x:998:
libstoragemgmt:x:997:
ssh_keys:x:996:
abrt:x:173:
rpc:x:32:
sshd:x:74:
slocate:x:21:
postdrop:x:90:
postfix:x:89:
ntp:x:38:
chrony:x:995:
tcpdump:x:72:
stapusr:x:156:
stapsys:x:157:
stapdev:x:158:
cgred:x:994:
docker:x:993:

每行一个组,每一行3个冒号共4列属性:

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

框架目录

/etc/skel框架目录中的文件是每次新建用户时,都会复制到新用户家目录里的文件。默认只有3个环境配置文件,可以修改这里面的内容,或者添加几个文件在骨架目录中,以后新建用户时就会自动获取到这些环境和文件。

1
2
3
4
5
6
[root@slions_pc2 ~]# ls -lA /etc/skel/
总用量 12
-rw-r--r--. 1 root root 18 10月 31 2018 .bash_logout
-rw-r--r--. 1 root root 193 10月 31 2018 .bash_profile
-rw-r--r--. 1 root root 231 10月 31 2018 .bashrc

删除家目录下这些文件,会导致某些设置出现问题。例如删除”.bashrc”这个文件,会导致提示符变异的问题(-bash-4.2$)。

创建用户限制文件

/etc/login.defs设置用户帐号限制的文件。该文件里的配置对root用户无效。

如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准,也就是说/etc/shadow的配置优先级高于/etc/login.defs。

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
67
68
69
70
71
72
73
74
75
76
[root@slions_pc2 ~]# 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 # QMAIL_DIR是Qmail邮件的目录,所以可以不设置它
MAIL_DIR /var/spool/mail # 默认邮件根目录,即信箱
#MAIL_FILE .mail # mail文件的格式是.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.
#
# Password aging controls:
PASS_MAX_DAYS 99999 # 密码最大有效期(天)
PASS_MIN_DAYS 0 # 两次密码修改之间最小时间间隔
PASS_MIN_LEN 5 # 密码最短长度
PASS_WARN_AGE 7 # 密码过期前给警告信息的时间

# 控制useradd创建用户时自动选择的uid范围
# Min/max values for automatic uid selection in useradd
#
UID_MIN 1000
UID_MAX 60000
# System accounts
SYS_UID_MIN 201
SYS_UID_MAX 999

# 控制groupadd创建组时自动选择的gid范围
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 1000
GID_MAX 60000
# System accounts
SYS_GID_MIN 201
SYS_GID_MAX 999

#
# 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).
# 设置此项后,在删除用户时,将自动删除用户拥有的at/cron/print等job
#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.
# 控制useradd添加用户时是否默认创建家目录,useradd -m选项会覆盖此处设置
CREATE_HOME yes

# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
# 设置创建家目录时的umask值,若不指定则默认为022
UMASK 077

# This enables userdel to remove user groups if no members exist.
# 设置此项表示当组中没有成员时自动删除该组
# 且useradd是否同时创建同用户名的主组。
USERGROUPS_ENAB yes

# Use SHA512 to encrypt password.
# 设置用户和组密码的加密算法
ENCRYPT_METHOD SHA512

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/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修改的就是此文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@slions_pc1 ~]# cat /etc/default/useradd
[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缓冲

CATALOG
  1. 1. 基本概念
  2. 2. 用户管理文件
    1. 2.1. 用户文件
    2. 2.2. 密码文件
    3. 2.3. 组文件
    4. 2.4. 框架目录
    5. 2.5. 创建用户限制文件
    6. 2.6. 创建用户时默认配置文件