4.3. 使用命令行工具
除了 第 4.2 节 “在图形环境中管理用户” 中描述的 用户设置工具(用于基本管理用户 )外,您还可以使用命令行工具管理 表 4.1 “管理用户和组的命令行工具” 中列出的用户和组。
工具 | 描述 |
---|---|
| 显示用户和组 ID. |
| 用于添加、修改和删除用户帐户的标准实用程序. |
| 用于添加、修改和删除组的标准实用程序. |
|
实用程序主要用于修改由 |
| 可用于验证密码、组和相关影子文件的实用程序. |
| 实用程序,可用于将密码转换为影子密码,或者从影子密码转换回标准密码。 |
| 与前面的 类似,这些实用程序可用于转换组帐户的影子信息。 |
4.3.1. 添加新用户
要在系统中添加新用户,以 root
用户身份在 shell 提示符后输入以下内容:
useradd
options username
…其中选项是命令行选项,如 表 4.2 “常用 useradd 命令行选项” 所述。
默认情况下,user add
命令会创建一个锁定的用户帐户。要解锁帐户,以 root
用户身份运行以下命令来分配密码:
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
表示系统正在使用 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
开始。 两个感叹号(!
!
)显示在/etc/shadow
文件的密码字段中,该字段将锁定帐户。注意如果使用
-p
标志传递加密的密码,则会将其放置在用户新行中的/etc/shadow
文件中。- 密码设置为永不过期。
-
它以用户名
在
/etc/group
中为名为juan
的组创建一个新行:juan:x:1001:
与用户同名的组称为用户专用组。有关用户私人组群的详情请参考 第 4.1.1 节 “用户专用组”。
在
/etc/group
中创建的行具有以下特征:-
它以组名
juan
开头。 -
在密码字段中会出现
x
,表示系统正在使用 shadow 组密码。 -
GID 与
/etc/passwd
中为juan
的主组列出的匹配。
-
它以组名
在
/etc/gshadow
中为名为juan
的组创建一个新行:juan:!::
该行具有以下特征:
-
它以组名
juan
开头。 -
感叹号(
!
)显示在/etc/gshadow
文件的密码字段中,该文件将锁定组。 - 所有其他字段均为空。
-
它以组名
在
/home
目录中为用户juan
创建一个目录:~]# ls -ld /home/juan drwx------. 4 juan juan 4096 Mar 3 18:23 /home/juan
该目录归用户
juan
和组juan
所有。它 仅对 用户juan
具有 读取、写入 和执行 特权。所有其他权限都将被拒绝。/etc/skel/
目录中的文件(包含默认用户设置)复制到新的/home/juan/
目录中:~]# ls -la /home/juan total 28 drwx------. 4 juan juan 4096 Mar 3 18:23 . drwxr-xr-x. 5 root root 4096 Mar 3 18:23 .. -rw-r--r--. 1 juan juan 18 Jun 22 2010 .bash_logout -rw-r--r--. 1 juan juan 176 Jun 22 2010 .bash_profile -rw-r--r--. 1 juan juan 124 Jun 22 2010 .bashrc drwxr-xr-x. 4 juan juan 4096 Nov 23 15:09 .mozilla
此时系统上存在名为 juan
的锁定帐户。要激活它,管理员接下来必须使用 passwd
命令为帐户分配密码,也可以设置密码过期指南(详情请参阅 Red Hat Enterprise Linux 7 安全指南中 的密码安全部分 )。
4.3.2. 添加新组
要在系统中添加新组,以 root
用户身份在 shell 提示符后输入以下内容:
groupadd options group_name
…其中选项是命令行选项,如 表 4.3 “常用 groupadd 命令行选项” 所述。
选项 | 描述 |
---|---|
|
与 |
| 组的组 ID,它必须唯一且大于 999。 |
|
覆盖 |
| 允许使用重复的 GID 创建组. |
| 将此加密密码用于新组。 |
| 创建 GID 小于 1000 的系统组。 |
4.3.3. 将现有用户添加到现有组中
使用 usermod
实用程序将现有用户添加到现有的组中。
usermod
的各种选项对用户的主组以及他/她的补充组有不同影响。
要覆盖用户的主组群,以 root
用户身份运行以下命令:
~]# usermod -g group_name user_name
要覆盖用户的补充组,以 root
用户身份运行以下命令:
~]# usermod -G group_name1,group_name2,... user_name
请注意,在这种情况下,用户的所有前一个补充组都会被新组或多个新组替代。
要在用户的附加组中添加一个或多个组,以 root
用户身份运行以下命令之一:
~]# usermod -aG 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
在系统中添加
myproject
组:groupadd myproject
将
/opt/myproject/
目录的内容与myproject
组关联:chown root:myproject /opt/myproject
允许组中的用户在目录中创建文件并设置 setgid 位 :
chmod 2775 /opt/myproject
此时,myproject
组
的所有成员都可以在/opt/myproject/
目录中创建和编辑文件,无需管理员每次用户写入新文件时更改文件权限。要验证权限是否已正确设置,请运行以下命令:~]# ls -ld /opt/myproject drwxrwsr-x. 3 root myproject 4096 Mar 3 18:31 /opt/myproject
将用户添加到
myproject
组:usermod -aG myproject username
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
(不禁止任何权限),新的常规文件仍不具有执行权限。但是,可以创建具有执行权限的目录:
[john@server tmp]$ umask 0000 [john@server tmp]$ touch file [john@server tmp]$ mkdir directory [john@server tmp]$ ls -lh . total 0 drwxrwxrwx. 2 john john 40 Nov 2 13:17 directory -rw-rw-rw-. 1 john john 0 Nov 2 13:17 file
4.3.5.1. 在 Shell 中管理 umask
对于常用的 shell,如 bash
、ksh
、zsh
和 tcsh
,umask 使用 umask
shell 内置
进行管理。从 shell 启动的进程继承其 umask。
显示当前掩码
使用数值表示法显示当前的 umask:
~]$ umask
0022
使用符号表示法显示当前的 umask:
~]$ umask -S
u=rwx,g=rx,o=rx
使用 umask 在 shell 中设置掩码
使用数值表示法运行为当前 shell 会话设置 umask:
~]$ umask octal_mask
用从 0
到 7
的四位或更少数字替换 octal_mask。提供三个或更少的数字时,权限会像命令包含前导零一样设置。例如,umask 7
转换为 0007
。
例 4.1. 使用 Octal 表示设置 umask
要禁止新文件拥有所有者和组的写入和执行权限,并且不允许其他人拥有任何权限:
~]$ umask 0337
或只需:
~]$ umask 337
使用符号表示法为当前 shell 会话设置 umask :
~]$ umask -S symbolic_mask
例 4.2. 使用符号链接表示设置 umask
使用符号表示法设置 umask 0337
:
~]$ umask -S u=r,g=r,o=
使用默认的 shell umask
Shell 通常有一个配置文件,其中设置了其默认 umask。对于 bash
,它是 /etc/bashrc
。显示默认 bash
umask:
~]$ grep -i -B 1 umask /etc/bashrc
输出显示是否设置了 umask,可使用 umask
命令或 UMASK
变量。在以下示例中,使用 umask 命令将 umask
设置为 022
:
~]$ grep -i -B 1 umask /etc/bashrc # By default, we want umask to get set. This sets it for non-login shell. -- if [ $UID -gt 199 ] && [ “id -gn” = “id -un” ]; then umask 002 else umask 022
要更改 bash
的默认 umask,请在 /etc/bashrc
中更改 umask
命令调用或 UMASK
变量分配。本例将默认 umask 更改为 0227
:
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
为新创建的主目录设置默认权限
要更改创建用户主目录的权限,请在 /etc/login.defs
文件中更改 UMASK
变量:
# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK 077