是否可以删除当前用户在 shell 中的所有写入权限

是否可以删除当前用户在 shell 中的所有写入权限

这不是为了安全目的。

假设我想执行一个 shell 脚本,并且尽最大努力,假设它除了auditd 日志记录、avc 报告、syslog 等之外没有任何副作用。实际上,我想删除该脚本的所有写入权限当前用户对于整个 shell 会话。我对设置组和具有仔细管理文件权限的低特权用户不感兴趣。存在哪些选择?

理想情况下,我希望以任何 posix shell 为目标,但我从 bash 开始,因为它是我最熟悉的。

阅读 man bash,受限炮弹看起来很有希望,但它们在错误的地方限制太多。例如,我仍然希望能够使用它cd,并且它不会阻止类似的事情echo foo | tee /file。同样,bashset选项的限制性也不够,因为它们也不限制子进程的写入,例如(set -C; echo foo | tee /file)无法完成我正在寻找的内容。

我还想避免使用overlayfs,因为我希望能够在单个 SSH 会话中进入/退出这种“只读”模式。

我得到的最接近的结果是将最大文件大小 ulimit 降至 0:

(ulimit -f 0; echo "blows up w/ signal SIGXFSZ" > file; ); echo $?

这看起来非常接近我正在寻找的东西,并且可以在像 之类的 shell 中工作dash,但它仍然会因留下空文件而受到影响。因此,在上面的示例中,“文件”已被创建,但为空。

我觉得有一种方法可以将我与 SELinux 的用户会话限制在更严格的范围内,但可以使用指针来提供帮助。

还有其他选择吗?

我感兴趣的另一个选项是简单地监视进程期间的任何 IO 写入。也许 cgroups 可以用于此目的,但我对它们不熟悉。或者也许 systemd-run 也很有用。

答案1

不是一个完整的答案,但也许是一个指向一个的指针......

也许像Linux磁盘配额系统可以,Debianquota软件包描述:

  Description-en: disk quota management tools
   This package provides the standard set of utilities for manipulating
   file system usage caps via the Linux Diskquota system. It can set hard
   or soft limits with adjustable grace periods on block or inode usage for
   users and groups. It allows users to check their quota status,
   integrates with LDAP, and supports quotas on remote machines via NFS.

一个粗略的轮廓是:

  1. 设置一个来宾系统或主目录,其中大部分内容都被写保护,然后

  2. 为用户开启配额系统富巴, 设置0

相关内容