我相信umask可以控制文件权限,但不完全理解它。
在终端中运行umask 0644
后,我无法读取我创建的文件命令行文本编辑器nano
。我注意到该文件的权限设置为0022
而不是默认的0755
。
umask是如何工作的?我想我可以从0777
,7 - 6 = 1
和7 - 4 = 3
删除umask中的每个数字,所以我期望权限为0133
,但显然情况并非如此。
umask充当应用程序无法在文件上设置的一组权限。它是进程的文件模式创建掩码,无法为目录本身设置。大多数应用程序不会创建具有执行权限设置的文件,因此它们将具有666
的默认值,然后由umask修改。
由于您已设置umask以删除所有者的读/写位以及其他人的读取位,因此应用程序中的默认值(例如777
)将导致文件权限为133
。这意味着您(和其他人)可以执行该文件,而其他人则可以写入该文件。
如果你想让除了所有者之外的任何人都不能读/写文件,你应该使用像077
这样的umask关闭这些组的权限。其他
相反,000
的umask将使新创建的目录对每个人都可读,可写和可下载(权限将是777
)。这样的umask是非常不安全的,你永远不应该将umask设置为000
。
Ubuntu上的默认umask是022
,这意味着每个人都可以读取新创建的文件,但只能由所有者写入:
user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr 1 19:15 new-file-name
要查看当前的umask设置,请打开终端并运行命令:
umask
要将当前shell的umask设置更改为其他内容,例如077,请运行:
umask
要测试此设置是否有效,您可以创建新文件(现有文件的文件权限不受影响)并显示有关该文件的信息,运行:
umask 077
umask设置由从同一shell启动的进程继承。例如,通过在终端中执行gedit
来启动文本编辑器GEdit,并使用gedit保存文件。您会注意到新创建的文件受到与终端中相同的umask设置的影响。
如果您所在的系统由多个用户共享,则希望其他人无法读取您主目录中的文件。为此,umask非常有用。编辑~/.profile
并添加一个新行:
user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr 1 19:14 new-file-name
您需要重新登录才能使~/.profile
中的此umask更改生效。接下来,您需要通过删除世界的读取,写入和执行位来更改主目录中文件的现有文件权限。 打开终端并执行:
umask 007
如果您希望将此umask设置应用于系统上的所有用户,则可以在/etc/profile
编辑系统范围的配置文件。