问题描述
我使用标准 POSIX 实用程序 cp
、install
、sed
、sh
安装文件。
可以使用 chmod
/ chown
/ chgrp
修复任何权限,但暂时暴露敏感数据并稍后修复是危险的。
处理问题的“标准”方法是使用install -m MODE -u USER -g GRP
。
如果我需要使用“哑”实用程序(例如 grep
/ sed
/ awk
/ sh
)处理文件怎么办?如何防止此类工具的数据泄漏?通过使用 umask 777
?
我认为以下危险:
base64 -d secret.txt >/etc/app.key
sed -e '/^#.*/d' </etc/default/app.cfg >/etc/app.cfg
因为如果 umask
太开放,其他用户可能可以访问文件内容。此外,我必须在重定向后“修复”用户/组...
PS 似乎 install
不在 POSIX ... https://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.html
此外 GNU install
不从管道读取,因此以下技巧是不可能的:
sed ... < $SRC | install -m MODE -u USER -g GRP - $DEST
某些 shell 允许进程替换(<(cmd)
语法)或者可能创建命名管道作为解决方法...
解决方法
阅读 POSIX 后,我发现 mkdir
、cp
和其他工具无法保证尊重 umask
。实际上 umask
是一个进程属性,由内核/系统处理。
我最好使用带有 -m MODE
(-u
,-g
) 的非标准 GNU 安装。
对于愚蠢的工具,带有进程替换的 GNU Bash 会很方便:
install -m 0700 <(sed ... $SRC) $DST
但我不确定 FIFO 权限...