允许 shell 脚本仅修改包含目录

Allow shell script to modify only containing directory

我正在编写一个 posix 恭维 shell 脚本,除其他外,它将克隆一个 git 存储库,然后执行一个脚本(与存储库一起克隆)在存储库中。

例如:

git clone git@github.com:torvalds/linux.git
cd linux
./Kconfig

这个想法是人们会用它来做好事,而不是作恶,但你知道....所以我真的想阻止人们做这样的事情:

rm -rf /

脚本里面。
或者也许是一些稍微不那么邪恶的东西,比如:

rm -rf ../../

我是否有可能以某种方式更改脚本的权限(在克隆之后),以便它只能修改克隆存储库中的内容?

基本上,您的问题的答案是 chroot 命令,它允许您锁定目录中的进程,就好像它是根目录一样。 chroot 需要 root 权限才能设置,但也有其他实现,例如 schrootfakechrootproot 不需要。由于所有文件系统访问(也包括读取)都受到限制,因此您需要将脚本运行所需的任何内容提交到 chrooted 环境中。如何方便地做到这一点取决于您的发行版。

这并不一定意味着它是绝对安全的,因为它只提供文件系统隔离。