是否可以在进程级别限制可用于linux的标准流?
收藏

我希望能够生成一个只能访问stdin、stdout和stderr(不多也不少)的linux进程。我可以在过程级别自己完成吗?我还含蓄地声明(矛盾修饰法),我不希望生成的进程能够更改流另一端指向的“对象”。
比喻:
进程有一个来自某处的输入管道,它无法更改管道的起始位置,因此无法控制输入的来源。
进程有输出管道和错误管道,它们指向某个地方,不能更改输出管道另一端指向的位置,因此无法控制输出流向何处。
它不能创建任何新管道。
我现在也在看塞利努克斯。这是否允许我创建一个只能访问这三个流的进程?谢谢您。


最佳答案:

如另一个答案所述,selinux确实拥有各种权限,有助于锁定任何进程。
内核管理对某些对象的访问(以及相关的权限集),例如文件是对象、目录是对象、unix数据报套接字是对象等等。
可能最简单的事情就是写一点政策。幸运的是,selinux在默认情况下是拒绝的,所以运行你的程序,查看selinux拒绝的日志,只允许你的程序做你想做的事情。换句话说,您将避免添加涉及对象类的权限,如msg(systemv消息队列中的消息)、msgq(systemv消息队列本身)、sem(信号量)、shm(共享内存)和其他可能的权限,具体取决于它所做的操作。
我建议您在第一次使用selinux时打开它,但这是允许的(请参见setenforce 0)
我还建议使用一些工具来帮助您构建一些策略,编写基本的raw m4可能会有点难以承受

公众号