在Linux中更改文件夹及其所有内容的权限
1. 概述
Linux 操作系统使用访问权限 来维护文件目录的安全性。当我们创建文件或目录时,Linux 会为它们分配默认权限。在本教程中,我们将讨论更改目录和目录中文件权限的不同方法。
2. 访问权限
在许多 Linux 发行版中,当我们创建用户时,Linux 系统会创建一个与用户同名的组,并将该用户的文件分配给该组。文件和用户的关系是每个文件可以属于一个用户和一个组。
2.1. 列出文件和目录权限
$ ls -ld folder
drwxrwxr-x 2 blogdemo blogdemo 4096 Jul 14 08:50 folder
此外,我们可以应用ls -l命令向我们显示目录中文件的权限:
$ ls -l
total 0
-rw-rw-r-- 1 blogdemo blogdemo 0 Jul 14 08:50 file1
-rw-rw-r-- 1 blogdemo blogdemo 0 Jul 14 08:50 file2
此外,我们对特定文件使用ls -l命令,向我们显示该文件的权限:
$ ls -l file1
-rw-rw-r-- 1 blogdemo blogdemo 0 Jul 14 08:50 file1
2.2. 默认访问权限
**当我们创建一个新文件或目录时,它的默认访问权限或权限分别为 666 ( rw-rw-rw- ) 或 777 ( rwxrwxrwx )。**但是,我们可以使用umask 命令更改默认权限。
umask命令告诉系统默认不应授予新文件哪些权限。umask是从默认权限中减去的值。默认情况下umask等于0002,并且会在创建文件时删除文件(rw-rw-r–)的写权限:
$ umask 0002
$ echo "test" > file
$ ls -l file
-rw-rw-r-- 1 blogdemo blogdemo 0 Jul 14 09:36 file
此外,将使用 775 ( rwxrwxr-x ) 权限创建新目录。
3. 更改目录和文件的权限
我们可以使用chmod命令更改文件和目录的权限。更改权限有两种方式:
- 使用短/软/符号代码
- 使用八进制代码
3.1. chmod代码
我们可以使用符号代码加号(+)来添加权限,使用减号(-)来删除权限。因此,要授予读取权限,我们使用*+r*。另外,我们使用*+w赋予写权限,使用+x赋予执行权限。为了移除这些权限,我们使用-r移除读取权限,使用-w移除写入权限,使用-x*移除执行权限。
此外,我们可以使用八进制代码来更改权限。例如,当使用八进制代码时,我们可以使用数字来代替r、w、x。
3.2. 递归更改权限
有时,我们需要更改目录及其所有子文件夹和文件的权限。在这些情况下,我们使用*-R*选项递归地将权限应用于所有子文件夹和文件:
chmod -R <permissions> <directory>
例如,我们希望为当前目录及其所有子文件夹和文件的所有者 (7) 分配读取、写入和执行权限。此外,我们希望将读取和执行权限分配给组 (5) 和其他组 (5)。
让我们看一个例子:
$ ls -ld folder
drwxrwxr-x 2 blogdemo blogdemo 4096 Jul 14 08:50 folder
$ ls -l file1
-rw-rw-r-- 1 blogdemo blogdemo 0 Jul 14 08:50 file1
$ chmod -R 751 folder/
在前面的命令之后:
$ ls -ld folder
drwxr-x--x 2 blogdemo blogdemo 4096 Jul 14 08:51 folder
$ ls -l file1
-rwxr-x--x 1 blogdemo blogdemo 0 Jul 14 08:51 file1
4. 访问模式
通常,当我们运行程序时,它会以您的访问级别运行,但有时我们应该更改密码或使用需要访问系统文件的程序。我们应该能够访问*/etc/passwd或/etc/shadow*来更改我们的密码,但我们不应该能够访问其他人的文件。在这种情况下,Linux 系统在每个文件上都有特殊位:
- suid : 设置用户 ID
- skid : 设置组 id
- sticky
如果我们在一个文件上设置suid,该文件将在文件所有者的访问权限下执行,无论是哪个用户运行它。我们可以使用u+s命令设置suid位:
$ ls -l file1
-rw-rw-r-- 1 blogdemo blogdemo 0 Jul 12 11:26 file1
$ chmod u+s file1
$ ls -l file1
-rwSrw-r-- 1 blogdemo blogdemo 0 Jul 12 11:26 file1
S字符代替用户的可执行位。如果我们在文件上设置sgid位,同一组的成员可以运行该文件。我们可以使用g+s命令设置sgid位:
$ ls -l file1
-rw-rw-r-- 1 blogdemo blogdemo 0 Jul 12 11:50 file1
$ chmod g+s file1
$ ls -l file1
-rw-rwSr-- 1 blogdemo blogdemo 0 Jul 12 11:50 file1
目录上的sgid将强制该目录中的任何新文件具有该目录的sgid。可以使用chmod和*+s或-s代替x来设置或取消设置suid和sgid*。
如果我们在文件上设置sticky位,即使所有用户都必须对该目录具有写访问权限,也只有文件的所有者可以删除它。sticky位由t标识,并将显示在目录的最后一位上。我们可以使用o+t命令设置sticky位:
$ ls -l file1
-rw-rw-r-- 1 blogdemo blogdemo 0 Jul 12 12:07 file1
$ chmod o+t file1
$ ls -l file1
-rw-rw-r-T 1 blogdemo blogdemo 0 Jul 12 12:07 file1
T字符代替另一个的可执行位。让我们回顾一下如何设置这些访问模式:
access mode | octal | symbolic
suid | 4000 | u+s
guide | 2000 | g+s
sticky | 1000 | t
我们可以使用-R 选项设置目录及其所有子文件夹和文件的访问模式:**
chmod -R <access modes> <directory>
让我们看一个例子:
$ chmod -R u+s folder/
在前面的命令之后:
$ ls -ld folder
drwsr-x--x 2 blogdemo blogdemo 4096 Jul 14 08:51 folder
$ ls -l file1
-rwsr-x--x 1 blogdemo blogdemo 0 Jul 14 08:51 file1
5. 更改所有者和组
如果我们需要更改文件或目录的所有权或组,我们使用chown命令。更改所有者和组的一般样式是:
chown newuser:newgroup file
试一试吧:
$ ls -l file1
-rw-rw-r-T 1 blogdemo blogdemo 0 Jul 12 12:07 file1
$ chown blogdemo:adm file1
$ ls -l file1
-rw-rw-r-T 1 blogdemo adm 0 Jul 12 12:07 file1
此外,我们可以使用另一种格式的chown:
chown :newgroup file
让我们看一个例子:
$ chown :adm file1
$ ls -l file1
-rw-rw-r-T 1 blogdemo adm 0 Jul 12 12:07 file1
我们将默认组 ( blogdemo ) 更改为adm组。
我们可以使用*-R*选项递归地更改目录及其所有子文件夹和文件的所有权:
$ chown -R newuser:newgroup directory