理解Linux权限看似几乎不可能完成------什么是 、 或 ,到底是什么?------但实际上比你想象的要简单。让我们来看看。755644u=rwx,g=rw,o=rchmod drwxr-xr-x
Linux 文件权限
Linux 是一个多用户作系统,可以被多个用户同时访问。这可能会让你误以为用户可以作另一个用户的文件和目录,但所有 Linux作系统都会在两个授权层级------拥有权和权限------保护文件系统,以防止未经授权的访问,从而有效且轻松地阻止文件系统被访问。
注意:掌握这些权限的最好方法是拥有自己的Linux VPS服务器,边做边学习。最棒的是?我们提供市场上最优质、低成本、可靠的VPS套餐!
如何在 Linux 中查看文件权限
要在 Linux 中查看文件权限,请使用以下命令。该命令显示权限字符串、所有者、组及其他文件详情:ls -l
$ ls -l
drwxr-xr-x 3 dd users 4096 Jun 10 08:01 Pictures
-rw-r--r-- 1 dd users 2048 Jun 15 14:30 readme.txt
开头的十个字符字符串显示权限。你也可以查看特定文件的文件权限:
$ ls -l filename
如需更详细地展示符号和数字格式的权限,请使用以下命令:stat
$ stat filename
我该如何查找文件的权限?
让我们尝试查找文件和目录的权限。要查找已经分配给文件或目录的权限,使用带有 switch 的命令。ls-l
$ ls -l
drwxr-xr-x 3 dd users 4096 Jun 10 08:01 Pictures
...
...
格式 中的前十个字符代表三类用户的权限。让我们试着理解这些字母的含义。第一个字符 ,表示该文件是一个目录。该位置可以是空白(-)或以下任一字符:drwxrwxrwxd
c: Character device
b: Block device
s: socket
p: pipe
l: symbolic link etc.
接下来的三个字符(drwx r-xr-x)代表文件所有者被分配的权限。所有者可以读取、写入并执行该文件夹。ddPictures
接下来的三个字符(drwxr-xr-x),即 ,代表组权限。组内用户可以根据组权限访问文件,该权限规定他们可以在目录中读取和执行,但不能写入。连字符表示未获准许可。r-xusers
最后三个字符(drwxr-xr-x)代表非组主或非组成员的组权限,权限仅为读取和执行。otherusers
第11个字符是一个数字,代表文件的硬链接数量,与文件权限无关。该数字旁边的两列(drwxr-xr-x 3 dd 用户)代表文件的所有者和组。
要查找特定文件或目录的权限,请在命令中指定文件名称,如下所示。ls
$ ls -l filename
文件、目录和进程的所有者
在我们尝试探讨文件和目录的所有者之前,先来了解一下Linux中的用户类型。在 Linux 中,用户分为两种类型:系统用户和普通用户。系统用户由作系统创建,用于管理后台进程。
我们通常创建普通用户,通过图形界面或终端进行交互式创建和运行进程。除了这两种用户外,还有一位名为 的超级用户,他可以访问整个系统,管理和覆盖系统内的任何设置。root
在 Linux 中,文件、目录和进程的所有者将被分配给这三种用户类型:普通用户、系统用户和根用户。在我们尝试探讨这三种用户可以分配哪些权限之前,先了解一下Linux中可用的权限类型。
Linux 有哪些权限类型?
Linux 权限:755,drwxr-xr-x,644,chmod
在 Linux 中,文件、目录和进程被分配了两级权限。第一个是许可组,也就是所有权。第二种是权限类型,可以是 、 或 。readwriteexecute
权限组
对于Linux中的每个文件和目录,都有我们指定权限的用户集合。它们是:
所有者
团体
其他
Linux 目录权限树
所有者:创建文件、文件夹或进程的用户是 。owners
Groups:指与所有者同一组内的任何人。Groups
其他:任何既不是文件/目录所有者,也不属于同一组的用户都会被分配到某个组。others
权限类型
上述三个用户组各自能执行哪些作定义为。有三种基本代码可以分配给三组用户,分别是读取、写入和执行。permission typespermission types(r)(w)(x)
文件和目录的读写和执行是什么意思?
关于文件:
Read 是指查看文件内容的能力。
写入是指编辑或删除文件的能力。
执行是指将文件作为可执行程序运行的能力。
目录方面:
Read 是读取目录内容的能力。
写入是指能够在目录中写入,比如在目录中创建文件和子目录。
执行是指能够进入目录并使用命令查看目录内文件的元数据。cdls
rwx 许可状态
数值符号中的权限
文件和文件夹的权限使用两种表示法。我们已经提出的符号符号(r,w,x)被称为符号符号。另一种是数字符号。在此符号中,数字 (0,1,2,4) 表示许可,具体如下:
0:无许可
1:执行(x)
2:写(w)
4:阅读(r)
那么,如何用数字表示计算用户和组的权限呢?只需将权限值加起来,分别得到用户权限、组权限和其他权限的值。
例如:
read(4)、write(2) 和 execute(1) 权限转换为 (4+2+1)
read(4) 和 write(2) 权限转换为 (4+2) write
(2) 和 execute(1) 权限转换为 (2+1) 等等。rwx7rw-6-wx3
因此,许可与 相同,与 相同,依此类推。rwxrwxrwx777rwxr-xr-x755
理解755权限(chmod 755)
CHMOD 755 视觉表示
chmod 755 命令将权限设置为 rwxr-xr-x,这是 Linux 中最常见的权限模式之一。理解 chmod 755 的含义至关重要:所有者拥有完全控制权(读、写、执行),而组成员和其他人可以读取和执行,但不能修改文件。
当你在文件或目录上运行时,你是在同时明确设置这三个权限级别。这使得755权限非常适合目录和可执行脚本,这些脚本应对所有用户开放,但仅限所有者修改。chmod 755
理解644权限(chmod 644)
Linux中的644权限
chmod 644 命令是常规文件的标准权限。设置644权限后,所有者可以读写文件,而组成员和其他人只能读取。这是大多数文本文件、配置文件和网页内容的默认权限,前提是你希望所有人都能查看,但只有所有者可以修改。
要对文件应用644权限:
$ chmod 644 config.conf
这通常用于网页服务器文件,如HTML页面、PHP脚本(非可执行文件)以及配置文件如或。.bashrcnginx.conf
理解711权限(chmod 711)
chmod 711 命令设置权限,所有者拥有完全控制权(rwx),而组成员和其他人只能执行(遍历)文件或目录。当你应用711权限时,其他人无法读取或写入,这对那些想隐藏文件列表但仍允许访问特定文件的目录非常有用。
这种权限模式对于多用户环境中的用户主目录尤为重要。例如:
$ chmod 711 /home/username
有了主目录的711权限,其他用户可以访问文件,比如知道路径,但他们无法运行去查看主目录中存在哪些文件。/home/username/public_html/index.htmlls
理解700权限(chmod 700)
chmod 700命令通过授予所有者完全权限(rwx)而完全阻止组成员及其他人访问,从而实现最大隐私保护。当你设置700个权限时,只有你自己能读、写或执行文件或目录------其他人完全被锁在外面。
这是像你的SSH配置这样敏感目录所需的权限:
$ chmod 700 ~/.ssh
使用chmod 700对于安全敏感的场所至关重要。如果你的目录设置更宽松,SSH实际上会拒绝工作,因为这可能会让未授权用户访问你的私钥。.ssh
理解600权限(chmod 600)
chmod 600 命令仅限制所有对所有者的访问,允许读写但不允许执行权限。当你对文件应用600权限时,组成员和其他人无法查看、修改或执行该文件。这是包含敏感数据的私密文件的标准安全设置。
chmod 600 最关键的用途是用于 SSH 私钥:
$ chmod 600 ~/.ssh/id_rsa
$ chmod 600 ~/.ssh/id_ed25519
SSH要求私钥有600个权限------如果权限更宽松,SSH会显示"未保护私钥文件"等错误,并拒绝使用该密钥。这一安全措施防止系统中的其他用户读取你的认证凭证。
600权限的其他常见用途包括密码文件、API令牌、数据库凭证文件以及包含秘密的任何配置。
解码drwxr-xr-x 权限
drwxr-xr-x Linux 权限可视化
权限字符串是你在 Linux 中最常见的模式之一。让我们来解析一下drwxr-xr-x的含义:drwxr-xr-x
d = 这是一个目录(不是文件)
rwx = 所有者拥有读取、写入和执行权限
r-x = 组拥有读取和执行权限(无写)
r-x = 其他拥有读取和执行权限(无写入)
当你在终端输出中看到drwxr-xr-x时,表示一个拥有755权限的目录。这是大多数 Linux 系统目录的标准权限。要在目录上设置drwxr-xr-x权限:
$ chmod 755 my-directory
$ ls -ld my-directory
drwxr-xr-x 2 username group 4096 Dec 20 10:00 my-directory
drwxr-xr-x 模式允许所有者创建、删除和重命名目录内的文件,而其他用户可以浏览目录内容并访问文件,但无法修改目录结构本身。
使用 chmod 更改 Linux 权限
使用该命令,可以添加或移除文件或目录的权限。字母(owner/user)、(group)和(other)用于添加或移除三种用户类型的权限,并附带三个标志。chmodugo
负号(),表示"移除这些权限"-
加号(),表示"添加这些权限"+
等号(),表示"将权限精确更改为这些"。=
使用 chmod 添加权限
要添加权限,请使用命令和加号(),即"添加这些权限"。chmod+
所以如果你想为脚本文件的三种用户类型添加执行权限,请使用以下命令。chmod
$ chmod +x hello.sh
OR
$ chmod a+x hello.sh
// 'a' means all
要为文件所有者添加执行权限,请使用以下命令。chmod
$ chmod u+x hello.sh
同样,你也可以用来添加读取权限和写权限。+r+w
你也可以为用户、组和其他人分配权限,或者选择性地将它们合并。只需指定用户类别(u、g或o)以及你想分配的权限(r、w或x)。例如,以下命令会为文件所有者添加执行和写入权限。chmod
$ chmod u+xw hello.sh
要为所有者和组添加写权限,请使用以下命令。
$ chmod ug+w hello.sh
你还可以一次性为多类用户添加权限。以下示例将为所有者设置读、写和执行权限,以及组和其他人的读写权限。
$ chmod u=rwx,g=rw,o=rw example.txt
使用 chmod 移除权限
在某些情况下,你可能需要移除权限而非添加权限------无论是保护文件、共享后限制访问,还是修复过于宽松的设置。只需更改为 即可移除这三类用户中的任一的权限。+-
基本权限移除
Remove write permission from group
$ chmod g-w readme.txt
Remove execute permission from both owner and group
$ chmod ug-x script.sh
Remove all permissions from group and others recursively
$ chmod -R go-rwx test_directory
递归示例()移除了组和其他用户的读、写、执行权限,避免包含其中所有文件和子目录。-Rtest_directory
一次移除多个权限
你可以在一个命令中移除多个权限:
Remove write and execute from others
$ chmod o-wx script.sh
Remove all permissions from others
$ chmod o-rwx confidential.txt
Remove read from group, write from others
$ chmod g-r,o-w shared-file.txt
常见的安全情景
非所有者文件只读:对于其他用户应引用但不需修改的配置文件非常有用:
Remove write permission from group and others
$ chmod go-w config.conf
Result: -rw-r--r-- (644 permissions)
保护上传文件:当上传文件设置过于宽松时:
Remove write from group/others, remove execute from all
$ chmod go-w,a-x /var/www/uploads/file.jpg
Result: Files become 644 (rw-r--r--)
锁定私人目录:创建备份或归档后:
Remove all access for group and others
$ chmod -R go-rwx /backups/project-archive/
Result: Only owner can access
重要警告
目录执行权限:从目录中移除执行权限会阻止任何人进入该目录,即使他们有读写权限:
$ chmod a-x my-directory/
$ cd my-directory/
bash: cd: my-directory/: Permission denied
除非你特别想阻止访问,否则一定要保留目录的执行权限。
递归作需要谨慎:该标志影响目录内的所有内容。使用递归移除前请务必核实你的命令:-R
CAREFUL: This locks out everyone from entire web directory
$ chmod -R go-rwx /var/www/html/ # Can break your website!
Better: Target specific subdirectories
$ chmod -R go-rwx /var/www/html/private/
组合添加和删除
你可以在同一个命令中添加和移除权限:
Add execute for owner, remove for group and others
$ chmod u+x,go-x script.sh
Add read for owner, remove write for group
$ chmod u+r,g-w document.txt
快速验证
删除后务必检查权限:
$ chmod go-w important.txt
$ ls -l important.txt
-rw-r--r-- 1 john users 2048 Dec 20 10:00 important.txt
最佳实践:主动使用最小权限原则移除权限------比修复因过于宽松文件引发的安全漏洞更容易。
使用数字符号更改 Linux 权限
你也可以用数字符号来设置权限,而不是符号符号。以这种方式设置的权限最多使用四位数字。你可能会问为什么是4位数,因为你只想为三类用户设置权限。首位数字表示设置用户ID(4)或组组ID(2)或粘性位(1)的值。其余三位数字用于为三类用户设置权限。
也可以用三位数字设置权限,只保留用户ID、组ID和棒位的权限。所以许可0755和755是相同的。
$ chmod 755 hello.sh
// Sets all permission to owners and read/execute permission to group and others
$ chmod 0755 hello.sh
// Same as 755
理解这些数字命令至关重要:chmod 755 允许拥有者完全访问并读取/执行给他人,chmod 644 使文件可被所有人读取但仅由所有者写入,chmod 700 创建私有目录,chmod 600 保护敏感文件。每个 chmod 命令都直接翻译成特定的 rwx 模式。
使用drwxr-xr-xchmod
设置drwxr-xr-x权限是管理目录时常见的任务。drwxr-xr-x 格式频繁出现,因为它在无障碍性和安全性之间取得了平衡。每个人都可以浏览目录并读取文件,但只有所有者可以进行更改。
drwxr-XR-x 许可
要设置目录权限,请使用命令 。drwxr-xr-xchmod 755 directory_name
什么?chmod 755
chmod 755意味着赋予所有者读、写和执行权限,同时允许该组及其他人对文件拥有读取和执行权限。
设置用户ID
如果设置了一个带有设置用户ID权限的文件,那么该文件的执行方式就像由文件所有者执行,而不是执行该文件的用户。例如,通常拥有并拥有权限4755,其中数字4表示,即使文件由普通用户执行,文件仍将以所有者(root)权限运行,因为文件属于。以下示例将展示如何设置文件的比特。/bin/mountrootrootsuid
$ chmod u+s hello.sh
OR
$ chmod 4664 hello.sh
// Sets the suid bit of the file hello.sh
$ ls -l hello.sh
-rwSrw-r-- 1 peter peter 0 Jun 13 10:16 hello.sh
// The fourth character in the permission shows the suid bit is set.
// The capital 'S' signifies that executable bit is not set otherwise executable bit will be 's'
集合组ID
SGID可以设置为文件和目录,符号表示为 ,数字表示 。当目录设置了该位时,在目录内创建的任何文件或目录都会继承该目录的组ID。要设置目录的位,请使用以下命令。g2sgidsgidchmod
$ chmod g+s test_directory
OR
$ chmod 2755 test_directory
用命令查找该目录的位是否被设置。sgidls
$ ls -ld test_directory/
drwxrwsr-x 3 peter peter 4096 Jun 12 10:30 test_directory/
组权限部分的第七个字符()表示该位为组设置。's'sgid
粘性 位
下一个访问模式位称为粘性位,符号表示为 ,数字表示 。这个功能只适用于目录。在目录上设置粘性位后,任何人都可以在目录内创建文件或目录。其他用户拥有的文件只能删除他自己的文件和目录。t1
要为其他类型的用户添加粘性位,请在命令中使用+t选项。chmod
$ chmod o+t some_directory
要测试该目录的粘性位是否被设置,可以使用ls命令:
$ ls -ld some_directory
drwxrwxr-t 2 peter peter 4096 Jun 12 11:47 some_directory
其他用户会在比特部分看到一个。小写表示可执行位也存在,否则你会看到大写txtT
要去除粘性钻头,请使用命令中的符号:-chmod
$ chmod o-t some_directory
用于变更所有权chown
有时可能需要更改文件和目录的所有权。如下所述的命令会更改文件和目录的所有者及组。chown
$ chown dd hello.sh
// changes the owner of the file only.
要更改组所有权,请在拥有者名称后面指定一个冒号或点,组名后再加组名,中间不要有空格,文件的组所有权也会被更改。
$ chown dd:users hello.sh
OR
$ chown dd.users hello.sh
如果在冒号或点后面没有提及组名,然后跟随OWNER,那么用户将被指定为文件所有者,文件组也将被更改为owner登录组。
$ chown dd. hello.sh
OR
$ chown dd: hello.sh
如果在冒号或点之前省略了所有者名称,而在之后提到了组名,那么组所有权就会变更。在这种情况下,执行与相同的功能。chownchgrp
$ chown .users hello.sh
OR
$ chown :users hello.sh
要递归更改目录的所有者和组,请使用 -R 开关:
$ chown -R dd:admin some_directory
现在你对Linux中的权限及其通过和的使用有了基本了解,就可以实现合适的权限策略来保护你的系统。chmodchown
你会如何用八进制表示Linux权限?rwxr-xr--
为了用八进制表示 Linux 权限,你可以将每个权限集映射到对应的八进制值。 到7,到5,再到4。所以,八进制记号为 。rwxr-xr--rwxr-xr--rwxr-xr--754