用户和权限管控
在 Linux 系统中,用户和权限管理是确保系统安全性和功能正常运行的关键部分。每个用户都有自己的权限范围,这些权限决定了用户可以访问和修改哪些文件和目录。了解如何查看用户和用户组信息,对于管理系统和诊断权限问题至关重要。
- 普通用户权限:普通用户通常在其 HOME 目录内拥有读写和执行权限。这意味着用户可以在自己的主目录中创建、删除和执行文件。
- 系统范围内的权限:在 HOME 目录之外,普通用户的权限通常受到限制,很多情况下仅限于读取和执行特定文件和目录,而没有修改的权限。
# 1. 查看用户/用户组信息
getent
命令可以用来获取系统上的用户和用户组信息。这个命令从系统的数据库中获取条目,这些数据库包括但不限于 /etc/passwd
和 /etc/group
。
# 1. 获取指定用户的信息
getent passwd username
getent passwd username
:此命令提供了关于指定用户的详细信息,包括用户名、用户ID(UID)、组ID(GID)、用户全名、家目录和登录shell。
# 2. 获取所有用户的信息
getent passwd
getent passwd
:这将列出系统上所有用户的信息。这对于查看系统上有哪些用户特别有用。
# 3. 获取指定用户组的信息
getent group groupname
getent group groupname
:此命令显示指定用户组的详细信息,包括组名、密码、组ID(GID)和组成员。
# 4. 获取所有用户组的信息
getent group
getent group
:这将列出系统上所有用户组的信息。这有助于管理员了解系统上存在哪些用户组以及它们的成员。
# 2. 用户管理
在 Linux 系统中,管理用户账户是系统管理员的基本职责之一。了解如何创建和管理用户,以及如何配置用户的权限和组成员资格,对于维护系统的安全性和功能性至关重要。
# 1. 创建用户(useradd)
useradd
命令用于创建一个新的用户账户。
useradd [选项] 用户名
-g
选项:指定用户的初始登录组。该组必须已存在。如果不指定-g
,系统会创建与用户名同名的组并将用户加入该组。-d
选项:指定用户的主目录。如果不提供这个选项,用户的主目录默认设置为/home/用户名
。
useradd -g users -d /home/newuser newuser
# 2. 删除用户(userdel)
userdel
命令用于删除用户账户。
userdel [选项] 用户名
-r
选项:在删除用户账户的同时删除其主目录和邮件目录。
userdel -r olduser
# 3. 设置用户密码(passwd)
passwd
命令用于设置或更改用户账户的密码。
passwd 用户名
- 在执行该命令后,系统会提示输入新的密码。
passwd newuser
# 4. 切换用户身份(su)
su
命令用于切换当前用户身份到另一个用户。
su - 用户名
- 使用
-
选项可以模拟完全登录环境,即切换到目标用户的 HOME 目录,并加载其 shell 环境变量等。
su - newuser
# 5. 查看用户所属组(id)
id
命令显示指定用户的用户ID、组ID以及所属的组。
id 用户名
- 如果不提供用户名,
id
显示当前用户的信息。
id newuser
# 6. 修改用户所属组(usermod)
usermod
命令用于修改用户的账户属性,包括用户所属的组。
usermod -aG 用户组 用户名
-aG
选项:将用户添加到额外的组(-a
是追加,-G
指定组),而不是替换现有的用户组。
usermod -aG sudo newuser
通过使用这些用户管理命令,系统管理员可以有效地创建和管理系统上的用户账户,包括用户的权限、主目录、密码和组成员资格,以确保系统的安全性和用户的需求得到满足。
# 3. 用户组管理
在 Linux 系统中,用户组管理是一项重要的系统管理任务。用户组允许管理员为一组用户分配相同的权限,从而简化权限和资源访问的管理。下面是一些基本的用户组管理命令,以及它们的用法和作用。
# 1. 创建用户组(groupadd)
groupadd 用户组名
- 用途:创建一个新的用户组。
- 示例:
groupadd developers
创建一个名为 "developers" 的新用户组。
# 2. 删除用户组(groupdel)
groupdel 用户组名
- 用途:删除已存在的用户组。
- 注意:删除用户组前,请确保没有用户属于该组。
- 示例:
groupdel developers
删除 "developers" 用户组。
# 3. 修改用户组名(groupmod)
groupmod -n 新用户组名 旧用户组名
- 用途:更改用户组的名称。
- 示例:
groupmod -n dev team
将用户组名 "team" 改为 "dev"。
# 4. 查看用户组信息(getent)
getent group 用户组名
- 用途:显示用户组的详细信息,包括组名、组密码、GID和组成员。
- 示例:
getent group developers
显示 "developers" 用户组的信息。
# 5. 添加用户到用户组(usermod)
usermod -aG 用户组名 用户名
- 用途:将用户添加到一个或多个用户组。
- 选项:
-aG
:-a
表示追加,-G
指定组名。这确保用户被添加到指定组而不是从其他组中移除。
- 示例:
usermod -aG developers alice
将用户 "alice" 添加到 "developers" 用户组。
# 6. 从用户组中移除用户(gpasswd)
gpasswd -d 用户名 用户组名
- 用途:从用户组中移除指定用户。
- 示例:
gpasswd -d alice developers
从 "developers" 用户组中移除 "alice"。
# 7. 创建用户与用户组示例
在实际的系统管理过程中,经常需要创建用户组来组织用户,并根据需要将用户添加到适当的组中。例如,如果你想创建一个 "developers" 组,并添加用户 "alice" 和 "bob":
创建用户组:"developers"。
groupadd developers
1创建用户 "alice" 和 "bob"(如果尚未创建)。
useradd alice useradd bob
1
2将 "alice" 和 "bob" 添加到 "developers" 组。
usermod -aG developers alice usermod -aG developers bob
1
2
# 4. 权限说明
权限槽位:总共有10个字符,分成四部分表示。
- 第1个字符表示文件类型。
- 接下来的9个字符分为三组,每组三个字符,分别代表文件拥有者(User)、拥有者所在组(Group)、其他用户(Others)的权限。
1. 文件类型:第1个字符指的是文件类型:
-
:普通文件。d
:目录。- 其他特殊文件类型字符包括链接(
l
)、字符设备(c
)、块设备(b
)等。
2. 权限字符
- r(Read):可读权限(4)。
- w(Write):可写权限(2)。
- x(Execute):执行权限(1)。
- -:没有对应权限(0)。
3. 权限分组
- 文件拥有者权限(User):第2至第4个字符。
- 组权限(Group):第5至第7个字符。
- 其他用户权限(Others):第8至第10个字符。
4. 权限信息示例
假设有一个权限字符串 -rwxrw-r--
:
- 第一位
-
表示这是一个普通文件。 - 第一组(rwx)表示文件拥有者具有读、写、执行的权限。
- 第二组(rw-)表示文件拥有者所在组的成员具有读、写权限,但没有执行权限。
- 第三组(r--)表示其他用户只有读权限。
5. 权限的数值表示("8421法")
每个权限(读、写、执行)可以用一个数值来表示,这是基于它们的二进制表示:
- 4:读(r)
- 2:写(w)
- 1:执行(x)
通过将每组的权限值加在一起,可以得到一个三位数的数值表示,例如 755
(rwxr-xr-x)代表:
- 文件拥有者具有读、写、执行(7=4+2+1)权限。
- 所在组成员具有读和执行(5=4+0+1)权限。
- 其他用户具有读和执行(5=4+0+1)权限。
# 5. 文件权限(chmod)
修改文件、文件夹的权限信息。注:只有文件、文件夹的所属用户或root用户可以修改
# 语法 chmod [-R] 权限 文件或文件夹
chmod -R u=rwx,g=rx,o=x test # 将文件夹test及其文件夹内全部内容权限设置为 rwxr-x--x
chmod 777 a.txt # 1+2+4=7,"7"说明授予所有权限
2
3
- 选项:-R,对该文件夹里面的所有文件与文件夹
都赋予相同的权限
- 其中:
u
表示user所属用户权限,g
表示group组权限,o
表示other其它用户权限
# 1. 使用数字表示法设置文件权限
chmod 644 file.txt
- 权限数字表示:'r' 代表可读(4),'w' 代表可写(2),'x' 代表执行权限(1),'-'代表没有对应权限(0)
644
是权限模式,表示设置文件的权限为-rw-r--r--
。- 第一个数字
6
表示所有者的权限,即读写权限(rw = 4+2)。 - 第二个数字
4
表示所属组的权限,即只读权限(r = 4)。 - 第三个数字
4
表示其他用户的权限,即只读权限(r = 4)。 file.txt
是要设置权限的文件。
# 2. 使用符号表示法添加权限
符号表示法比较直观,使用字母 u
(所有者)、g
(属组)、o
(其他用户)和 a
(所有用户)来指定权限范围,以及 +
(添加权限)、-
(移除权限)和 =
(设置权限)来修改权限。
chmod +x script.sh
+x
表示添加可执行权限。script.sh
是要添加权限的脚本文件。
# 3. 使用符号表示法移除权限
chmod -w file.txt
-w
表示移除写权限。file.txt
是要移除权限的文件。
# 4. 使用符号表示法设置权限
chmod u=rw,go=r file.txt
u=rw
表示设置所有者的权限为读写。go=r
表示设置所属组和其他用户的权限为只读。file.txt
是要设置权限的文件。
# 5. 递归修改目录及其子目录中的文件权限
chmod -R 755 directory
-R
表示递归修改目录及其子目录中的文件权限。755
是权限模式,表示设置目录的权限为-rwxr-xr-x
。directory
是要递归修改权限的目录。
# 6. 修改文件所属者(chown)
chown命令用于更改文件或目录的所有者和所属组。它可以将文件或目录的所有权转移给其他用户或用户组。
chown [选项] 用户:用户组 文件/目录
- -R:递归地更改文件或目录及其子项的所有者和所属组。
- -v:详细模式。在执行过程中,为每个被更改所有权的文件或目录显示详细信息。
- 用户:指定新的所有者的用户名。
- 用户组:指定新的所属组名。如果只更改所有者,而保持所属组不变,则可以省略用户组部分。
- 文件/目录:指定要更改所有者(和所属组)的文件或目录。
# 1. 更改文件的所有者
chown newuser file.txt
- 这个命令将
file.txt
的所有者更改为newuser
,所属组不变。
# 2. 更改文件的所有者和所属组
chown newuser:newgroup file.txt
- 这个命令将
file.txt
的所有者更改为newuser
,并将其所属组更改为newgroup
。
# 3. 递归地更改目录的所有者和所属组
chown -R newuser:newgroup directory
- 这个命令将
directory
目录及其所有子目录和文件的所有者更改为newuser
,所属组更改为newgroup
。
# 4. 使用详细模式显示更改信息
chown -v newuser file.txt
- 这个命令在更改
file.txt
文件的所有者为newuser
时,会显示操作的详细信息。
注意事项
- 通常,只有系统管理员(root)或文件的当前所有者可以更改文件的所有者。
- 更改文件的所有者或所属组可能会影响对该文件的访问权限。在执行
chown
命令前,确保了解这些更改对文件访问权限的潜在影响。