Linux系统中每个普通用户都有一个账号,包括用户名、密码和主目录等信息。除此之外,还有一些系统本身创建的特殊用户,具有特殊的存在意义,其中最重要的用户就是管理员账户,默认的用户名为root(也就是超级用户)。通过操作命令行能够对用户文件进行创建、修改、删除更改密码等操作。
用户账号信息有关的文件
`useradd` 命令用于创建新的用户,`usergroup` 命令用于创建新的用户组,而 `gpasswd` 命令用于管理用户组的密码和成员。
创建ytzmdz用户
useradd ytzmdz
删除ytzmdz用户
userdel -r ytzmdz
使用userdel命令删除用户时,默认不会删除用户的家目录和邮件目录。如果需要将用户的家目录和邮件目录一起删除,需要使用"-r"选项。
创建ytzmdzs用户组(用户组gid 550)
groupadd -g 550 ytzmdzs
删除ytzmdzs用户组
groupdel ytzmdzs
查看ytzmdzs用户组
grep "ytzmdzs" /etc/group
将ytzmdz用户加入ytzmdzs组
gpasswd -a ytzmdz ytzmdzs
将ytzmdz用户从ytzmdzs中删除
gpasswd -d ytzmdz ytzmdzs
创建ytzmdz用户指定 UID(550)初始组(ytzmdzs)附加组(root)家目录(/home/ytzmdz/)用户说明(ytzmdz user)和用户登录Shell(/bin/bash)
useradd -u 550 -g ytzmdzs -G root -d /home/ytzmdz -c "ytzmdz user" -s /bin/bash ytzmdz
创建系统应用账户推荐指定shell为nologin,避免用户登录系统造成安全风险
创建zabbix用户组
groupadd zabbix
创建zabbix用户设置属组
useradd -s /sbin/nologin -M -g zabbix zabbix
usermod
usermod命令修改系统帐户及账户相关的各项属性。如果用户的数字用户ID、用户名或用户的主目录发生更改,则必须确保在执行此命令时,命名用户未执行任何进程。usermod命令的操作修改的是/etc/passwd和/etc/shadow这两个文件中的内容。
修改用户注释说明
usermod -c "ytzmdz account" ytzmdz
修改登录时的目录
usermod -d /home/ap/ytzmdz -m ytzmdz
修改用户shell
usermod -s /bin/sh ytzmdz
修改用户名
usermod -l ytzmdz ytzmdzs
修改用户UID
usermod -u 1050 ytzmdz
修改用户GID
usermod -g 1050 ytzmdz
修改用户的UID与GID
usermod -u 1050 -g 1050 ytzmdz
将用户添加wheel组
usermod -a -G wheel ytzmdz
撤销用户附加wheel组
gpasswd -d ytzmdz wheel
锁定用户帐户
usermod -L ytzmdz
解锁用户帐户
用户锁定后/etc/shadow中密钥字段自动加了一个叹号,解锁后去除。
usermod -U ytzmdz
将系统账户的Shell修改为/sbin/nologin
usermod -L -s /sbin/nologin zabbix
设置用户账号过期日期(设置账户2025-10-01过期)
usermod -e 2025-10-01 ytzmdz
usermod参数介绍
参数 | 参数说明 |
---|---|
-c, --comment COMMENT | 修改用户帐号的备注文字 |
-d, --home HOME_DIR | 修改用户登入时的目录 |
-e, --expiredate EXPIRE_DATE | 修改帐号的有效期限 |
-f, --inactive INACTIVE | 修改在密码过期后多少天即关闭该账户 |
-g, --gid GROUP | 修改用户所属的群组 |
-G, --groups GROUPS | 修改用户所属的附加群组 |
-a, --append | 将用户附加到-G选项提到的补充组中,而不将其从其他组中移除 |
-h, --help | 获取命令帮助 |
-l, --login NEW_LOGIN | 修改用户帐号名称 |
-L, --lock | 锁定用户账号 |
-m, --move-home | 将主目录的内容移动到新位置(仅与-d一起使用) |
-o, --non-unique | 允许使用重复(非唯一)UID |
-p, --password PASSWORD | 修改用户密码 |
-R, --root CHROOT_DIR | 修改导入目录 |
-s, --shell SHELL | 修改用户登入后所使用的shell |
-u, --uid UID | 修改用户ID |
-U, --unlock | 解除密码锁定 |
-Z, --selinux-user SEUSER | 用户帐户设置新SELinux用户映射 |
账户口令有效期
useradd 命令在添加用户时参考的默认值文件主要有两个,分别是 /etc/default/useradd 和 /etc/login.defs 。
useradd 命令创建用户,系统首先读取 /etc/default/useradd 和 /etc/login.defs ,根据这两个配置文件中定义的规则添加用户,也就是向 /etc/passwd 、/etc/group 、/etc/shadow 、/etc/gshadow 文件中添加用户数据,系统会自动在 /etc/default/useradd 文件设定的目录下建立用户主目录,最后复制 /etc/skel 目录中的所有文件到此主目录中。
出于系统安全的考虑,设置口令有效期限为90天,口令到期前7天通知用户更改口令。口令有效期的设置通过修改/etc/login.defs文件
备份login.defs文件
cp -p /etc/login.defs /etc/login.defs_bak
vim /etc/login.defs
参数介绍
参数 | 参数说明 | 默认值 |
---|---|---|
PASS_MAX_DAYS | 密码可以使用的最大天数 | 90 |
PASS_MIN_DAYS | 两次密码更改之间允许的最小天数 | 7 |
PASS_MIN_LEN | 可接受的最小密码长度 | 5 |
PASS_WARN_AGE | 密码过期前发出警告的天数 | 7 |
/etc/login.defs 参数详解
/etc/login.defs 文件用于在创建用户时,对用户的一些基本属性做默认设置,例如指定用户 UID 和 GID 的范围,用户的过期时间,密码的最大长度等。
注意,该文件的用户默认配置对 root 用户无效。并且,当此文件中的配置与 /etc/passwd 和 /etc/shadow 文件中的用户信息有冲突时,系统会以 /etc/passwd 和 /etc/shadow 为准。口令过期后用户重新登录时,提示口令过期并强制要求修改,不修改则无法进入系统。
参数 | 参数说明 |
---|---|
MAIL_DIR /var/spool/mail | 定义了系统上邮件文件的默认目录,创建用户会自动在/var/spool/mail目录下创建用户名命名的邮箱。 |
PASS_MAX_DAYS 90 | 用户密码的最大有效天数,默认是90天。 |
PASS_MIN_DAYS 7 | 用户更改密码的最小间隔天数,默认是7天。 |
PASS_MIN_LEN 5 | 用户密码的最小长度,默认是5个字符。用户登录验证被PAM模块取代。 |
PASS_WARN_AGE 7 | 在密码过期前多少天开始警告用户,默认是7天。 |
UID_MIN 1000 | 普通用户ID的最小值,添加用户时,默认 UID 从 1000 开始。注意,如果手工指定了一个用户的UID是1050,那么下一个创建的用户的 UID 就会从 1051 开始,哪怕 1000~1049 之间的 UID 没有使用。 |
UID_MAX 60000 | 普通用户UID的最大值,默认是60000。 |
SYS_UID_MIN 201 | 系统用户ID的最小值,默认是201。 |
SYS_UID_MAX 999 | 系统用户ID的最大值,默认是999。 |
GID_MIN 1000 | 普通组ID的最小值,默认是1000。 |
GID_MAX 60000 | 普通组ID的最大值,默认是60000。 |
SYS_GID_MIN 201 | 系统组ID的最小值,默认是201。 |
SYS_GID_MAX 999 | 系统组ID的最大值,默认是999。 |
CREATE_HOME yes | 当创建用户时是否自动创建用户的家目录,默认是创建用户家目录。 |
UMASK 077 | 默认的文件创建掩码,默认是077,意味着新创建的文件默认权限是700(只有所有者有读写执行权限),目录是750(所有者有读写执行,组用户有读和执行权限)。 |
USERGROUPS_ENAB yes | 是否允许用户登录到他们不是成员的组的目录,这里是yes。 |
ENCRYPT_METHOD SHA512 | 密码加密的方法,这里是SHA512。 |
ALWAYS_SET_PATH=yes | 是否总是设置环境变量PATH,默认是yes。 |
LOG_UNKFAIL_ENAB no | 是否记录未知用户的登录失败尝试,默认是no。 |
chage
chage用于密码的实效管理,用来修改帐号和密码的有效期。chage命令更改密码更改与上次密码更改日期之间的天数。系统使用此信息确定用户何时必须更改其密码。chage命令修改的都是/etc/shadow文件最后6项的值。
chage 参数介绍
参数 | 参数说明 |
---|---|
-d, --lastday LAST_DAY | 将最近一次密码修改时间设为“LAST_DAY“ |
-E, --expiredate EXPIRE_DATE | 将帐户过期时间设为“EXPIRE_DATE” 0表示马上过期,-1表示永不过期 |
-h, --help | 获取命令帮助信息 |
-I, --inactive INACTIVE | 过期 INACTIVE 天数后,设定密码为失效状态 |
-l, --list | 列出用户以及密码的有效期 |
-m, --mindays MIN_DAYS | 将两次改变密码之间相距的最小天数设为“MIN_DAYS” |
-M, --maxdays MAX_DAYS | 密码保持有效的最大天数 |
-R, --root CHROOT_DIR | chroot 到的目录 |
-W, --warndays WARN_DAYS | 密码过期前,提前收到警告信息的天数 |
查看root用户的设置信息
chage -l root
账户密码参数介绍
密码过期(Password Expiration):密码过期是指系统设定的密码使用时间限制,超过设置时间后,用户将被强制要求更改密码。是一项安全措施,用于确保密码不会长时间使用,从而减少密码被破解的风险。密码过期后账户登录系统提示需要修改密码,可以通过chage命令查看和设置密码的过期时间。
密码失效(Password Expired):当密码过期后,如果用户没有在规定的时间内更改密码,密码就会失效。密码失效意味着用户将无法使用该密码登录系统,直到他们更改密码为止。系统管理员可以通过配置来强制用户在密码过期后立即更改密码。
设置 root 密码永不过期
chage -M 99999 root
创建用户ytzmdz
设置密码最近一次修改日期为指定日期
chage -d 2024-05-25 ytzmdz
用户下次登录必须修改密码
chage -d 0 ytzmdz
密码失效时间
chage -I -1 ytzmdz
账户过期时间(0表示立马过期,-1 永不过期)
chage -E "2024-12-25" ytzmdz
设置用户密码时间永不过期
chage -M 99999 ytzmdz
密码可以更改最小天数(0 天表示随时可以更改)
chage -m 7 ytzmdz
账户设置多个密码策略
sudo chage -d 0 -E -1 -m 0 -M 90 -W 14 ytzmdz
系统登录ytzmdz
/etc/default/useradd
/etc/default/useradd 文件参数
[root@localhost ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=30
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
/etc/default/useradd 文件参数介绍
参数 | 含义 |
---|---|
GROUP=100 | Linux 中默认用户组有两种机制:一种是私有用户组机制,系统会创建一个和用户名相同的用户组作为用户的初始组;另一种是公共用户组机制,系统用 GID 是 100 的用户组作为所有新建用户的初始组。当前采用的是私有用户组机制。 |
HOME=/home | 表示用户主目录的默认位置,所有新建用户的主目录默认都在 /home/目录下 |
INACTIVE=30 | 表示密码过期后的宽限天数,也就是 /etc/shadow 文件的第七个字段。默认值是 30,代表所有新建立的用户密码过期30天后失效。"-1"表示密码永远不会失效。 |
EXPIRE= | 表示密码失效时间,也就是/etc/shadow 文件的第八个字段。默认值是空,代表所有新建用户没有失效时间,永久有效。 |
SHELL=/bin/bash | 表示所有新建立的用户默认 Shell 都是 /bin/bash。 |
SKEL=/etc/skel | 在创建一个新用户后,该用户主目录存在.bash profile、.bashrc 等文件,文件是从 /etc/skel 目录中自动复制过来的。因此,更改 /etc/skel 日录下的内容就可以改变新建用户默认主日录中的配置文件信息。 |
CREATE MAIL SPOOL=yes | 表示给新建用户建立邮箱,默认是创建。对于所有的新建用户,系统都会在 /var/spool/mail/ 目录下创建与用户名相同邮箱。 |
/etc/passwd:用户账号信息文件
用户账号信息文件中保存着系统中所有用户的主要信息,每一行代表着一个记录;每一行用户记录中定义了用户各个方面的相关属性。
/etc/passwd文件每一行由七个字段的数据组成,且字段之间用":"隔开
/etc/shadow:用户账号信息加密文件(又称为“影子文件”)
用户账号信息加密文件用于存储系统中用户的密码信息;由于/etc/passwd文件允许所有用户读取,容易导致密码泄露,因此将密码信息从该文件中分离出来,单独放置在/etc/shadow文件中。
/etc/shadow文件只有超级用户(root用户)具有读权限,其他用户均没有权限,从而保证了用户密码的安全性。密码在经由/etc/shadow保护后,在/etc/passwd文件的用户记录中只会以“X”的形式呈现。与/etc/passwd文件相似,每一行记录代表一个用户,且以“:”隔开,不同之处在于/etc/passwd中每行记录被分为九个字段。
/etc/group:组信息文件
组信息文件中保存着用户组的所有信息,每一行记录代表一个用户组;将用户分组是对用户进行管理及控制访问权限的一种手段,每个用户都属于一个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。
/etc/gshadow:组信息加密文件
组信息加密文件会保存用户组加密信息,比如说用户组管理密码就保存在此(与/etc/shadow文件相似);与/etc/group文件互补,对于大型服务器来说,拥有很多用户和组,此时会针对这些用户和组来生成一些复杂的权限模型,此时设置并管理密码就显得尤为重要。
终端的自动退出时间
系统长时间未操作退出系统,自动退出时间由/etc/profile文件的TMOUT字段(单位为秒)控制,在/etc/profile的尾部添加如下配置
vim /etc/profile
export TMOUT=300
重新加载系统环境变量文件
source /etc/profile