0055. shell命令--useradd

目录

[55. shell命令--useradd](#55. shell命令--useradd)

功能说明

语法格式

选项说明

选项

退出值

相关文件

/etc/passwd

/etc/shadow

/etc/group

/etc/gshadow

/etc/skel/

/etc/login.defs

/etc/default/useradd

实践操作

注意事项


55. shell命令--useradd

功能说明

useradd 命令是 Linux 和 Unix 系统上用于创建新用户的工具。它是 shadow-utils 包的一部分,这个包还包括了管理用户密码、组和其他账户信息的工具。使用 useradd 可以创建新的用户账户,并可以指定多种选项来配置新账户的各种属性,如用户组、家目录、登录shell等。

useradd 命令用于 Linux 中创建的新的系统用户。useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码.而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。

在 Slackware 中,adduser 指令是个 script 程序,利用交谈的方式取得输入的用户帐号资料,然后再交由真正建立帐号的useradd 命令建立新用户,如此可方便管理员建立用户帐号。在 Red Hat Linux 中, adduser 命令则是 useradd 命令的符号连接,两者实际上是同一个指令。

语法格式

bash 复制代码
SYNOPSIS
       useradd [options] LOGIN

       useradd -D

       useradd -D [options]

选项说明

选项

bash 复制代码
-b, --base-dir BASE_DIR:如果未指定 -d HOME_DIR,则系统的默认基本目录。如果未指定此选项,useradd 将使用 /etc/default/useradd 中的 HOME 变量指定的基本目录,或默认使用 /home。
-c, --comment COMMENT:加上备注文字。任何文本字符串。它通常是对登录名的简短描述,目前用作用户全名的字段。这个信息通常可以通过 finger 命令查看。
-d, --home-dir HOME_DIR:将使用 HOME_DIR 作为用户登录目录的值来创建新用户。如果不指定,将使用 /home/LOGIN 作为家目录,其中 LOGIN 是用户名。 
-D, --defaults:变更预设值。
-e, --expiredate EXPIRE_DATE:用户帐户将被禁用的日期。 日期以 YYYY-MM-DD 格式指定。
-f, --inactive INACTIVE:密码过期后到帐户被永久禁用的天数。
-g, --gid GROUP:用户初始登录组的组名或编号。组名必须存在。组号必须引用已经存在的组。如果不指定,系统将使用默认组或新创建的组(如果 -G 选项也未指定)。
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:用户也是其成员的补充组列表。每个组用逗号隔开,中间没有空格。
-h, --help:显示帮助信息并退出。
-k, --skel SKEL_DIR:骨架目录,其中包含要在用户的主目录中复制的文件和目录,当主目录由 useradd 创建时。
-K, --key KEY=VALUE:覆盖 /etc/login.defs 默认值(UID_MIN、UID_MAX、UMASK、PASS_MAX_DAYS 等)。
-l, --no-log-init:不要将用户添加到 lastlog 和 faillog 数据库。
-m, --create-home:为新用户创建家目录。如果家目录已存在,则不会覆盖。如果用户的主目录不存在,则创建它。
-M:不要创建用户的主目录,即使 /etc/login.defs (CREATE_HOME) 中的系统范围设置设置为 yes。
-N, --no-user-group:不要创建与用户同名的组,而是将用户添加到由 -g 选项或 /etc/default/useradd 中的 GROUP 变量指定的组中。
-o, --non-unique:允许创建具有重复(非唯一)UID 的用户帐户。 此选项仅在与 -o 选项结合使用时有效。
-p, --password PASSWORD:crypt(3) 返回的加密密码。 默认是禁用密码。
-r, --system:创建一个系统帐户。
-R:设置根目录
-s, --shell SHELL:用户登录 shell 的名称。如果不指定,将使用 /bin/bash。
-u, --uid UID:用户 ID 的数值。(UID)
-U, --user-group:创建一个与用户同名的组,并将用户添加到该组。
-Z, --selinux-user SEUSER:用户登录的 SELinux 用户。 默认情况下将此字段留空,这会导致系统选择默认的 SELinux 用户。


# 更改默认值
# 当仅使用 -D 选项调用时,useradd 将显示当前默认值。 当使用 -D 和其他选项调用时,useradd 将更新指定选项的默认值。 有效的默认更改选项是:

退出值

bash 复制代码
0 成功
1 无法更新密码文件
2 无效的命令语法
3 选项的无效参数
4 UID 已经在使用(并且没有 -o)
6 指定的组不存在
9 用户名已被使用
10 无法更新组文件
12 无法创建主目录
13 无法创建邮件假脱机
14 无法更新 SELinux 用户映射

相关文件

bash 复制代码
/etc/passwd # 用户帐户信息。
/etc/shadow # 保护用户帐户信息。
/etc/group  # 组帐户信息。
/etc/gshadow # 保护组帐户信息。
/etc/default/useradd # 帐户创建的默认值。
/etc/skel/ # 包含默认文件的目录。
/etc/login.defs # 影子密码套件配置。
/etc/passwd
bash 复制代码
[root@MineGi ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
#第1字段:用户账户名
#第2字段:密码占用符(密码保存到了影子文件)
#第3字段:uid编号
#第4字段:gid编号
#第5字段:用户备注信息(用户全名)
#第6字段:用户属主目录(家目录)
#第7字段:登录时分配到的shell解释器(若shell类型为/sbin/nologin,则不能登录)
/etc/shadow
bash 复制代码
[root@MineGi ~]# head -1 /etc/shadow
root:$6$lkz5C3wAIJXy.XL3$Axv54rjknCBT0n/N5CXRB4ead4sg3o2XOdXAlClRfCCNBgxMGwPWeBIXLsaDPiDXw6gx9KavaAxsxztZYt4k3/::0:99999:7:::
#第1字段:用户账号名
#第2字段:加密的密码,!!表示密码被锁定,不能使用
#第3字段:上次修改密码的时间,距 1970-01-01 过去多少天
#第4字段:密码最短有效期(距上次密码修改起多少天内不能再次修改密码)单位"天"。"0"表示随时可修改密码。
#第5字段:密码最长有效期(在修改密码后的多少天必须重新修改密码。99999 表示永久可以使用。)
#第6字段:提前多少天警告用户口令将过期(7 表示在密码过期前7天开始警告。)
#第7字段:在密码过期之后多少天禁用此用户。
#第8字段:密码过期日期,若设置则显示为过期日期距 1970 年1月1日多少天。
#第9字段:保留字段(未使用)。
/etc/group
bash 复制代码
[root@MineGi ~]# head -1 /etc/group
root:x:0:
#第1个字段:组名
#第2个字段:密码占位符
#第3个字段:GID
#第4个字段:组内的成员信息
/etc/gshadow
bash 复制代码
[root@MineGi ~]# head -1 /etc/gshadow
root:::
/etc/skel/
bash 复制代码
[root@MineGi ~]# ls -lA /etc/skel/
total 12
-rw-r--r--. 1 root root  18 Apr 11  2018 .bash_logout
-rw-r--r--. 1 root root 193 Apr 11  2018 .bash_profile
-rw-r--r--. 1 root root 231 Apr 11  2018 .bashrc
/etc/login.defs
bash 复制代码
[root@MineGi ~]#  grep -Ev "^$|^#" /etc/login.defs 
MAIL_DIR /var/spool/mail     #用户邮件存放目录
PASS_MAX_DAYS 99999         #密码默认最长有效期
PASS_MIN_DAYS 0             #密码默认最短有效期
PASS_MIN_LEN 5                 #密码默认长度
PASS_WARN_AGE 7             #密码过期警告时间
UID_MIN 1000                 #普通用户起始UID范围
UID_MAX 60000                 #普通用户结束UID范围
SYS_UID_MIN 201             #系统用户起始UID范围
SYS_UID_MAX 999             #系统用户结束UID范围
GID_MIN 1000                 #普通组起始GID范围
GID_MAX 60000                 #普通组结束GID范围
SYS_GID_MIN 201             #系统组起始GID范围
SYS_GID_MAX 999             #系统组结束GID范围
CREATE_HOME yes             #是否创建用户宿主目录
UMASK 077                     #用户宿主目录默认权限
USERGROUPS_ENAB yes         #表示userdel删除用户时,如果该用户用户组如果没有成员存在,则会删除该用户组
ENCRYPT_METHOD SHA512        #表示用户密码加密方式,此处表示用MD5加密密码
/etc/default/useradd
bash 复制代码
[root@MineGi ~]# grep -Ev "^$|^#" /etc/default/useradd 
GROUP=100
HOME=/home                         #把用户的主目录建在/home中
INACTIVE=-1                     #是否启用帐号过期停权,-1表示不启用
EXPIRE=                         #帐号终止日期,不设置表示不启用;
SHELL=/bin/bash                 #所用SHELL的类型;
SKEL=/etc/skel                     #默认添加用户的目录默认文件存放位置;也就是说,当我们用adduser添加用户时,用户家目录下的文件,都是从这个目录中复制过去的

/lib64/security/pam_cracklib.so    #控制密码复杂度的关键文件,Redhat公司专门开发了cracklib这个安装包来判断密码的复杂度。

[root@MineGi ~]# man pam_cracklib
retry=N                         #改变输入密码的次数,默认值是1。就是说,如果用户输入的密码强度不够就退出。可以使用这个选项设置输入的次数,以免一切都从头再来
minlen=N                         #新密码最低可接受的长度
difok=N                         #默认值为10。这个参数设置允许的新、旧密码相同字符的个数。不过,如果新密码中1/2的字符和旧密码不同,则新密码被接受
dcredit=N                         #限制新密码中至少有多少个数字
ucredit=N                        #限制新密码中至少有多少个大写字符。
lcredit=N                         #限制新密码中至少有多少个小写字符。

实践操作

bash 复制代码
1. 创建一个新用户 username1 使用默认的家目录和 shell
grep username1 /etc/passwd
ls -ld /home/username1
useradd username1
grep username1 /etc/passwd
ls -ld /home/username1
ls -lA /home/username1

2. 创建一个新用户 username2 指定家目录和登录 shell
useradd -d /opt/username2 -s /bin/sh username2
grep username2 /etc/passwd
ls -ld /home/username2
ls -ld /opt/username2
ls -lA /opt/username2

3. 创建一个新用户 username3 但不创建家目录,亦不让登录系统
useradd -M -s /sbin/nologin username3
grep username3 /etc/passwd
ls -ld /home/username3

4. 创建一个新用户 username4 并自定义 UID 值
tail -3 /etc/passwd
useradd -u 6688 username4
tail -4 /etc/passwd

5. 创建一个新用户 username5 并追加指定组为该用户的扩展组
grep username5 /etc/group
useradd -G root username5
grep username5 /etc/group
tail -5 /etc/group

6. 创建一个新用户 username6 并指定过期时间
useradd -e "3000-01-01" username6
grep username6 /etc/passwd
grep username6 /etc/shadow
tail -6 /etc/shadow

7. 创建一个新用户 username7 用于系统账户
useradd -r username7
grep username7 /etc/passwd
ls -ld /home/username7
#使用 -r 参数时,useradd 命令会:
#创建一个 UID 小于 UID_MIN 的账户(通常在 /etc/login.defs 中定义)
#不创建家目录(除非明确指定)将登录 shell 设置为 /sbin/nologin(在大多数系统上)
# -r 的主要目的是创建系统账户,阻止登录是它的副作用。
# 如果你只是想阻止普通用户账户登录,使用 -s /sbin/nologin 可能更直接和明确。
#在某些系统上,-r 可能不会自动设置 /sbin/nologin 作为 shell,所以显式使用 -s 参数更可靠。

注意事项

  • 在创建用户时,如果指定了 -m 选项但家目录已存在,并且该目录的所有者不是 root 或与指定的 UID 不匹配,则 useradd 命令可能会失败。
  • 创建用户后,通常需要设置用户密码,这可以通过 passwd 命令完成:passwd 用户名。
  • 使用 useradd 时,请确保你有足够的权限(通常是 root 权限)来创建用户。
  • 在使用 useradd 命令时,务必谨慎指定 UID 和 GID,确保它们不与现有的用户或组冲突。
  • 对于需要特定环境或配置的用户,可以通过 --skel 选项预先准备好一个包含必要文件和配置的目录,并在创建用户时指定该目录。
  • 创建系统账户时,通常不需要设置登录shell和家目录,因为这些账户主要用于后台服务,不需要交互式登录。
  • 在多用户环境中,合理使用用户组和权限控制是维护系统安全的关键。通过 useradd 的 -G 选项将用户添加到适当的组中,可以方便地进行权限管理。
  • 定期审查和更新用户账户是良好的安全管理实践。这包括检查用户的过期日期、登录活动、组成员身份等,以及及时删除不再需要的账户。
相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言