Linux 用户管理
最小权限原则
最小权限原则(Principle of Least Privilege, POLP)是一种在计算机安全领域广泛遵循的原则,其核心理念是:任何用户、进程、程序或系统组件都应仅拥有执行其任务所必需的最小范围内的权限。换句话说,不应授予比完成工作所需的更多访问权或特权。
具体来说:
- 每个用户账号应当只被赋予完成其职责所必要的账户权限,例如,如果一个用户只需要读取特定文件,则不应授予其写入或删除该文件的权限。
- 应用程序和服务应当以非管理员或最少特权用户身份运行,除非它们确实需要进行系统级别的操作。
- 系统配置和策略应当限制不必要的资源访问,确保即使有恶意软件或内部误操作发生时,攻击面也能保持最小化。
通过实施最小权限原则,可以有效减少潜在的安全威胁,因为即便某个部分遭到破坏,其损害也会受限于其所拥有的权限级别。这有助于防止恶意活动扩散,并保护敏感信息不被未经授权的访问或修改。
用户
切换到其他用户
变更帐号为 root 并在执行 ls 指令后退出变回原使用者:
1 | su -c ls root |
变更帐号为 test 并改变工作目录至 test 的家目录:
1 | su - test |
从 root 用户切换为之前的普通用户只需要
exit
即可。
修改密码
普通用户修改自己的密码
1 | passwd |
root 用户修改其他用户密码
1 | passwd user_name |
如果修改密码过程中不想修改了,可以尝试
ctrl + c
或者ctrl + d
退出
锁定某个用户的密码(让他不能修改):
1 | # 锁定 |
删除用户密码(则登录时无需密码):
1 | passwd -d user_name |
用户组
将用户归为特定的组并设置路径权限
创建组
首先,如果A组和B组还不存在,你可以使用 groupadd
命令来创建它们:
1 | sudo groupadd groupA |
将用户添加到组中
使用 usermod
命令将用户添加到所需的组中。例如,将用户 user1
添加到 groupA
:
1 | sudo usermod -aG groupA user1 |
同样地,将用户 user2
添加到 groupB
:
1 | sudo usermod -aG groupB user2 |
在这个命令 sudo usermod -aG groupA user1
中:
-a
: 这个选项是 “append” 的缩写。使用-a
选项意味着你想要向用户的现有组(以及其他组)中添加一个新的组,而不是替换掉现有的组。G
: 这个选项告诉usermod
命令你要修改用户的组关联。
因此,-aG
组合选项的作用是将指定用户添加到指定的组(在此例中是 groupA
)中,而不会影响该用户的其他组关联。
如果想要让某个文件/路径A组可读写,B组可读,单纯通过
chmod
无法实现,需要借助更高级的权限管理工具。因此一种常规的做法是,将同一个用户添加到多个组中,通过对组的权限进行设置,实现复杂权限控制。
如果你想要将当前用户(即你正在使用的用户)移动到一个特定的组中,你可以使用 usermod
命令。但是需要小心,这样做可能会导致一些权限问题,因为用户现有的文件和目录可能是基于之前的主组创建的。所以,在更改用户的主组后,确保适当地调整文件和目录的权限,以确保用户在新的主组中有所需的权限。
要将当前用户(例如,假设当前用户是 user1
)移动到 groupA
组,你可以执行以下命令:
1 | sudo usermod -g groupA user1 |
设置路径权限
使用 chmod
和 chown
命令来设置路径的权限。例如,如果你有一个名为 /path/to/your/directory
的目录,并且你想让 groupA
的用户有对该目录的读写权限,而 groupB
的用户只有读权限,你可以执行以下操作:
- 设置目录
所有者:组
:
1 | sudo chown user1:groupA /path/to/your/directory |
所有者和组没有必然联系,所有者未必是属于这个组的。
- 设置目录的权限为允许
groupA
读写,但只允许groupB
读:
1 | sudo chmod 770 /path/to/your/directory |
现在,只有属于 groupA
的用户可以读取、写入和执行 /path/to/your/directory
。其他用户(不是所有者也不属于 groupA
的用户)则不能访问这个目录。
- 设置ACL (可选):
如果你想为特定的组或用户设置更细粒度的权限控制,可以考虑使用ACL(访问控制列表)。这允许你设置文件或目录的详细权限规则。
修改所属组
1 | 修改所属用户 |
Linux 权限说明
在Linux和UNIX系统中,文件和目录的权限可以使用数字形式表示。这些数字是通过组合不同的权限标志来构成的。
每个权限标志对应一个特定的数值:
r
(读取权限):对应数值4
w
(写入权限):对应数值2
x
(执行权限):对应数值1
为了设置文件或目录的权限,你可以为所有者、组和其他用户分别分配上述的权限数值。当你将这些数值相加,就可以得到完整的三位数字表示权限。
举例来说,如果你看到一个权限设置是 770
,它可以被分解为:
- 第一个数字
7
:代表所有者的权限。这是通过将rwx
转换为对应的数值进行计算得到的,即4 (读) + 2 (写) + 1 (执行) = 7
。 - 第二个数字
7
:代表所属组(即属于该组的其他用户)的权限。同样,它也是rwx
,即4 (读) + 2 (写) + 1 (执行) = 7
。 - 第三个数字
0
:代表其他用户(不是文件或目录的所有者或同组的用户)的权限。这里为0
意味着没有任何权限。
授权指令chmod
https://www.runoob.com/linux/linux-comm-chmod.html
语法
1 | chmod [-cfvR] [--help] [--version] mode file... |
参数说明
mode : 权限设定字串,格式如下 :
1 | [ugoa...][[+-=][rwxX]...][,...] |
其中:
u
表示该文件的拥有者,g
表示与该文件的拥有者属于同一个群体(group)者,o
表示其他以外的人,a
表示这三者皆是。+
表示增加权限、-
表示取消权限、=
表示唯一设定权限。r
表示可读取,w
表示可写入,x
表示可执行,X
表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
其他参数说明:
-c
: 若该文件权限确实已经更改,才显示其更改动作-f
: 若该文件权限无法被更改也不要显示错误讯息-v
: 显示权限变更的详细资料-R
: 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)--help
: 显示辅助说明--version
: 显示版本
示例
1 | 给 /test/a 的所有者添加执行权限 |
查看当前系统的用户/组情况
要查看当前系统上的所有组和用户,你可以使用以下命令:
- 查看所有组:
你可以查看 /etc/group
文件来列出所有的组。这个文件包含了系统上的所有组的信息。
1 | cat /etc/group |
或者使用以下命令,它会输出更加简洁的组列表:
1 | getent group |
- 查看所有用户:
你可以查看 /etc/passwd
文件来列出所有的用户。这个文件包含了系统上的所有用户的信息。
1 | cat /etc/passwd |
但是,如果你只想查看系统用户而不包括系统服务用户(通常UID < 1000的用户),你可以使用以下命令:
1 | awk -F':' '$3 >= 1000 && $3 != 65534 { print $1 }' /etc/passwd |
这个命令使用了 awk
工具来过滤 UID 在 1000 或以上的用户,并排除了通常用于系统服务的用户(如 nobody
)。
awk
:这是一个文本处理工具,用于对文本文件进行数据提取和处理。-F':'
:这是awk
命令的一个选项,它告诉awk
使用:
作为字段分隔符。在这里,我们正在处理/etc/passwd
文件,该文件使用:
来分隔不同的字段。'$3 >= 1000 && $3 != 65534 { print $1 }'
:'$3 >= 1000
:这个条件检查第三个字段(即用户 ID,UID)是否大于或等于 1000。&&
:这是一个逻辑与操作符,用于结合多个条件。$3 != 65534
:这个条件确保 UID 不是 65534。通常,这个 UID 被nobody
用户使用,所以我们排除它。{ print $1 }
:当上述条件都满足时,执行这个动作,打印出第一个字段,也就是用户名。
/etc/passwd
:这是我们想要处理的文件路径,它通常包含系统上所有用户的列表及其相关信息。
查看当前用户进程
1 | u: 显示用户、启动进程的时间和命令, x: 显示没有控制终端的进程 |