防止在 UNIX 中安装过程中由于文件权限导致数据泄漏

问题描述

我使用标准 POSIX 实用程序 cpinstallsedsh 安装文件

可以使用 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 后,我发现 mkdircp 和其他工具无法保证尊重 umask。实际上 umask 是一个进程属性,由内核/系统处理。

我最好使用带有 -m MODE (-u,-g) 的非标准 GNU 安装。

对于愚蠢的工具,带有进程替换的 GNU Bash 会很方便:

install -m 0700 <(sed ... $SRC) $DST

但我不确定 FIFO 权限...