假设我正在实现一种具有交互模式的编程语言,并且该交互模式读取~/.foo_rc
用户主目录中的某些文件。该文件包含该语言的代码,可用于自定义某些首选项。读取此文件时,该语言未沙箱化;该文件可以做“任何事情”。
我应该对文件进行权限检查吗?喜欢:
$ foo -i
Not reading ~/.foo_rc because it is world-writable, you goof!
P.S. you don't even own it; someone else put it there.
> _
我正在查看 Bash 源代码,它并不关心权限检查~/.bash_profile
(除了它存在并且可读,这是使用它做任何事情的先决条件)。
[更新]
在考虑了 thrig 的答案后,我对文件进行了以下检查:
如果该文件不属于调用者的有效用户 ID,则该文件不安全。
如果该文件对其他人是可写的,则它是不安全的。
如果该文件对于所属组是可写的,那么如果该组包含调用者以外的用户,则该文件是不安全的。 (即该组必须为空,或者将调用者作为其唯一的成员)。
否则就被认为是安全的。
请注意,组检查不会假设数字用户 ID 和组 ID 或其名称之间的任何对应关系;它基于检查姓名用户的 被列为唯一成员。
(执行此检查的函数的文档中添加了一条注释,表明它受到检查时间到使用时间竞争条件的影响。应用检查后,无辜的超级用户可以使用其他成员扩展组,可能是恶意的,并在访问文件时修改该文件。)
答案1
合理且谨慎,前提是有关于哪个文件失败以及原因的明确警告,以便用户可以修复权限问题。bash
可能是从一个更加信任(和恶作剧)的日子开始的。请注意,如果站点具有每个用户进入只有该用户所在的组的策略,则用户文件可以合法地为组可写,否则则不然。
(父目录检查也可能是谨慎的,以发现chmod 777 $HOME
错误。)