如何在 Linux 中配置用户对文件和文件夹的访问
在 Linux 中管理文件和文件夹权限可能很困难。了解这一切是如何运作的应该会让事情变得简单。
由于Linux系统的性质,在安全方面对文件和目录有很多限制和授权设置。唯一拥有所有这些权限的用户是 root 用户。
因此,在使用系统时,如果我们是root用户,那么摆在我们面前的警告就不会是一种限制机制,而且在某些情况下,我们所做的更改可能会导致系统出现重大问题。这就是为什么了解 Linux 用户授权对于每个 Linux 用户来说非常重要。
用户可以对文件和目录执行的操作
每个用户都可以在授予他的权限范围内进行操作。用户可以对文件或目录执行三种操作。
read(r):能够查看文件夹列表和文件内容。
write(w):它是对文件或文件夹进行更改。
execute(x):它是关于运行目标文件或能够访问文件夹。
如果您熟悉 chmod 命令和 Linux 文件权限,您可能以前听说过这三个权限。
输入ls -l 命令查看当前文件具有哪些权限。
我们看到的 drwxr-xr-x 和 -rw-r--r-- 部分指的是文件权限。某些表达式开头的字母 d 表示该表达式是一个目录。如果我们单独解释其余部分,由-符号分隔的部分代表具有该权限的用户组。
为了更好地理解,将它们分成三组,不包括字母d。
rwxr-xr-x=rwx r-x r-x
rw-r--r--=rw- r-- r--
第一组字母指定文件所有者的权限,第二组字母指定组权限,最后一组指定其他用户的权限。
相应地,上述文件中的权限为:
r:读取权限
w:写权限
x:执行权限
rwx:拥有该文件的用户可以读、写、执行
r-x:其他用户可以读取、执行,但不能写入
使用 chmod 更改权限
只有 root(最有授权的人)才能更改访问权限。使用 chmod 命令可以轻松执行此更改过程。
下面给出chmod命令的参数和含义。
u:文件或目录的所有者
g:与文件或目录所有者位于同一组的用户
o:其他用户
a:向所有人开放
=:授权同步
+:添加授权
-:删除授权
现在您已经了解了参数的含义,现在可以考虑一个示例操作。为此,创建一个示例目录并按顺序执行以下步骤。
使用ls -l命令浏览您创建的文件夹中文件的权限。执行此操作时,请考虑文件的权限结构如下。
ls -l
total 4
---------- 1 root root 0 Apr 25 16:20 example.txt
---------- 1 root root 0 Apr 25 16:21 ex_File
d--------- 2 root root 4096 Apr 25 16:21 ex_Folder
---------- 1 root root 0 Apr 25 16:20 ex_Text
之后,使用 * 字符访问文件夹中的所有文件,并使用 chmod +w * 命令让 write(w) 变为公共。
chmod +w *
ls -l
total 4
--w-r-x--- 1 root root 0 Apr 25 16:20 example.txt
--w-r-x--- 1 root root 0 Apr 25 16:21 ex_File
d-w-r-x--- 2 root root 4096 Apr 25 16:21 ex_Folder
--w-r-x--- 1 root root 0 Apr 25 16:20 ex_Text
现在,尝试向组(g)中的用户授予读写执行权限(rwx),向用户(u)授予写入权限(w),向其他用户仅授予执行权限(x)。
chmod g+rwx,u+w,o+x *
ls -l
total 4
--w-rwx--x 1 root root 0 Apr 25 16:20 example.txt
--w-rwx--x 1 root root 0 Apr 25 16:21 ex_File
d-w-rwx--x 2 root root 4096 Apr 25 16:21 ex_Folder
--w-rwx--x 1 root root 0 Apr 25 16:20 ex_Text
最后,您可以使用如下命令来取消对您所在位置的文件的授权。
chmod a-rwx *
ls -l
total 4
---------- 1 root root 0 Apr 25 16:20 example.txt
---------- 1 root root 0 Apr 25 16:21 ex_File
d--------- 2 root root 4096 Apr 25 16:21 ex_Folder
---------- 1 root root 0 Apr 25 16:20 ex_Text
除了这些用途之外,授权过程还可以用您之前可能遇到过并在没有意识到的情况下使用的数字术语来表示。
为每个授权定义编号
Owner of the File | Users in the Same Group as the Owner of the File | Other Users | |
r | 4 | 4 | 4 |
w | 2 | 2 | 2 |
x | 1 | 1 | 1 |
例如,假设您只想将所有权限授予文件的所有者。为此,您必须首先收集授权模式的等效数量。换句话说,由于你将授予所有权限,因此 r=4 + w=2 + x=1=总数为 7。
您只想将此权限授予文件的所有者。为此,您可以稍微修改通常使用的 chmod rwx- ----- 命令。如果您使用chmod 700 file之类的命令,则只有文件的所有者才拥有所有权限。
为了更好地理解这一点,您可以考虑另一个例子。想象一下,文件的所有者拥有所有权限,public组中的拥有写权限,其他用户拥有读权限。
您可以使用方程 r(4)+w(2)+x(1)=7 将所有权限授予文件所有者。
您为文件所有者所在公共组中的用户授予的写权限将使用数字 2,它相当于 write(w) 字符的数字。您为其他用户授予的读取权限将使用数字 4,它相当于 read(r) 字符的数字。
从输出中可以看出,数字等价物一定已经执行了您想要的授权。
使用 -R 使您的授权设置在子目录中有效
此外,如果您希望授予的权限对该目录及其子文件夹生效,则应使用带有 -R 参数的命令。
例如,列出您所在位置名为“ex_Folder”的文件夹的访问权限。结果将是一个输出,表明未找到任何权利。
ls -l
total 4
---------- 1 root root 0 Apr 25 16:20 example.txt
-rwx-w-r-- 1 root root 0 Apr 25 16:21 ex_File
d--------- 2 root root 4096 Apr 25 16:21 ex_Folder
---------- 1 root root 0 Apr 25 16:20 ex_Text
然后进入名为“ex_Folder”的文件夹。
然后回到父目录。使用-R参数并编写类似chmod -R 422 ex_Folder的命令,以便添加的访问权限对所有子文件都有效。
因此,所有文件,包括所有文件和目录以及子文件夹,都以与 422 语句相对应的方式进行授权。
意外删除文件的最佳解决方案:chattr
无论出于何种原因,如果您认为某些文件很重要,则可以在它们被意外删除之前对其进行保护。提供此保护机会的命令是chattr命令。 chattr 命令不仅可以防止删除,还可以防止文件被修改。
您可以使用 lsattr 命令列出此类文件。
尝试使用 chattr +i main.cpp 命令保护此处显示的 main.cpp 文件。
从输出中可以看出,权限部分中有一个 -i 语句。该语句表明该文件无法再编辑。要确认这一点,您可以尝试使用 rm -rf main.cpp 等命令删除该文件。
rm -rf main.cpp
rm: cannot remove 'main.cpp': Operation not permitted
如果您想撤消此操作并使文件可编辑,只需使用 chattr -i main.cpp 命令即可。
访问权限对于文件系统安全很重要
访问授权构成了 Linux 文件系统安全的支柱。由于可以分别赋予每个文件访问权限,因此可以实现更加舒适的系统管理。
基于每个用户的访问权限有时甚至更有意义。因此,您可能希望了解本文中描述的授权方法来处理系统上的项目和文件。