Elixir/Erlang:在 open/write/mkdir 时设置权限?
Elixir/Erlang: Set permissions at time of open/write/mkdir?
我正在从我的 Elixir/Erlang 服务中编写一些配置文件和目录结构,并且想要对目录和文件(rwxr-x---(750) 和 rw-r- ----分别为(640))。基本上,我不希望任何“其他”可访问性)。
出于一致性和性能方面的原因,我宁愿不写!/3 每次都紧接着 chmod/2。我想也许我需要执行 open/2 才能获得这种灵活性。但是,尽管模块中记录了权限掩码,但它们似乎仅由 chmod/2 使用。我查看了 Erlang :file 模块以查看这是否是其中之一(改用 Erlang 模块),但没有在那里找到它。
我已经尝试过 umask,当我通过命令行混合 运行 它时,它工作正常,但当通过埋在 systemd 服务中的构建产品部署时,它不起作用。在那里我试图同时设置 UMask=0027 或通过环境,但它似乎在那里被忽略了。我真的宁愿在创建时进行显式设置,也不愿在其他地方使用 umask 操作来获得效果。
在 Linux 中,文件权限是在创建时使用 open
和 O_CREAT
或使用 chmod
系统调用设置的。
在 Erlang 中,您有 file:write_file_info to change the permissions, but when using the equivalent to O_CREAT
(file:open),没有很大的灵活性。
我快速搜索了存储库中的标志,我认为 O_CREATE
模式是固定的,你可以看到行 here,这里固定为
#ifdef NO_UMASK
#define FILE_MODE 0644
#define DIR_MODE 0755
#else
#define FILE_MODE 0666
#define DIR_MODE 0777
#endif
但是,创建文件时会应用 umask。
话虽这么说,如果文件打开太多以至于权限检查出现问题,也许值得将其保持打开状态(因此只需要一个 chmod
)
或者你可以手动设置config的顶层目录的权限,如果other
无法read/traverse顶层目录,即使更深的文件可以读取也没有关系。
我正在从我的 Elixir/Erlang 服务中编写一些配置文件和目录结构,并且想要对目录和文件(rwxr-x---(750) 和 rw-r- ----分别为(640))。基本上,我不希望任何“其他”可访问性)。
出于一致性和性能方面的原因,我宁愿不写!/3 每次都紧接着 chmod/2。我想也许我需要执行 open/2 才能获得这种灵活性。但是,尽管模块中记录了权限掩码,但它们似乎仅由 chmod/2 使用。我查看了 Erlang :file 模块以查看这是否是其中之一(改用 Erlang 模块),但没有在那里找到它。
我已经尝试过 umask,当我通过命令行混合 运行 它时,它工作正常,但当通过埋在 systemd 服务中的构建产品部署时,它不起作用。在那里我试图同时设置 UMask=0027 或通过环境,但它似乎在那里被忽略了。我真的宁愿在创建时进行显式设置,也不愿在其他地方使用 umask 操作来获得效果。
在 Linux 中,文件权限是在创建时使用 open
和 O_CREAT
或使用 chmod
系统调用设置的。
在 Erlang 中,您有 file:write_file_info to change the permissions, but when using the equivalent to O_CREAT
(file:open),没有很大的灵活性。
我快速搜索了存储库中的标志,我认为 O_CREATE
模式是固定的,你可以看到行 here,这里固定为
#ifdef NO_UMASK
#define FILE_MODE 0644
#define DIR_MODE 0755
#else
#define FILE_MODE 0666
#define DIR_MODE 0777
#endif
但是,创建文件时会应用 umask。
话虽这么说,如果文件打开太多以至于权限检查出现问题,也许值得将其保持打开状态(因此只需要一个 chmod
)
或者你可以手动设置config的顶层目录的权限,如果other
无法read/traverse顶层目录,即使更深的文件可以读取也没有关系。