权限管理
用户 组
介绍
用户
每个用户和组都有一个唯一的标识符(UID和GID),用于标识其在系统中的身份和权限。用户权限可以分为三类:文件权限、目录权限和执行权限。
-
文件权限:文件权限是指用户对文件的操作权限,包括读取(read)、写入(write)和执行(execute)权限。这些权限可以分配给文件的所有(owner)、组(group)和其他用户(other)。
-
目录权限:目录权限是指用户对目录的操作权限,包括读取(read)、写入(write)和执行(execute)权限。这些权限可以分配给目录的所有者(owner)、组(group)和其他用户(other)。
-
执行权限:执行权限是指用户对文件和目录的执行权限,即是否能够运行该或进入该目录。执行权限可以分配给文件和目录的所有者(owner)、组(group)和其他用户(other)。
分类
-
超级用户:超级用户(root用户)拥有系统中的最高权限,可以执行所有系统管理任务,如安装软件、管理用户、修改系统配置等。超级用户账号拥有UID为0,是系统中最特殊和最重要的用户。
-
系统用户:系统用户(system用户)是Linux系统中预设的一组用户,用于执行系统服务和程序。这些用户通常具有较高的权限,以保证系统服务和程序的正常运行。系统用户账号的UID通常在1-999之间。
-
普通用户:普通用户是系统中最常见的用户类型,拥有基本的文件读写和执行权限。普通用户账号的UID通常在1000以上。普通用户通常用于日常工作和娱乐活动,如浏览网页、编写文档、听音乐等。
-
组用户:组用户是由具有相同工作或兴趣爱好的人组成的用户群体。组用户可以在文件和目录上拥有共享权限,以实现对文件和目录的共同管理。组用户账号的GID通常在1000以上。
组
组(Group)是一种用户集合,用于将用户组织成不同的组,并为这些组分配特定的权限和访问控制。组的概念允许管理员更轻松地管理用户访问和权限,并为不同的用户组分配不同的特权和功能。
在Linux中,组通常由系统管理员创建和管理。管理员可以使用命令行工具或图形界面工具来创建、编辑和删除组。每个组都有一个唯一的组名,用于标识该组。
组成员可以是用户或其他组。组成员之间可以共享访问权限和特权,例如,组成员可以共享文件和目录的访问权限,以及执行特定命令和程序的能力。通过将用户分配到不同的组,管理员可以灵活地控制用户的访问和权限,并根据需要为用户分配不同的角色和功能。
指令
用户切换
su sudo
su
命令用于切换当前用户的身份,以另一个用户的身份登录系统。它允许用户在执行其他命令时使用另一个用户的权限和环境变量。
参数:
-
-
:表示切换到与当前用户同组的用户。 -
-l
:表示以当前用户的身份运行指定的命令,而不改变当前用户的身份。 -
<用户名>
:指定要切换到的用户名,可以指定普通用户或root用户。 -
<密码>
:在切换到root用户时,需要输入root用户的密码。 -
-m
:表示以新用户的身份创建新的会话,并立即返回到当前会话。 -
-c <命令>
:指定要切换到新用户后执行的命令。
示例:
-
切换到与当前用户同组的用户:
su -
-
以root用户的身份运行命令:
su - root -c "command"
-
切换到普通用户并立即返回到当前会话:
su - username -m command
sudo
是一个用于以其他用户身份执行命令的程序,允许普通用户执行超级用户权限下的操作。
参数:
-
-u <用户名>
:指定要切换到的目标用户的用户名。 -
-i
:模拟其他用户的输入,通常用于测试目的。 -
-s
:在切换到其他用户后立即返回到当前会话。 -
-t <模板名称>
:指定tty模板名称,用于控制sudo进程的输出格式。 -
-k
:在执行命令之前要求重新输入密码。 -
-n
:禁止sudo拒绝策略检查。 -
<命令>
:要执行的命令。
注意sudo的规则要修改一个配置文件:sudoers
-
打开终端。
-
使用root用户或具有sudo权限的用户登录。
-
输入以下命令以编辑sudoers文件:/etc/soders文件路径
sudo visudo
visudo`是一个更加安全的编辑器,它可以防止错误地修改sudoers文件。
-
在打开的文件中,查找以下行:
%sudo ALL=(ALL:ALL) ALL
这一行定义了sudo的用户组和使用规则。
-
在这一行的末尾添加一个新的用户列表,使用空格分隔。例如:
%sudo ALL=(ALL:ALL) ALL user1 user2
这将允许user1和user2使用sudo命令。
-
保存并关闭文件。
-
重新启动系统或使用以下命令以使更改生效:
sudo service ssh restart
或
sudo reboot
用户信息查询
id groups
id
在Linux中,id
是一个用于显示当前用户信息的命令行工具。它提供了一些关于当前用户的基本信息,如用户ID(UID)、用户组ID(GID)、用户主目录和登录Shell等。
参数:
-
无参数:默认情况下,
id
会显示当前用户的UID、GID、用户主目录和登录Shell等信息。 -
<用户名>
:显示指定用户的UID、GID、用户主目录和登录Shell等信息。 -
-u
:指定要显示的用户UID。 -
-g
:显示用户所在的组ID。 -
-G
:显示用户所在的组列表。 -
-n
:不进行实际的文件系统访问,仅显示用户信息。
groups
在Linux中,groups
是一个用于列出用户所属的组的命令行工具。它允许系统管理员查看当前用户所属的组以及组成员的信息。
参数:
-
无参数:默认情况下,
groups
会列出当前用户所属的所有组。 -
<用户名>
:列出指定用户的所属组。 -
<组名>
:列出指定组的组成员。 -
-c
:显示组成员的总数。 -
-l
:以长格式显示组成员的信息。
who whoami
who
who
命令用于显示当前登录系统的用户列表。它提供了有关当前登录用户的信息,包括用户名、终端标识符、登录时间等。
基本语法如下:
who [选项]
以下是who
命令的一些常见选项和参数:
-
-a
:显示所有用户的完整信息,包括用户ID、终端标识符、登录时间等。 -
-m
:以内存中的形式显示用户信息,而不是从/var/run/utmp文件中读取。 -
-u
:仅显示用户ID,而不显示其他用户信息。 -
-r
:显示远程登录的用户。 -
-q
:限制结果输出为只包含用户名和终端名称。 -
-l
:显示登录会话的详细信息,包括登录类型(本地或远程)、登录时间等。
除了这些选项,who
命令还接受一些其他参数,用于指定要显示的特定信息。这些参数可以是以下之一:
-
+
:添加指定信息到输出中。 -
-
:从输出中删除指定信息。
例如,要显示当前登录用户的完整信息,可以运行以下命令:
who -a
要仅显示本地登录用户的终端名称,可以运行以下命令:
who -l | grep "tty" | awk '{print $1}'
whoami
提供了有关当前登录用户的信息,包括用户名、登录时间等。
基本语法如下
whoami [选项]
参数:
-
-m
:以内存中的形式显示用户信息,而不是从/var/run/utmp文件中读取。 -
-r
:显示远程登录的用户。 -
-q
:限制结果输出为只包含用户名。
whoami -m
这个命令将显示当前登录用户的用户名和相关信息,包括登录时间等。
users
在Linux中,users
命令用于显示当前登录系统的用户列表。它提供了有关当前登录用户的信息,包括用户名、登录时间等。
users
命令的基本语法如下:
users [选项]
参数:
-
-a
:显示所有用户的完整信息,包括用户ID、终端标识符、登录时间等。 -
-m
:以内存中的形式显示用户信息,而不是从/var/run/utmp文件中读取。 -
-u
:仅显示用户ID,而不显示其他用户信息。 -
-r
:显示远程登录的用户。 -
-q
:限制结果输出为只包含用户名和终端名称。 -
-l
:显示登录会话的详细信息,包括登录类型(本地或远程)、登录时间等。
除了这些选项,users
命令还接受一些其他参数,指定要显示的特定信息。这些参数可以是以下之一:
-
+
:添加指定信息到输出中。 -
-
:从输出中删除指定信息。
例如,要显示当前登录用户的完整信息,可以运行以下命令:
users -a
要仅显示本地登录用户的终端名称,可以运行以下命令:
users -l | grep "tty" | awk '{print $1}'
users
命令的输出通常比who
命令的输出更详细,因为它提供了有关每个用户的信息,包括用户名、登录时间等。它还提供了有关当前登录用户的信息,包括用户ID、终端标识符、登录时间等。
userlist
在Linux中,userlist
是一个用于管理用户列表的命令行工具。它允许系统管理员创建、编辑和删除用户列表,并执行与用户相关的操作。
参数:
-
-a
:添加用户到用户列表中。 -
-d
:删除用户列表中的用户。 -
-l
:列出当前的用户列表。 -
-m
:将用户添加到用户列表中时,自动创建用户的主目录。 -
-r
:递归地添加或删除用户列表中的用户。 -
-u
:指定要操作的特定用户。
例如,要添加一个名为"john"的用户到用户列表中,可以使用以下命令:
userlist -a john
userinfo
在Linux中,userinfo
是一个用于显示用户信息的命令行工具。它提供了一些关于当前用户的基本信息,如用户名、UID、GID、用户主目录和登录Shell等。
参数:
-
无参数:默认情况下,
userinfo
会显示当前用户的UID、GID、用户主目录和登录Shell等信息。 -
<用户名>
:显示指定用户的UID、GID、用户主目录和登录Shell等信息。
用户添加 删除 修改权限
adduser useradd
在Linux中,adduser
是一个用于添加新用户账户的命令行工具。与useradd相同
参数:
-
-d
:指定用户的主目录路径。 -
-m
:在创建用户时自动创建主目录,并将主目录设置为家目录。 -
-u
:指定用户的UID。 -
-g
:指定用户所在的组名。 -
-G
:指定用户所属的组列表。 -
-s
:指定用户的登录Shell。 -
-e
:设置用户的有效期,以天为单位。 -
-p
:设置用户的密码,需要输入两次以确认密码。
例如,要创建一个名为"john"的用户,主目录为/home/john,登录Shell为/bin/bash,可以使用以下命令:
adduser -m -s /bin/bash john
deluser userdel
deluser
是一个用于删除用户账户的命令行工具。允许系统管理员从系统中删除用户账号及其相关文件和目录。与userdel相同
参数:
-
-r
:指定要删除的用户账号所属的组,并同时删除该组及其相关文件和目录。 -
<用户名>
:指定要删除的用户账号的名称。 -
-d
:指定用户的主目录路径,并删除该目录及其内容。 -
-f
:强制删除用户账号,即使存在其他用户依赖于该账号的文件和目录。 -
-n
:仅删除用户账号的信息记录,而不删除实际文件和目录。 -
-l
:将用户账号的信息记录从系统中锁定,以防止其他用户重新创建该账号。
删除名为"john"的用户账号及其主目录,可以使用以下命令:
deluser john
pssswd
在Linux中,passwd
是一个用于修改用户密码的命令行工具。允许系统管理员更改用户的密码,并设置相关的密码策略选项,如密码复杂度要求、密码有效期等。
参数:
-
-d
:删除用户的密码,使该用户无法登录系统。 -
-e
:为用户设置密码到期日,以天为单位。 -
-l
:锁定用户的密码,使该用户无法修改密码或重置密码。 -
-m
:为用户设置密码复杂度要求,如密码长度、必须包含的小写字母、必须包含的大写字母、必须包含的数字等。 -
-n
:禁止用户修改密码,即使密码已过期或即将过期。 -
-S
:使用/etc/shadow
文件中的密码策略选项。 -
-u
:指定用户的UID,以便更改该用户密码。
为用户"john"设置密码复杂度要求为至少包含8个字符,其中必须包含至少一个大写字母、一个小写字母和至少一个数字,可以使用以下命令:
passwd -m -s john
usermod
在Linux中,usermod
是一个用于修改用户账户的命令行工具。它允许系统管理员更改用户账号的属性,如密码、主目录、登录Shell等。
参数:
-
-l
:指定用户的新名称。 -
-d
:指定用户的主目录路径。 -
-m
:在更改用户主目录后创建新目录,并将当前用户的家目录复制到新目录中。 -
-s
:指定用户的登录Shell。 -
-u
:更改用户的UID。 -
-g
:更改用户所在的组。 -
-G
:添加或删除用户所在的组列表。 -
-C
:在更改之前显示当前设置。 -
-p
:设置用户的密码,需要输入两次以确认密码。
。例如,要更改名为"john"的用户的主目录为/home/newdir,可以使用以下命令:
usermod -d /home/newdir john
chown chgrp chmod
在文件权限的指令中介绍
组的创建 删除 修改属性
groupadd
基本语法如下:
sudo groupadd [选项] 组名
参数:
-
-g
:指定新组的GID(组ID)。如果不指定该选项,系统将自动为新组分配一个唯一ID。 -
-r
:创建系统组,该组的ID将在1~999之间分配。 -
-f
:强制创建组,即使该组已经存在。 -
-n
:创建组但不添加任何成员。
例如,要创建一个名为mygroup
的新组,可以使用以下命令:
sudo groupadd -g 1000 mygroup
groupdel
基本语法如下:
sudo groupdel [选项] 组名
参数:
-
-r
:删除系统组,该组ID为1~999之间的组将被永久删除。 -
-f
:强制删除组及其所有成员。
例如,要删除名为mygroup
的现有组,可以使用以下命令:
sudo groupdel mygroup
groupmod
groupmod
命令允许管理员编辑用户组的属性,例如更改组的名称、GID或其他成员信息。
基本语法如下:
sudo groupmod [选项] 组名
参数:
-
-g
:指定新组的GID。 -
-n
:仅修改组名而不删除现有组。 -
-d
:指定新组的用户名。
使用groupmod
命令,可以更改现有组的属性,例如将组的GID更改为新的值,或将组的成员更改为新的用户。例如,要将名为mygroup
的组的GID更改为1000,可以使用以下命令:
sudo groupmod -g 1000 mygroup
除了GID的更改,管理员还可以使用groupmod
命令添加或删除组成员。例如,要将用户john
添加到名为mygroup
的组中,可以使用以下命令:
sudo groupmod -n mygroup_new mygroup sudo gpasswd -a john mygroup_new
gpasswd
该命令允许管理员设置、更改或删除用户组的密码,以控制对组的访问。
基本语法如下:
sudo gpasswd [选项] 组名
参数:
-
-a
:将指定的用户添加到组中。 -
-d
:从组中删除指定的用户。 -
-r
:设置或更改组的密码。 -
-R
:删除组的密码(如果组是系统组)。 -
-f
:强制执行操作,忽略错误。
例如,要将用户john
添加到名为mygroup
的组中,可以使用以下命令:
sudo gpasswd -a john mygroup
这将把用户john
添加到mygroup
组中。
如果需要更改组的密码,可以使用以下命令:
sudo gpasswd -r mygroup
如果要删除组的密码,可以使用以下命令:
sudo gpasswd -R mygroup
文件
介绍
子码与掩码
子码是文件权限的一部分,它表示特定的权限,如读、写或执行。在Linux中,共有三个权限组:所有者(Owner)、所属组(Group)和其他用户(Others)。每个权限组都有自己的子码集合,可以用来表示该组的权限。
注意:一个用户只能扮演一个角色 如果不是拥有者才会看所属组的权限 最后才会是其他用户的权限
掩码(Mask)是用于组合子码的数字模式,用于确定文件的权限。在Linux中,使用数字0和1组成的掩码来表示不同的权限组合。
-
0:没有任何权限
-
1:只读权限
-
2:只写权限
-
3:读和执行权限
-
4:写和执行权限
-
5:将文件设置为只读权限(如果文件原本可写)
-
6:将文件设置为只写和执行权限(如果文件原本可写)
-
7:将文件设置为可读和可写可执行权限(如果文件原本可写)
权限掩码
umask
是一个用于设置文件创建权限的命令。它决定了新创建的文件和目录的默认权限。umask
会创建一个八进制数字,该数字表示用户和组用户对新文件的默认权限。
umask [选项] 数字
最终权限 = 起始权限&(~umask)
文件与目录的起始权限子码是不同的 umask的默认值是0022 -> 000 010 010 ~002=755
或者0002 -> 000 000 010 =775
drwxrwxr-x 111 111 101 = 111 111 111 & 111 111 101
目录的读是查看目录内容 写是创建文件 执行是进入目录 -rw-rw-r-- 110 110 100 = 110 110 110 & 111 111 101
分类
文件权限由三个主要部分组成:
-
文件所有者(Owner):文件的所有者通常是指创建该文件的用户。
-
所属组(Group):文件所属的组,即文件共享权限的用户组。
-
其他用户(Others):除了所有者和所属组之外的用户。
每个部分都有一组权限,通常用数字表示,这些数字组合在一起形成了一个八位的数字表示法,称为权限掩码(Permission Mask)。在Linux中,文件权限通常使用三位数字表示,每位的含义如下:
-
读权限(4):表示用户可以读取文件的内容。
-
写权限(2):表示用户可以修改文件的内容。
-
执行权限(1):表示用户可以执行文件中的命令或程序。
指令
ls -l
使用这个命令可以查看文件的详细权限信息,包括所有者、所属组和其他用户的权限。
chmod
基本语法如下:
chmod [选项] 权限模式 文件名
其中,权限模式是由数字或符号表示的权限集。权限集由三个八进制数字组成,每个数字表示所有者、所属组和其他用户的权限。
参数:
-
u+<权限>
:为所有者添加新的权限。 -
g+<权限>
:为所属组添加新的权限。 -
o+<权限>
:为其他用户添加新的权限。 -
u-<权限>
:从所有者移除权限。 -
g-<权限>
:从所属组移除权限。 -
o-<权限>
:从其他用户移除权限。 -
r=<权限>
:为文件设置读权限。 -
w=<权限>
:为文件设置写权限。 -
x=<权限>
:为文件设置执行权限。 -
=<权限>
:为文件设置与已有权限相同的权限。 -
+
:添加现有未被继承的权限。 -
-
:从文件或目录中删除现有权限。 -
*
:为所有用户添加或删除指定类型的权限。
权限模式:
包括:
-
数字权限模式:使用数字表示权限,通常使用三位数字表示,每位数表示一类用户的权限。其中,最高位表示特殊用户(如root)的权限,第二位表示所有者权限,第三位表示所属组权限,最后一位表示其他用户的权限。常见的数字权限模式包括:
* 000:无权限,文件或目录无法读取、写入或执行。 * 077:所有用户都具有读、写和执行权限。 * 066:所有用户具有读、写权限,只有所有者具有执行权限。 * 0755:所有用户具有读、写和执行权限,所属组和其他用户只有执行权限。这是大多数文件的常见权限设置。
-
符号权限模式:使用符号表示权限,常见的符号包括
r
(读)、w
(写)和x
(执行)。通过使用连字符和星号来组合这些符号,可以创建复杂的权限模式。常见的符号权限模式包括:
* `u+rw`:所有者具有读和写权限。 * `g+rx`:所属组具有读权限。 * `o+x`:其他用户具有执行权限。 * `ug+s`:所有者、所属组和其他用户都具有特殊权限
例如,要设置目录的默认创建权限为0755,可以使用以下命令:
mkdir new_directory && chmod 0755 new_directory
chown chgrp
chown
在Linux中,chown
是一个用于更改文件或目录所有者(owner)的命令行工具。允许系统管理员或用户更改文件或目录的所有者,以便将所有权从一个用户或组转移到另一个用户或组。
参数:
-
-R
:递归地更改目录及其子目录中的所有文件的所有者。 -
<用户名>
:将文件或目录的所有权更改为指定的用户名。 -
<用户组>
:将文件或目录的所有权更改为指定的用户组。 -
<UID>
:将文件或目录的所有权更改为指定的UID。 -
<GID>
:将文件或目录的所有权更改为指定的GID。
例如,要将文件的所有权更改为"john"用户,可以使用以下命令:
chown john filename
chgrp
在Linux中,chgrp
是一个用于更改文件或目录所属组的命令行工具。它允许系统管理员或用户更改文件或目录所属的组,以便将文件从一个组移动到另一个组。
参数:
-
-R
:递归地更改目录及其子目录中所有文件所属的组。 -
<用户组>
:将文件或目录的所属组更改指定的用户组。 -
<GID>
:将文件或目录的所属组更改指定的GID。
例如,要将文件的所属组更改为"john"组,可以使用以下命令:
chgrp john filename
setfacl
setfacl
命令用于设置ACL(Access Control Lists)属性,ACL允许用户定义复杂的访问控制策略。ACL可以用于文件和目录,以允许或拒绝特定用户、组或所有用户的访问权限。
基本语法如下:
setfacl [选项] 文件或目录
常见的选项包括:
-
-b
:在设置ACL之前显示当前的ACL。 -
-c
:清除所有ACL。 -
-m
:将ACL更新应用于文件或目录的所有后续访问。 -
-n
:不设置ACL,而是显示当前的ACL。 -
-R
:递归地应用于目录及其子目录。 -
-k
:来设置默认的ACL规则,即当没有指定特定的ACL规则时使用。
例如,要为文件设置ACL,可以使用以下命令:
setfacl -m u::rwx,g::rx,o::rx 文件名
这将为文件设置ACL,允许所有用户(u)读、写和执行权限(rwx),允许所属组(g)读取权限(rx),并允许其他用户(o)读取权限(rx)。