限制linux进程对一个文件夹的写权限

限制linux进程对一个文件夹的写权限

我希望一个进程(及其所有潜在的子进程)能够根据我的用户配置文件读取文件系统,但我想将该进程的写入权限限制为仅一组预先选择的文件夹(可能只有一个)。

chroot似乎行动过于宽泛。将进程限制在文件系统的特定部分,这使得安装/bin文件夹等的需要变得更加简单。我的进程应该能够像我启动的任何正常进程一样读取文件系统的内容。

我可以使用 docker 容器并安装一个卷,但这似乎有点过分:需要安装 docker、创建图像、启动其中的容器等...

有没有办法做类似的事情?:

restricted-exec --read-all --write-to /a/particular/path --write-to /another/particular/path my-executable -- --option-to-the-executable

某一些unveil但由调用进程控制并且仅用于写访问。

答案1

您也许可以使用systemd.它有许多控制文件系统访问的设置,例如ReadOnlyPathsReadWritePaths

systemd-run以下是使用仅具有写入权限的命令运行命令的快速示例/var/lib。示例中touch用于在多个目录中创建文件,但只有可写路径才能成功。

root@ubuntu:~# systemd-run --wait -p ProtectSystem=strict -p ProtectHome=read-only -p ReadWritePaths=/var/lib bash -c
'touch /etc/myfile /var/lib/myfile /var/cache/myfile /root/myfile /home/ubuntu/myfile'
Running as unit: run-u1008.service
Finished with result: exit-code
Main processes terminated with: code=exited/status=1
Service runtime: 44ms
root@ubuntu:~# ls -l {/etc/,/var/lib/,/var/cache/,/root/,/home/ubuntu/}myfile
ls: cannot access '/etc/myfile': No such file or directory
ls: cannot access '/var/cache/myfile': No such file or directory
ls: cannot access '/root/myfile': No such file or directory
ls: cannot access '/home/ubuntu/myfile': No such file or directory
-rw-r--r-- 1 root root 0 Mar  3 23:17 /var/lib/myfile

编辑

您可以使用选项以用户身份运行该命令-p User。不幸的是,您需要 root 访问权限才能使用我的建议,因为您可以不是使用文件系统保护--user(基于为什么不systemd-run --user实施诸如此类的限制ProtectSystem)。

这是另一个简单的例子。这次该命令以ubuntu用户身份运行。

root@ubuntu:~# install -o ubuntu -g ubuntu -d /tmp/{test,test2}
root@ubuntu:~# systemd-run --wait -p User=ubuntu -p ProtectSystem=strict -p ProtectHome=read-only -p ReadWritePaths=/tmp/test bash -c 'touch /tmp/test/myfile /tmp/test2/myfile /home/ubuntu/myfile'
Running as unit: run-u1043.service
Finished with result: exit-code
Main processes terminated with: code=exited/status=1
Service runtime: 55ms
root@ubuntu:~# ls -l /tmp/{test,test2}/myfile /home/ubuntu/myfile
ls: cannot access '/tmp/test2/myfile': No such file or directory
ls: cannot access '/home/ubuntu/myfile': No such file or directory
-rw-r--r-- 1 ubuntu ubuntu 0 Mar  5 17:37 /tmp/test/myfile

如果您对保护感兴趣/tmp,那么您还可以考虑PrivateTmpsystemd 的功能。这只是可用于沙箱进程的更多 systemd 设置之一。

答案2

firejail做的工作:

mkdir -p ~/test && firejail --read-only=/tmp --read-only=~/ --read-write=~/test/ touch ~/test/OK ~/KO /tmp/KO

相关内容