3. useradd 命令

useradd 命令是用于创建新用户的基本命令。它会根据命令行参数和系统默认设置创建新的用户账户。

作用

  1. 在系统中创建新的用户账户。
  2. 设置用户的基本属性(如用户ID、主目录、登录 Shell 等)
  3. 为新用户创建主目录(如果指定了相应选项)
  4. 为新用户设置初始组和附加组

命令格式:

useradd [选项] 登录用户名

示例:

添加一个叫张三(zhang3)的用户

weimingze@mzstudio:~$ sudo useradd zhang3
[sudo] password for weimingze:
weimingze@mzstudio:~$ tail -2 /etc/passwd
sshd:x:122:65534::/run/sshd:/usr/sbin/nologin
zhang3:x:1001:1002::/home/zhang3:/bin/sh
weimingze@mzstudio:~$ tail -2 /etc/group
develop:x:1001:
zhang3:x:1002:
weimingze@mzstudio:~$ sudo tail -2 /etc/shadow
sshd:!:20230::::::
zhang3:!:20230:0:99999:7:::
weimingze@mzstudio:~$ ls /home/
weimingze

如上述可见在 /etc/passwd 的最后一行多了一条记录 zhang3:x:1001:1002::/home/zhang3:/bin/sh。这说明 zhang3 的用户 ID 是 1001,主组 ID 是 1003, 没有别名,用户主文件夹是 /home/zhang3,但并没有创建这个文件夹。用户默认使用的 Shell 是 /bin/sh,默认 Shell 可以通过选项进行更改。

可见 上述命令会为这个用户单独创建了一个组,在 /etc/group 下多了一行 zhang3:x:1002:,这说明组名是 zhang3,组 ID 是 1003。这个是 zhang3 用户的主组。

在文件 /etc/shadow 也多了一行 zhang3:!:20230:0:99999:7:::,此处用于保存 zhang3 的密码信息。需要使用 passwd 命令修改密码。

Shell 是用户用于解释执行命令的程序。在终端中,用于解释我们输入的命令的程序就是 Shell的一种具体实现。如果我们不需要这个用户能够登录系统,则可以使用 /usr/sbin/nologin 作为 Shell。

常用选项

选项
描述
示例
-m
创建用户主目录(通常与-k一起使用)
useradd -m zhangsan
-s <路径>
指定用户登录 Shell
useradd -s /bin/bash zhangsan
-c <别名>
为用户添加备注/描述信息
useradd -c "Developer" zhangsan
-d <路径>
指定用户主目录路径
useradd -d /home/zhangsanhome zhangsan
-g <组名或组ID>
指定用户主组的组ID或组名
useradd -g developer zhangsan
-e <时间字符串>
设置账户过期日期(YYYY-MM-DD)
useradd -e 2023-12-31 zhangsan
-f <数字>
密码过期后账户被禁用的天数
useradd -f 30 zhangsan
-G <组名或组ID>
指定用户附加组的组ID或组名(逗号分隔)
useradd -G develop,weimingze,zhangsan
-M
不创建用户主目录
useradd -M zhangsan
-N
不创建与用户同名的组
useradd -N zhangsan
-p <密码加密串>
设置加密后的用户密码(不推荐直接使用)
useradd -p encrypted_pass zhangsan
-r
创建系统账户(无主目录,UID<1000)
useradd -r systemuser
-u <数字>
指定用户ID
useradd -u 5000 zhangsan
-k <路径>
指定骨架文件夹(与-m一起使用),默认会把骨架文件夹的内容复制到用户主目录
useradd -m -k /etc/skel zhangsan

示例:

给开发部的 李四 创建一个新的用户 li4,将他的主组指定到开发组 develop;在创建用户的时候,创建自己的用户主文件夹:/home/lisi;将 li3 的备注名指定为 develop_lisi,指定他的默认 Shell 为 /bin/bash

weimingze@mzstudio:~$ sudo useradd -g develop -m -d /home/lisi -c develop_lisi -s /bin/bash li4
weimingze@mzstudio:~$ tail -4 /etc/passwd
weimingze:x:1000:1000:weimingze:/home/weimingze:/bin/bash
sshd:x:122:65534::/run/sshd:/usr/sbin/nologin
zhang3:x:1001:1002::/home/zhang3:/bin/sh
li4:x:1002:1001:develop_lisi:/home/lisi:/bin/bash
weimingze@mzstudio:~$ tail -3 /etc/group
weimingze:x:1000:
develop:x:1001:
zhang3:x:1002:
weimingze@mzstudio:~$ sudo tail -4 /etc/shadow
weimingze:$6$4cfDY79VgwUp70yB$vvN6o6.ldMV1doonvd7tppRtK.NLW3FI6Cg5rvFmwOvlhqYerJDj3iiZekxLeeI79SozxG5ce8GJfyRlmBocJ/:20230:0:99999:7:::
sshd:!:20230::::::
zhang3:!:20230:0:99999:7:::
li4:!:20230:0:99999:7:::
weimingze@mzstudio:~$ ls /home/
lisi  weimingze
weimingze@mzstudio:~$

可见 /etc/passwd 下多了一行 li4:x:1002:1001:develop_lisi:/home/lisi:/bin/bash,文件 /etc/group 还是原来的样子,没有为 li4 创建新的组。在 /home/ 多了一个文件夹 lisili4 用户的主目录。

练习:

  1. 创建一个用户 test。要求:创建用户主文件为 /home/test,指定登陆Shell 为 /bin/sh
  2. 查看 /etc/passwd 文件,看此用户是否存在。
  3. 查看 /etc/group 文件,看此用户的主组是否存在。