sunknudsen Asked: 2022-03-23 03:24:46 +0800 CST2022-03-23 03:24:46 +0800 CST 2022-03-23 03:24:46 +0800 CST 如何以具有受限权限的给定用户原子方式创建文件 772 尝试将以下命令转换为原子单线……可能吗? echo foo | sudo -u sun tee bar.private chmod 600 bar.private linux bash 1 个回答 Voted Best Answer ilkkachu 2022-03-23T07:04:25+08:002022-03-23T07:04:25+08:00 新创建文件的权限由进程 umask 修改,它的工作方式相反:在 umask 中设置的位将在生成的权限中被清除。因此将 umask 设置为0077, 将使大多数实用程序创建具有权限的文件0600。 默认情况下,sudo 从它开始的环境中继承一个更严格的 umask,所以你可以这样做: echo foo | (umask 0077; sudo -u sun tee bar.private) 并且该文件将使用权限创建0600。 sudo实际上,它对环境中的 umask 和配置文件中设置的 umask 进行按位和(选项,默认为)。因此,默认情况下,您不能使用 umask 运行,而是改为使用 umask。但是我们在这里让它变得更严格,这很有效。umask0022tee00000022 当然,配置可能将 umask 设置为其他内容,甚至可能使用umask_override,这可能会使它变得更松散,此外可能还有一些 PAM 模块也可以修改它。在这种情况下,您可以让 sudo 运行一个设置 umask 的 shell,然后运行以下命令: echo foo | sudo -u sun sh -c 'umask 077; tee bar.private'
新创建文件的权限由进程 umask 修改,它的工作方式相反:在 umask 中设置的位将在生成的权限中被清除。因此将 umask 设置为
0077
, 将使大多数实用程序创建具有权限的文件0600
。默认情况下,sudo 从它开始的环境中继承一个更严格的 umask,所以你可以这样做:
并且该文件将使用权限创建
0600
。sudo
实际上,它对环境中的 umask 和配置文件中设置的 umask 进行按位和(选项,默认为)。因此,默认情况下,您不能使用 umask 运行,而是改为使用 umask。但是我们在这里让它变得更严格,这很有效。umask
0022
tee
0000
0022
当然,配置可能将 umask 设置为其他内容,甚至可能使用
umask_override
,这可能会使它变得更松散,此外可能还有一些 PAM 模块也可以修改它。在这种情况下,您可以让 sudo 运行一个设置 umask 的 shell,然后运行以下命令: