linux文件的权限
在 Linux 中,文件权限是用来控制对文件和目录的访问的。每个文件和目录都有三种类型的权限:读(r)、写(w)、执行(x),分别表示允许用户对文件进行读取、写入和执行操作。这些权限是针对文件的所有者、所属组和其他用户设置的。
文件权限的表示方式通常是由九个字符组成,分成三组,每组三个字符,分别代表文件所有者权限、所属组权限和其他用户权限。这九个字符中的每一个字符代表一种权限,可以是 r
(读取)、w
(写入)或 x
(执行),或者是 -
(表示没有相应的权限)。
例如,一个文件的权限字符串可能是 rwxr-xr--
,它的含义是:
- 文件所有者有读、写、执行权限。
- 文件所属组有读、执行权限。
- 其他用户只有读权限。
以下是如何设置文件权限的一些基本命令:
1.chmod修改文件权限
数字表示
chmod [权限设置] 文件名
例如,要将文件 file.txt
设置为所有者可读写,所属组和其他用户只读的权限,可以执行以下命令:
chmod 644 file.txt
符号表示
+
表示添加权限-
表示删除权限=
表示设置权限
例如,要将文件 file.txt
的所有者添加执行权限,可以执行以下命令:
chmod u+x file.txt
2.chown修改文件属主和属组
chown [新属主]:[新属组] 文件名
例如,将文件 file.txt
的所有者改为 user1
,所属组改为 group1
,可以执行以下命令:
chown user1:group1 file.txt
-R表示递归地修改所有子目录和文件的所有者。
举个例子,如果想将目录 /home/user1/myfolder
及其所有子目录和文件的所有者修改为 user2
,可以使用以下命令:
chown -R user2 /home/user1/myfolder
3.umask权限掩码
umask
命令用于设置文件创建时默认权限的掩码,即控制文件的默认权限。它通过从最大权限(通常是 777)中减去指定的权限来设置默认权限。通常情况下,新创建的文件的默认权限是 666(普通文件) 或 777(目录)减去当前 umask 的值。 umask 值可以通过使用 umask 命令进行设置和显示。
例如,如果当前的 umask 值为 022,那么新创建的文件的默认权限将是 644(666 减去 022),新创建的目录的默认权限将是 755(777 减去 022)。
修改umask
临时修改:
umask 0222
将umask的值临时修改为0222
永久修改:
要永久修改 umask,你需要编辑 shell 的配置文件,这样每次启动 shell 时都会使用新的 umask 值。通常情况下,可以修改用户的 shell 配置文件,比如 .bashrc(对当前用户修改),.profile(对全部用户修改)
4.特殊权限
在Linux系统中,有一些特殊的权限标记可以应用于文件或目录。这些特殊权限标记会改变文件或目录的行为或访问权限。
在 chmod
命令中,特殊权限位 SUID、SGID 和 Sticky Bit 分别用数字表示为:
- SUID: 4
- SGID: 2
- Sticky Bit: 1
以下是几个特殊权限标记:
-
SUID (Set User ID):
- 当 SUID 位设置在一个可执行文件上时,该文件将以文件所有者的权限来执行,而不是实际执行者的权限。
- 主要用于特定情况下,允许普通用户执行一些需要特权用户权限的程序,例如
passwd
命令,普通用户执行该命令时需要更改/etc/passwd
文件,而 SUID 位可以让普通用户以超级用户权限执行该命令,但需要小心防止滥用。 -
chmod u+s filename
-
SGID (Set Group ID):
- 当 SGID 位设置在一个可执行文件或目录上时,该文件或目录将以文件所属组的权限来执行或访问。
- 对于可执行文件,SGID 会继承执行者的有效组,而对于目录,则会使新创建的文件的组自动设置为该目录的组。
- 主要用于组共享文件和目录的访问权限管理,确保多个用户在同一个组中工作时可以共享文件,并且对文件的操作受到控制。
-
chmod g+s filename
-
Sticky bit:
- 当 sticky bit 设置在目录上时,只有文件所有者、目录所有者和超级用户可以删除该目录下的文件,普通用户无法删除其他用户创建的文件,即使对该文件有写权限。
- 在公共目录中,可以防止普通用户删除其他用户上传的文件,保护用户文件的安全性。
-
chmod +t directoryname