Contents

在Linux中更改文件夹及其所有内容的权限

1. 概述

Linux 操作系统使用访问权限 来维护文件目录的安全性。当我们创建文件或目录时,Linux 会为它们分配默认权限。在本教程中,我们将讨论更改目录和目录中文件权限的不同方法。

2. 访问权限

在许多 Linux 发行版中,当我们创建用户时,Linux 系统会创建一个与用户同名的组,并将该用户的文件分配给该组。文件和用户的关系是每个文件可以属于一个用户和一个组

2.1. 列出文件和目录权限

我们可以使用ls -ld  命令向我们显示目录的权限

$ 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*移除执行权限。

此外,我们可以使用八进制代码来更改权限。例如,当使用八进制代码时,我们可以使用数字来代替rwx

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来设置或取消设置suidsgid*。

如果我们在文件上设置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