[toc]
Linux用户组管理
Linux用户管理
useradd命令创建用户过程
1.检查参数和选项
useradd解析传入的选项,如-u(UID)、-g(主组)、-G(附加组)、-d(主目录)、-s(Shell)、-c(用户信息)等
2.选择 UID 和 GID
-
如果未指定 UID,则系统会从
/etc/login.defs读取UID_MIN和UID_MAX,自动分配可用的 UID$ egrep -v '^$|#' /etc/login.defs
MAIL_DIR /var/spool/mail
UMASK 022
HOME_MODE 0700
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_WARN_AGE 7
UID_MIN 1000
UID_MAX 60000
SYS_UID_MIN 201
SYS_UID_MAX 999
SUB_UID_MIN 100000
SUB_UID_MAX 600100000
SUB_UID_COUNT 65536
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
SUB_GID_MIN 100000
SUB_GID_MAX 600100000
SUB_GID_COUNT 65536
ENCRYPT_METHOD YESCRYPT
USERGROUPS_ENAB yes
CREATE_HOME yes
HMAC_CRYPTO_ALGO SHA512 -
如果未指定主组,则
useradd会创建与用户名相同的组(除非使用-N选项)
3.更新 /etc/passwd 和 /etc/shadow
-
useradd在/etc/passwd添加用户记录,例如username:x:1001:1001:User Info:/home/username:/bin/bash创建一个
test用户$ grep test /etc/passwd
test:x:1002:1002::/home/test:/bin/bash -
在
/etc/shadow添加密码字段(加密存储)username:!!:19453:0:99999:7:::查看
test用户说明这里的
!!表示密码未设置,需要passwd username进行设置$ grep test /etc/shadow
test:!!:20172:0:99999:7:::
4.更新 /etc/group
-
如果指定了附加组(
-G),useradd会在/etc/group中更新相关组的成员列表$ grep test /etc/group
test:x:1002:
5.创建用户主目录(可选)
- 如果使用
-m(默认) 选项,useradd会在/home下创建username目录,并从/etc/skel复制默认配置文件(如.bashrc、.profile)
6.设置默认 shell
-
若未指定
-s,默认使用/etc/default/useradd中的SHELL配置$ cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
7.应用 SELinux/ACL 设置(如适用)
- 在 SELinux 启用的系统上,可能会使用
restorecon设置正确的 SELinux 上下文。 - 若系统启用了 ACL,则会根据
/etc/login.defs进行相关操作
创建完成后,你可以用 id 用户名 或 getent passwd 用户名 来检查用户信息
id 命令
$ id test
uid=1002(test) gid=1002(test) groups=1002(test)
getent 命令
$ getent passwd test
test:x:1002:1002::/home/test:/bin/bash
用户配置文件
/etc/passwd
-
作用
- 存储用户信息文件,每一行表示一个用户信息,有多少行就表示有多少个用户
-
格式
-
test : x : 1002 : 1002 : : /home/test : /bin/bash$ grep test /etc/passwd
test:x:1002:1002::/home/test:/bin/bash
-
-
格式含义(此文件由7个字段的数据组成,字段之间用
:分隔) -
1用户名:2密码:3用户标识号UID:4组标识号GID:5个人资料:6主目录:7命令解释器
/etc/shadow
-
作用
- 存储用户密码信息文件
-
格式
u1 : !! : 17749 : 0 : 99999 : 7 : : :
-
格式含义(此文件由9个字段的数据组成,字段之间用
:分隔)1用户名: 2密码 !!表示没有密码: 3最近改动密码的日期: 4密码不可被更动的天数: 5密码需要重新变更的天数: 6密码需要变更期限前的警告期限: 7密码过期的宽限时间: 8帐号失效日期: 9:保留
/etc/skel(目录)
-
作用
创建用户相关的目录,此目录用来存放新用户需要的所有基础环境变量文件
$ ll -a /etc/skel/
total 28
drwxr-xr-x 2 root root 76 Nov 10 12:23 .
drwxr-xr-x 97 root root 8192 Mar 25 18:38 ..
-rw-r--r-- 1 root root 18 May 29 2024 .bash_logout
-rw-r--r-- 1 root root 141 May 29 2024 .bash_profile
-rw-r--r-- 1 root root 376 May 29 2024 .bashrc
-rw-r--r-- 1 root root 188 Jan 8 2024 .zshrc
与 /etc/skel 有关的问题
用户u1登陆系统后提示符如下
-bash-4.1$
原因
用户家目录下的相关环境配置文件被删除
解决方法
复制 /etc/skel 下的 .bash* 到用户家目录
cp /etc/skel/.bash* ~
组配置文件
/etc/group
-
作用
- 存储组相关信息
-
格式
test: x : 500 :
-
格式含义(此文件由4个字段的数据组成,字段之间用
:分隔) -
1组名: 2组密码: 3组管理员: 4用户组成员
/etc/gshadow
-
作用
- 存储组密码信息
-
格式
test : ! : :
-
格式含义(此文件由4个字段的数据组成,字段之间用
:分隔) -
1组名: 2组密码: 3组管理员: 4用户组成员
Linux用户分类
管理员用户
- 默认是root用户,
UID和GID均为0,拥有最高的管理权限
普通用户
- 由系统管理员root创建,创建完成后可以登录系统,但默认无法创建、修改和删除任何管理员下的文件;UID范围
1000-60000
系统用户(或虚拟用户)
- 安装系统后默认生成的用户,大多数不能登录系统,但它们是系统正常运行不可缺少的,它们的存在主要是为了方便系统管理,满足相应的系统进程对文件所属用户的要求;UID范围 1-999