将用户访问限制为仅从/ proc读取


1

作为一种设置一些简单系统监控的方法,我有一个设置为SSH的脚本,并运行一些基本的shell命令,读取一些文件 /proc。我想为此任务创建一个特定的用户帐户,它应具有以下访问权限:

  • SSH
  • 巴什
  • 只读 /proc

其他帖子提到了rssh或Chroot,但这些是最好的方法吗?在我看来,应该有一种方法来创建一个没有权限的用户,只添加所需的内容,在文件系统级别而不是在SSH上强制执行我的限制。这可能吗?

我现在要监视的所有系统都在运行Ubuntu,但是我不想将自己锁定到任何一个特定的分布。


你想保护什么?有些文件是世界写的。文件权限由内核模块设置 - 除非您想要更改内核代码(并影响每个人),否则您无法更改它们。另外,你想保护/ sys吗?和sysctl?
Rich Homolka

@RichHomolka我不是要特别保护任何东西......如果监控帐户的凭据受到损害,只是试图限制潜在的损害。如果某事是世界可写的,我不太关心。
Brad

@Brad默认情况下,任何帐户只对其主目录具有用户写入和组写入权限。当然,可以访问任何世界写或世界读的东西。可能没有办法防止使用自定义shell或启用ACL。实际上,如果您设置一个运行脚本的登录“shell”并返回结果而不进行任何输入,那么这可能会有效。如果您确实需要FS级限制,请使用ACL。
Bob

@Bob我真的很喜欢你的shell想法。请发布以及与用户帐户相关的其余说明,以便我接受它作为答案。谢谢!
Brad

仅供记录 - rssh 旨在仅允许SCP和SFTP,而不是特定目录中的任意命令。如果你真的想允许的话 任何 命令, chroot 可能是最简单的方法。但是,我再次建议将特定命令列入白名单。
Bob

Answers:


1

首先是权限。当您创建一个新帐户时(使用 adduser 在基于Debian的系统上,无论如何 - 其他可能略有不同),您将获得一个新用户和一个具有相同名称的新组。您还可以获得该用户的主目录。此新用户将在其主目录上拥有用户和组读/写权限。他们还可以访问任何指定为世界可读的内容,并修改任何世界可写的内容。

据我所知,具体而言是不可能的 排除 使用传统POSIX权限系统从世界读/写权限中获得一个用户或组。您 能够 但是,启用更高级的ACL(非常类似于Windows的NTFS,如果您熟悉它),它允许您设置特定的拒绝权限。


另一种方法是建立一个 自定义登录shell , 使用 chsh 命令或修改 /etc/passwd。当他们登录时,将执行此“shell”,并将用户的输入重定向为其标准输入,并将其标准输出/错误重定向到终端输出。你可以设置这个'shell' 任何 系统上的可执行文件,包括(但不限于)您自己的C程序,bash / python / perl脚本等。

有几种方法可以做到这一点。您可以将登录shell设置为只输出所需数据的脚本,并且不进行任何输入。它只输出数据并退出,关闭SSH会话。这是最安全的方式,但不是那么灵活。

或者,您可以让脚本获取一些输入,并使用该输入来确定要打印的内容。你如何做到这一点取决于你 - 如果你使用的话 bash 脚本,你可以使用 read 随着一个 case 声明或一系列 if 声明。但是,您必须要小心,不要直接从用户运行任何未经过处理的命令 - 并且在采取不受信任的输入时还存在其他可能的安全问题。例如,您可以接受输入 processes 并返回输出 ps -e

如果你想要,并且对C很好,你甚至可以修改 bash 本身无法访问任何其他目录 - 但是,如果不接受输入或仅过滤特定的列入白名单的命令,而不是尝试限制您可以访问的目录,则更安全。编写快速shell脚本比修改复杂的C程序更容易。


1

要在/ proc上强制执行只读,您可以访问/ proc的sshfs只读克隆。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.