gpt4 book ai didi

linux - umask 'relative to' 是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 04:46:34 26 4
gpt4 key购买 nike

据我所知,umask 是一个“最后阶段过滤器”,可确保在新创建的文件或目录上设置特定的权限位。我的问题是,它的作用是什么?输入权限集是如何确定的?

为了说明我的困惑,请考虑以下内容:

  • 我将 umask 设置为 000
  • 我在主目录中创建了一个目录,权限为 777
  • 我通过sudo在系统根目录(/)创建一个目录,权限为755

为什么会有差异?

最佳答案

umask 由创建文件系统对象的某些系统调用解释。它通常与传递给系统调用的显式模式参数相关。例如,mkdir工作原理如下:

int mkdir(const char *path, mode_t mode);

The file permission bits of the new directory shall be initialized from mode. These file permission bits of the mode argument shall be modified by the process' file creation mask.

open这样做:

int open(const char *path, int oflag, ... );

the access permission bits (see <sys/stat.h>) of the file mode shall be set to the value of the third argument taken as type mode_t modified as follows: a bitwise AND is performed on the file-mode bits and the corresponding bits in the complement of the process' file mode creation mask. Thus, all bits in the file mode whose corresponding bit in the file mode creation mask is set are cleared.

进程的 umask 由其子进程继承,但当然任何进程都可以更改自己的 umask。

根据 OP 提供的信息,我假设 OP 正在从 shell 运行以下命令:

umask 000
mkdir ~/foo
sudo mkdir /foo

mkdir命令使用默认模式如下:

The value of the bitwise-inclusive OR of S_IRWXU, S_IRWXG, and S_IRWXO is used as the mode argument.

因此,S_IRWXU|S_IRWXG|S_IRWXO 为 0777,正如预期的那样,当 umask 为 000 时,~/foo 的模式将为 0777。

但是sudo始终将 umask 设置为 /etc/sudoers 中列出的值或编译时选择的默认值(在 Ubuntu 上为 022)。因此 sudo mkdir/root/foo 将以 022 的 umask 运行,从而生成一个目录 0755。

关于linux - umask 'relative to' 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32818181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com