我希望能够运行一个命令,将参数传递给 bash 或类似的命令,这样该命令就不允许写入特定路径,从而覆盖用户的其他权限。
例如:
root> /bin/bash -protect /folder/to/protect mycommand.sh
在此示例中,根用户显然可以执行其想做的操作,但是当我测试正在编写的新脚本时,我想保护一个文件夹,就好像该文件夹仅供该用户读取一样。
有没有办法做到这一点,而无需添加新用户并相应地调整该用户的权限?顺便说一句,它不必在 bash 中,我不介意这种方法 - 只要我可以保护文件夹而不添加新用户,我不介意!
答案1
Unix 的安全性建立在用户和组的权限之上。如果要将某个目录设为命令的只读目录,则需要以不允许写入该目录的用户身份运行该目录。或者有一种更严厉的方法,即在虚拟机中运行命令。
你可能会发现绑定文件系统有用。 Bindfs 是一个堆栈文件系统,也就是说,它创建目录树的一部分的替代视图。特别是,您可以创建只读视图或具有不同权限的视图。 Bindfs 不能使/folder/to/protect
只读,但它可以创建该目录的只读视图/read/only/view
;您需要找到一些其他方法(例如权限)来防止命令写入`/folder/to/protect。
bindfs --perms=a-w /folder/to/protect /read/only/view
答案2
您可以编写一个共享库,在其周围实现一个包装器,open
以执行您想要的额外安全检查。您编写的程序随后可以LD_PRELOAD
在调用程序时使用它来加载您的共享库并覆盖系统的open
。
您可能需要重写其他系统调用,以确保程序没有其他方法来实现其想要执行的操作。