认识 passwd 文件
/etc/passwd
是用来存储用户基本信息的文件,它类似于电子表格,一共有 7 列。useradd
指令在创建用户时可以默认指定一些列的信息,例如:shell 类型、GID(组ID)。
-c, --comment
选项给用户设置一个简要的说明,由于该选项的功能过于简单,所以就不作为单独的分点来概述。
认识 useradd 指令
useradd 指令有 -b、-d、-c、-g、-m、-p 六个常用的选项。在使用指令时,它们都可以不出现,系统默认使用/etc/default/useradd
文件中定义的默认值。
-b
-b, --base_dir
BASE_DIR 指的是基本路径,创建用户之初默认使用 BASE_DIR。BASE_DIR 与用户名拼接起来的路径就是该用户的主目录路径(HOME_DIR)。如果 useradd 文件中没有 BASE_DIR,就直接和/home/
拼接。
假如,创建用户时没有使用 -d 或 -b 指定 HOME_DIR 时,系统使用上述的规则创建 HOME_DIR。
打开 useradd 文件,修改 BASE_DIR 字段:
![](/i/l/?n=22&i=blog/2271881/202210/2271881-20221005225407802-1536439318.png)
在使用指令创建用户时,如果没有使用参数 -d 或者 -b 来指定用户的 HOME_DIR,那么HOME=/home/cust
就是用户的 BASE_DIR。用户名 rio 与/home/cust/
拼接得到的路径就是该用户的主目录路径(HOME_DIR):
zrf@ubuntu:~/Desktop$ sudo useradd -m rio
zrf@ubuntu:~/Desktop$ sudo cat /etc/passwd | grep rio
rio:x:1001:1001::/home/cust/rio:/bin/sh
创建 rio 用户时,给 -b 传递路径/haha
,那么系统在根目录下创建一个/haha/rio
目录作为该用户的 HOME_DIR:
zrf@ubuntu:~/Desktop$ sudo useradd -b /haha -m rio
zrf@ubuntu:~/Desktop$ sudo cat /etc/passwd | grep rio
rio:x:1001:1001::/haha/rio:/bin/sh
-d
-d, --home-dir
与 -b 不同的是,-d 的路径不会和用户名拼接,而是直接把 -d 的路径作为该用户的 HOME_DIR。
zrf@ubuntu:~/Desktop$ sudo useradd -d /home/doption -m rio
zrf@ubuntu:~/Desktop$ sudo cat /etc/passwd | grep rio
rio:x:1001:1001::/home/doption:/bin/sh
如果不指定 -d 选项,使用 -b 的规则来创建用户的 HOME_DIR。因此,-d 和 -b 两个选项最好不要同时出现,避免出错。
-g
-g, --gid
用户创建时,系统默认分配一个组给该用户,称之为私有组。私有组的组ID 与用户ID 是一致的。因为私有组本身就是以用户名来作为组名创建的,而且,一个私有组就是一个用户,也就是说,用户本身就是一个私有组。
-g 选项可以指定一个/etc/group
文件中存在的组名或者组ID。当然,-g 选项是可以不用出现的,不出现就是上述规则分配用户的组。
zrf@ubuntu:~/Desktop$ sudo useradd -d /home/doption -m -g 1000 rio
zrf@ubuntu:~/Desktop$ sudo cat /etc/passwd | grep rio
rio:x:1001:1000::/home/doption:/bin/sh
-m
-m, --create-home
如果用户的主目录不存在,就创建用户的主目录。如果这个选项不出现,那么就不执行这一步操作,也就是说这个用户没有主目录。但是,通过 GNOME 图形界面登入这个用户之后也是会创建主目录的。
-p
-p, --password
在创建用户的时候,默认没有设置密码,要么后续通过passwd
指令修改该用户的密码,要么在创建之时就指定密码。但是,Linux 官方不推荐使用该选项来设置密码,因为它是明文显示在 Shell 行命令上的,其实也无伤大雅。
zrf@ubuntu:~/Desktop$ sudo useradd -d /home/doption -m -p rio123 rio
zrf@ubuntu:~/Desktop$ sudo cat /etc/shadow | grep rio
rio:rio123:19270:0:99999:7:::
查看/etc/shadow
文件,找到 rio 用户的密码,可以看到密码和我们设置的密码是一致的。