允许 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 权限才能设置,但也有其他实现,例如 schroot
、fakechroot
或 proot
不需要。由于所有文件系统访问(也包括读取)都受到限制,因此您需要将脚本运行所需的任何内容提交到 chrooted 环境中。如何方便地做到这一点取决于您的发行版。
这并不一定意味着它是绝对安全的,因为它只提供文件系统隔离。
我正在编写一个 posix 恭维 shell 脚本,除其他外,它将克隆一个 git 存储库,然后执行一个脚本(与存储库一起克隆)在存储库中。
例如:
git clone git@github.com:torvalds/linux.git
cd linux
./Kconfig
这个想法是人们会用它来做好事,而不是作恶,但你知道....所以我真的想阻止人们做这样的事情:
rm -rf /
脚本里面。
或者也许是一些稍微不那么邪恶的东西,比如:
rm -rf ../../
我是否有可能以某种方式更改脚本的权限(在克隆之后),以便它只能修改克隆存储库中的内容?
基本上,您的问题的答案是 chroot
命令,它允许您锁定目录中的进程,就好像它是根目录一样。 chroot
需要 root 权限才能设置,但也有其他实现,例如 schroot
、fakechroot
或 proot
不需要。由于所有文件系统访问(也包括读取)都受到限制,因此您需要将脚本运行所需的任何内容提交到 chrooted 环境中。如何方便地做到这一点取决于您的发行版。
这并不一定意味着它是绝对安全的,因为它只提供文件系统隔离。