Linux中的umask命令及示例
Linux 中的 umask命令用于为用户创建的文件或目录设置默认权限。
umask 命令是如何工作的?
- umask 命令指定用户不希望授予新创建的文件或目录的权限。
- umask 通过对 umask 的按位补码(位被反转,即 1 变为 0,0 变为 1)进行按位与运算来工作。
- 在 umask 值中设置的位指的是默认情况下未分配的权限,因为这些值是从文件/目录的最大权限中减去的。
如何计算umask值?
句法:
$umask
[上述命令将给出以下输出]
pratyay@pratyay-ROG-Strix-G531GT:~/Study/Linux/CommandTrials/umask$ umask
0002
- 这里,第一个数字 0 称为粘性位,它是一种特殊的安全功能。
- 接下来的三位数字代表文件或目录的 umask 的八进制值。
为了更好地了解 umask 的工作原理,我们需要了解八进制模式安全设置。三个 rwx 权限 (Read-Write-Execute) 值转换为三位二进制值,并由单个八进制值表示,如下表所示:Permissions Octal Value Binary Value Description — 0 000 No permission –x 1 001 only permission to execute -w- 2 010 only permission to write -wx 3 011 permission to write and execute r– 4 100 only permission to read r-x 5 101 permission to read and execute rw- 6 110 permission to read and write rwx 7 111 permission to do all three, i.e. read, write and execute
简化:
让我们通过一个例子来理解上表:让我们解释一下我们之前使用 umask 得到的输出,0002
- 为了更好地理解上表,乍一看似乎很混乱,但其实很简单,你只需要记住三种模式, rwx (read-write-execute)。
- 相应模式的位,即3位数,第一位(最左边)用于读取,然后分别写入和执行。在上面的例子中,0002 是由 umask 命令输出的,我们现在不用担心第一个 0。接下来的三位数字是 0 0 2。
- 这里的每个数字代表不同的用户等级,Linux中一共有3个等级的用户,
- 主人
- 小组成员
- 其他所有人
- 上面的输出 (0 0 2) 显示所有者的访问权限是 0,组成员的访问权限是 0,每个人的访问权限是 2。这个 2 是一个八进制值,要了解访问权限,我们必须将其转换为十进制,2等于十进制的010,可以明确为0表示读,1表示写,0表示执行。
- 所以我们可以得出结论,上面的输出说——只给每个人写权限。
如何设置和更新默认的 umask 值?
我们可以使用命令 umask 后跟一个参数来设置和更新默认的 umask 值,该参数应该是一个介于 000-777 之间的整数。更新 umask 值的语法与设置 umask 值的语法相同。
设置 umask 值:
我们可以使用 umask 命令设置创建文件/目录的默认权限。
句法
$umask 543
如何计算文件和目录的 umask 值?
在这里,当我们执行命令时,值不会直接分配为所有者为 5,组成员为 4,其他成员为 3,而是从 max/full 权限集中减去我们作为参数传递的值。有两个完整的权限集:
- 文件 -> 文件的完整权限集为 666(所有人的读/写权限)
- 目录 -> 目录的完整权限集为 777(读/写/执行)
注意:默认情况下不能授予文件执行权限,因为它可能会引起安全问题,并且 Linux 系统以其惊人的安全性而闻名,因此这并不好。
所以,一旦我们将 umask 值设置为 543,让我们看看当我们创建一个目录(7-7-7)和一个文件(6-6-6)时会发生什么
制作目录:
- 当我们创建一个新目录时,权限将被计算为(目录的完全权限)-(umask值) 即 777 – 543 = 234
- 234,可以更明确地表示为:
- 2 为所有者,即二进制的 010,所以为所有者写权限。
- 3对于组成员,即二进制的011,所以对组成员有写和执行权限。
- 4 其他人,即 100 二进制,所以只有其他人的读取权限。
- 输出显示如下: dw–wxr– ,这有点混乱,但我们简化后可以看成d -w- -wx r– ,这里的d代表目录,后面 3 是权限我们在上一点讨论的各个用户。
制作文件:
- 当我们创建一个新目录时,权限将被类似地授予,但略有变化如下:(文件的完全权限)-(umask值)即666-543 = 123
- Linux 默认不提供执行权限,即使在 umask 中指定了。
- 123 可以进一步澄清为:
- 所有者为1,即二进制为001,所以应该给所有者执行权限,但是Linux不给执行权限默认创建一个目录:s,所以值提升1,我们得到010,而写入权限将授予所有者。
- 2为组成员,即二进制的010,所以给组成员写权限。
- 3 给别人,也就是二进制的011,所以给别人写和执行权限,但是又不能提供执行权限,所以再提升一次值,我们会得到100,所以会被授予读权限给其他人。
- 输出显示, -w-wr-可以简化为--w- -w- r- ,即为所有者写,为组写,为其他人读。
- 现在,当我们尝试以所有者身份打开此文件时,我们将被拒绝访问,因为文件的所有者只能写入它。
- 因此,为了打开文件,我们要么必须是管理员,要么必须不是所有者和组成员。
- 以管理员身份打开文件:
因此,通过这种方式,可以使用umask命令来设置文件和目录的默认权限。需要注意的是,文件和目录的默认权限是不同的,因为文件默认不提供执行的选项。
chmod 和 umask 有什么区别?
- umask 命令只能用于新文件,即在创建新文件时,在使用 umask 命令之前创建的任何文件都将无效。
- chmod 命令必须用于已经存在的文件,它用于更改之前创建的文件的访问权限。
因此,我们需要 umask 命令来为将来创建的文件和目录设置默认访问权限,我们需要 chmod 命令来更改已经创建并存在于中的文件的访问权限系统。