每个用户和组都有一个唯一的标识符(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
命令用于切换当前用户的身份,以另一个用户的身份登录系统。它允许用户在执行其他命令时使用另一个用户的权限和环境变量。
参数:
-
:表示切换到与当前用户同组的用户。
-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拒绝策略检查。
<命令>
:要执行的命令。
打开终端。
使用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
在Linux中,id
是一个用于显示当前用户信息的命令行工具。它提供了一些关于当前用户的基本信息,如用户ID(UID)、用户组ID(GID)、用户主目录和登录Shell等。
参数:
无参数:默认情况下,id
会显示当前用户的UID、GID、用户主目录和登录Shell等信息。
<用户名>
:显示指定用户的UID、GID、用户主目录和登录Shell等信息。
-u
:指定要显示的用户UID。
-g
:显示用户所在的组ID。
-G
:显示用户所在的组列表。
-n
:不进行实际的文件系统访问,仅显示用户信息。
在Linux中,groups
是一个用于列出用户所属的组的命令行工具。它允许系统管理员查看当前用户所属的组以及组成员的信息。
参数:
无参数:默认情况下,groups
会列出当前用户所属的所有组。
<用户名>
:列出指定用户的所属组。
<组名>
:列出指定组的组成员。
-c
:显示组成员的总数。
-l
:以长格式显示组成员的信息。
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 [选项]
参数:
-m
:以内存中的形式显示用户信息,而不是从/var/run/utmp文件中读取。
-r
:显示远程登录的用户。
-q
:限制结果输出为只包含用户名。
whoami -m
这个命令将显示当前登录用户的用户名和相关信息,包括登录时间等。
在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、终端标识符、登录时间等。
在Linux中,userlist
是一个用于管理用户列表的命令行工具。它允许系统管理员创建、编辑和删除用户列表,并执行与用户相关的操作。
参数:
-a
:添加用户到用户列表中。
-d
:删除用户列表中的用户。
-l
:列出当前的用户列表。
-m
:将用户添加到用户列表中时,自动创建用户的主目录。
-r
:递归地添加或删除用户列表中的用户。
-u
:指定要操作的特定用户。
例如,要添加一个名为"john"的用户到用户列表中,可以使用以下命令:
userlist -a john
在Linux中,userinfo
是一个用于显示用户信息的命令行工具。它提供了一些关于当前用户的基本信息,如用户名、UID、GID、用户主目录和登录Shell等。
参数:
无参数:默认情况下,userinfo
会显示当前用户的UID、GID、用户主目录和登录Shell等信息。
<用户名>
:显示指定用户的UID、GID、用户主目录和登录Shell等信息。
在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相同
参数:
-r
:指定要删除的用户账号所属的组,并同时删除该组及其相关文件和目录。
<用户名>
:指定要删除的用户账号的名称。
-d
:指定用户的主目录路径,并删除该目录及其内容。
-f
:强制删除用户账号,即使存在其他用户依赖于该账号的文件和目录。
-n
:仅删除用户账号的信息记录,而不删除实际文件和目录。
-l
:将用户账号的信息记录从系统中锁定,以防止其他用户重新创建该账号。
删除名为"john"的用户账号及其主目录,可以使用以下命令:
deluser john
在Linux中,passwd
是一个用于修改用户密码的命令行工具。允许系统管理员更改用户的密码,并设置相关的密码策略选项,如密码复杂度要求、密码有效期等。
参数:
-d
:删除用户的密码,使该用户无法登录系统。
-e
:为用户设置密码到期日,以天为单位。
-l
:锁定用户的密码,使该用户无法修改密码或重置密码。
-m
:为用户设置密码复杂度要求,如密码长度、必须包含的小写字母、必须包含的大写字母、必须包含的数字等。
-n
:禁止用户修改密码,即使密码已过期或即将过期。
-S
:使用/etc/shadow
文件中的密码策略选项。
-u
:指定用户的UID,以便更改该用户密码。
为用户"john"设置密码复杂度要求为至少包含8个字符,其中必须包含至少一个大写字母、一个小写字母和至少一个数字,可以使用以下命令:
passwd -m -s john
在Linux中,usermod
是一个用于修改用户账户的命令行工具。它允许系统管理员更改用户账号的属性,如密码、主目录、登录Shell等。
参数:
-l
:指定用户的新名称。
-d
:指定用户的主目录路径。
-m
:在更改用户主目录后创建新目录,并将当前用户的家目录复制到新目录中。
-s
:指定用户的登录Shell。
-u
:更改用户的UID。
-g
:更改用户所在的组。
-G
:添加或删除用户所在的组列表。
-C
:在更改之前显示当前设置。
-p
:设置用户的密码,需要输入两次以确认密码。
。例如,要更改名为"john"的用户的主目录为/home/newdir,可以使用以下命令:
usermod -d /home/newdir john
在文件权限的指令中介绍
基本语法如下:
sudo groupadd [选项] 组名
参数:
-g
:指定新组的GID(组ID)。如果不指定该选项,系统将自动为新组分配一个唯一ID。
-r
:创建系统组,该组的ID将在1~999之间分配。
-f
:强制创建组,即使该组已经存在。
-n
:创建组但不添加任何成员。
例如,要创建一个名为mygroup
的新组,可以使用以下命令:
sudo groupadd -g 1000 mygroup
基本语法如下:
sudo groupdel [选项] 组名
参数:
-r
:删除系统组,该组ID为1~999之间的组将被永久删除。
-f
:强制删除组及其所有成员。
例如,要删除名为mygroup
的现有组,可以使用以下命令:
sudo groupdel mygroup
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
该命令允许管理员设置、更改或删除用户组的密码,以控制对组的访问。
基本语法如下:
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的默认值是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):表示用户可以执行文件中的命令或程序。
使用这个命令可以查看文件的详细权限信息,包括所有者、所属组和其他用户的权限。
基本语法如下:
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
在Linux中,chown
是一个用于更改文件或目录所有者(owner)的命令行工具。允许系统管理员或用户更改文件或目录的所有者,以便将所有权从一个用户或组转移到另一个用户或组。
参数:
-R
:递归地更改目录及其子目录中的所有文件的所有者。
<用户名>
:将文件或目录的所有权更改为指定的用户名。
<用户组>
:将文件或目录的所有权更改为指定的用户组。
:将文件或目录的所有权更改为指定的UID。
:将文件或目录的所有权更改为指定的GID。
例如,要将文件的所有权更改为"john"用户,可以使用以下命令:
chown john filename
在Linux中,chgrp
是一个用于更改文件或目录所属组的命令行工具。它允许系统管理员或用户更改文件或目录所属的组,以便将文件从一个组移动到另一个组。
参数:
-R
:递归地更改目录及其子目录中所有文件所属的组。
<用户组>
:将文件或目录的所属组更改指定的用户组。
:将文件或目录的所属组更改指定的GID。
例如,要将文件的所属组更改为"john"组,可以使用以下命令:
chgrp john filename
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)。