4.3. 使用命令行工具
除了 第 4.2 节 “在图形环境中管理用户” 中描述的 用户设置工具(用于基本管理用户 )外,您还可以使用命令行工具管理 表 4.1 “管理用户和组的命令行工具” 中列出的用户和组。
| 工具 | 描述 |
|---|---|
|
| 显示用户和组 ID. |
|
| 用于添加、修改和删除用户帐户的标准实用程序. |
|
| 用于添加、修改和删除组的标准实用程序. |
|
|
实用程序主要用于修改由 |
|
| 可用于验证密码、组和相关影子文件的实用程序. |
|
| 实用程序,可用于将密码转换为影子密码,或者从影子密码转换回标准密码。 |
|
| 与前面的 类似,这些实用程序可用于转换组帐户的影子信息。 |
4.3.1. 添加新用户 复制链接链接已复制到粘贴板!
要在系统中添加新用户,以 root 用户身份在 shell 提示符后输入以下内容:
useradd options username
useradd options username
…其中选项是命令行选项,如 表 4.2 “常用 useradd 命令行选项” 所述。
默认情况下,user add 命令会创建一个锁定的用户帐户。要解锁帐户,以 root 用户身份运行以下命令来分配密码:
passwd username
passwd username
(可选)您可以设置密码过期策略。请参阅 Red Hat Enterprise Linux 7 安全指南中 的密码安全部分。
| 选项 | |
|---|---|
|
| 注释可以被替换为任何字符串。此选项通常用于指定用户的全名。 |
|
|
要使用的主目录,而不是默认的 |
|
| 以 YYYY-MM-DD 格式禁用的帐户的日期。 |
|
|
密码到期之后的天数,直到禁用帐户为止.如果指定了 |
|
| 用户默认(主要)组的组名或组号。组必须在此处指定之前存在。 |
|
| 以逗号分开的额外(补充,非默认)组名或组号列表,用户是其中的成员。组必须在此处指定之前存在。 |
|
| 如果主目录不存在,则创建该目录。 |
|
| 不要创建主目录。 |
|
| 不要为用户创建用户专用组。 |
|
|
通过 |
|
| 创建 UID 小于 1000 且没有主目录的系统帐户。 |
|
|
用户的登录 shell,默认为 |
|
| 用户的用户 ID,它必须唯一且大于 999。 |
在 Red Hat Enterprise Linux 7 中,系统和普通用户的默认 ID 范围已从早期版本中更改。在以前的版本中,UID 1-499 用于系统用户和以上正常用户的值。系统用户的默认范围现在是 1-999。因为这个变化,当迁移到 Red Hat Enterprise Linux 7 时,如果有用户的 UID 和 GID 在 500 到 999 之间,则可能会造成问题。UID 和 GID 的默认范围可以在 /etc/login.defs 文件中更改。
解释进程
以下步骤演示了在启用了影子密码的系统上发出 useradd juan 命令时会发生什么情况:
在
/etc/passwd中为juan创建一个新行:juan:x:1001:1001::/home/juan:/bin/bash
juan:x:1001:1001::/home/juan:/bin/bashCopy to Clipboard Copied! Toggle word wrap Toggle overflow 该行具有以下特征:
-
它以用户名
juan开始。 -
密码字段有一个
x表示系统正在使用 shadow 密码。 - 创建大于 999 的 UID。在 Red Hat Enterprise Linux 7 下,1000 以下的 UID 保留给系统使用,不应分配给用户。
- 创建大于 999 的 GID。在 Red Hat Enterprise Linux 7 下,1000 以下的 GID 保留给系统使用,不应分配给用户。
- 可选的 GECOS 信息留空。GECOS 字段可用于提供有关用户的其他信息,如用户的全名或电话号码。
-
juan的主目录设为/home/juan/。 -
默认 shell 设置为
/bin/bash。
-
它以用户名
在
/etc/shadow中为juan创建一个新行:juan:!!:14798:0:99999:7:::
juan:!!:14798:0:99999:7:::Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该行具有以下特征:
-
它以用户名
juan开始。 两个感叹号(!
!)显示在/etc/shadow文件的密码字段中,该字段将锁定帐户。注意如果使用
-p标志传递加密的密码,则会将其放置在用户新行中的/etc/shadow文件中。- 密码设置为永不过期。
-
它以用户名
在
/etc/group中为名为juan的组创建一个新行:juan:x:1001:
juan:x:1001:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 与用户同名的组称为用户专用组。有关用户私人组群的详情请参考 第 4.1.1 节 “用户专用组”。
在
/etc/group中创建的行具有以下特征:-
它以组名
juan开头。 -
在密码字段中会出现
x,表示系统正在使用 shadow 组密码。 -
GID 与
/etc/passwd中为juan的主组列出的匹配。
-
它以组名
在
/etc/gshadow中为名为juan的组创建一个新行:juan:!::
juan:!::Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该行具有以下特征:
-
它以组名
juan开头。 -
感叹号(
!)显示在/etc/gshadow文件的密码字段中,该文件将锁定组。 - 所有其他字段均为空。
-
它以组名
在
/home目录中为用户juan创建一个目录:ls -ld /home/juan
~]# ls -ld /home/juan drwx------. 4 juan juan 4096 Mar 3 18:23 /home/juanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 该目录归用户
juan和组juan所有。它 仅对 用户juan具有 读取、写入 和执行 特权。所有其他权限都将被拒绝。/etc/skel/目录中的文件(包含默认用户设置)复制到新的/home/juan/目录中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
此时系统上存在名为 juan 的锁定帐户。要激活它,管理员接下来必须使用 passwd 命令为帐户分配密码,也可以设置密码过期指南(详情请参阅 Red Hat Enterprise Linux 7 安全指南中 的密码安全部分 )。
4.3.2. 添加新组 复制链接链接已复制到粘贴板!
要在系统中添加新组,以 root 用户身份在 shell 提示符后输入以下内容:
groupadd options group_name
groupadd options group_name
…其中选项是命令行选项,如 表 4.3 “常用 groupadd 命令行选项” 所述。
| 选项 | 描述 |
|---|---|
|
|
与 |
|
| 组的组 ID,它必须唯一且大于 999。 |
|
|
覆盖 |
|
| 允许使用重复的 GID 创建组. |
|
| 将此加密密码用于新组。 |
|
| 创建 GID 小于 1000 的系统组。 |
4.3.3. 将现有用户添加到现有组中 复制链接链接已复制到粘贴板!
使用 usermod 实用程序将现有用户添加到现有的组中。
usermod 的各种选项对用户的主组以及他/她的补充组有不同影响。
要覆盖用户的主组群,以 root 用户身份运行以下命令:
usermod -g group_name user_name
~]# usermod -g group_name user_name
要覆盖用户的补充组,以 root 用户身份运行以下命令:
usermod -G group_name1,group_name2,... user_name
~]# usermod -G group_name1,group_name2,... user_name
请注意,在这种情况下,用户的所有前一个补充组都会被新组或多个新组替代。
要在用户的附加组中添加一个或多个组,以 root 用户身份运行以下命令之一:
usermod -aG group_name1,group_name2,... user_name
~]# usermod -aG group_name1,group_name2,... user_name
usermod --append -G group_name1,group_name2,... user_name
~]# usermod --append -G group_name1,group_name2,... user_name
请注意,在这种情况下,新组会添加到用户的当前补充组中。
4.3.4. 创建组目录 复制链接链接已复制到粘贴板!
系统管理员通常喜欢为每个主要项目创建组,并在需要访问该项目的文件时将人员分配给组。采用这种传统方案时,文件管理比较困难;当有人创建文件时,它与其所属的主要组相关联。当单个人处理多个项目时,将正确的文件与正确的组关联变得困难。但是,使用 UPG 方案时,组会自动分配到设置了 setgid 位的目录中创建的文件。setgid 位使得管理共享一个通用目录的组项目非常简单,因为用户在该目录中创建的任何文件都归拥有该目录的组所有。
例如,一组人需要处理 /opt/myproject/ 目录中的文件。些人信任修改此目录的内容,但不是每个人。
以
root用户身份,在 shell 提示符下键入以下内容来创建/opt/myproject/目录:mkdir /opt/myproject
mkdir /opt/myprojectCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在系统中添加
myproject组:groupadd myproject
groupadd myprojectCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
/opt/myproject/目录的内容与myproject组关联:chown root:myproject /opt/myproject
chown root:myproject /opt/myprojectCopy to Clipboard Copied! Toggle word wrap Toggle overflow 允许组中的用户在目录中创建文件并设置 setgid 位 :
chmod 2775 /opt/myproject
chmod 2775 /opt/myprojectCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此时,myproject
组的所有成员都可以在/opt/myproject/目录中创建和编辑文件,无需管理员每次用户写入新文件时更改文件权限。要验证权限是否已正确设置,请运行以下命令:ls -ld /opt/myproject
~]# ls -ld /opt/myproject drwxrwsr-x. 3 root myproject 4096 Mar 3 18:31 /opt/myprojectCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将用户添加到
myproject组:usermod -aG myproject username
usermod -aG myproject usernameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.5. 使用 umask为新文件设置默认权限 复制链接链接已复制到粘贴板!
当进程创建文件时,该文件具有特定的默认权限,例如 -rw-rw-r--。这些初始权限部分由文件模式创建掩码定义 ,也称为文件权限掩码或 umask。每个进程都有自己的 umask,例如,默认情况下 bash 具有 umask 0022。可以更改进程 umask。
umask 包括什么
umask 由与标准文件权限对应的位组成。例如,对于 umask 0137,数字表示:
-
0= 无含义,它始终为0(umask 不影响特殊位) -
1= 对于所有者权限,将设置执行位 -
3= 对于组权限,会设置执行位和写入位 -
7= 对于其他权限,将设置执行、写入和读取位
Umasks 可以用二进制、八进制或符号表示法表示。例如,八进制表示 0137 等于符号表示 u=rw-,g=r--,o=---。符号表示规格与八进制表示规范相反:它显示允许的权限,而不是禁止的权限。
umask 的工作原理
umask 禁止为文件设置权限 :
- 在 umask 中设置了一个位时,该文件中将取消设置。
- 在 umask 中未设置位时,可以在 文件中设置它,具体取决于其他因素。
下图显示了 umask 0137 如何影响新文件的创建。
图 4.3. 在创建文件时应用 umask
出于安全原因,在默认情况下,常规文件将不能拥有执行权限。因此,即使 umask 为0000 (不禁止任何权限),新的常规文件仍不具有执行权限。但是,可以创建具有执行权限的目录:
4.3.5.1. 在 Shell 中管理 umask 复制链接链接已复制到粘贴板!
对于常用的 shell,如 bash、ksh、zsh 和 tcsh,umask 使用 umask shell 内置 进行管理。从 shell 启动的进程继承其 umask。
显示当前掩码
使用数值表示法显示当前的 umask:
umask
~]$ umask
0022
使用符号表示法显示当前的 umask:
umask -S
~]$ umask -S
u=rwx,g=rx,o=rx
使用 umask 在 shell 中设置掩码
使用数值表示法运行为当前 shell 会话设置 umask:
umask octal_mask
~]$ umask octal_mask
用从 0 到 7 的四位或更少数字替换 octal_mask。提供三个或更少的数字时,权限会像命令包含前导零一样设置。例如,umask 7 转换为 0007。
例 4.1. 使用 Octal 表示设置 umask
要禁止新文件拥有所有者和组的写入和执行权限,并且不允许其他人拥有任何权限:
umask 0337
~]$ umask 0337
或只需:
umask 337
~]$ umask 337
使用符号表示法为当前 shell 会话设置 umask :
umask -S symbolic_mask
~]$ umask -S symbolic_mask
例 4.2. 使用符号链接表示设置 umask
使用符号表示法设置 umask 0337 :
umask -S u=r,g=r,o=
~]$ umask -S u=r,g=r,o=
使用默认的 shell umask
Shell 通常有一个配置文件,其中设置了其默认 umask。对于 bash,它是 /etc/bashrc。显示默认 bash umask:
grep -i -B 1 umask /etc/bashrc
~]$ grep -i -B 1 umask /etc/bashrc
输出显示是否设置了 umask,可使用 umask 命令或 UMASK 变量。在以下示例中,使用 umask 命令将 umask 设置为 022 :
要更改 bash 的默认 umask,请在 /etc/bashrc 中更改 umask 命令调用或 UMASK 变量分配。本例将默认 umask 更改为 0227 :
if [ $UID -gt 199 ] && [ “id -gn” = “id -un” ]; then
umask 002
else
umask 227
if [ $UID -gt 199 ] && [ “id -gn” = “id -un” ]; then
umask 002
else
umask 227
使用特定用户的默认 shell umask
默认情况下,新用户的 bash umask 默认为 /etc/bashrc 中定义的 umask。
要为 特定用户更改 bash umask,请在用户的 $HOME/.bashrc 文件中添加对 umask 命令的调用。例如,将用户 john 的 bash umask 更改为 0227 :
john@server ~]$ echo 'umask 227' >> /home/john/.bashrc
john@server ~]$ echo 'umask 227' >> /home/john/.bashrc
为新创建的主目录设置默认权限
要更改创建用户主目录的权限,请在 /etc/login.defs 文件中更改 UMASK 变量:
The permission mask is initialized to this value. If not specified, the permission mask will be initialized to 022.
# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK 077