如何以原子方式以受限权限作为给定用户创建文件

如何以原子方式以受限权限作为给定用户创建文件

尝试将以下命令转换为原子单行命令……可能吗?

echo foo | sudo -u sun tee bar.private
chmod 600 bar.private

答案1

新创建的文件的权限由进程 umask 修改,其工作原理相反:位在 umask 中将是清除在生成的权限中。因此,将 umask 设置为0077,将使大多数实用程序创建具有权限的文件0600

默认情况下, sudo 从它启动的环境继承更严格的 umask,因此您可以执行以下操作:

echo foo | (umask 0077; sudo -u sun tee bar.private)

并且该文件将使用权限创建0600

实际上sudo,它执行的是按位操作环境中的 umask 以及中设置的 umask配置文件umask选项,默认为0022)。因此,默认情况下,您不能使用teeumask 运行0000,它将改为0022。但我们在这里把它变得更严格,这很有效。

当然,配置可能会将 umask 设置为其他值,甚至可能使用umask_override,这可能会使其更宽松,此外可能还有一些 PAM 模块也可以对其进行修改。在这种情况下,您可以使用 sudo 运行一个设置 umask 的 shell,然后运行以下命令:

echo foo | sudo -u sun sh -c 'umask 077; tee bar.private'

相关内容