作为设置一些基本系统监控的方法,我设置了一个脚本以通过 SSH 进入,并运行一些基本的 shell 命令,读取一些文件/proc
。我想为此任务创建一个特定的用户帐户,它应该具有以下访问权限:
- SSH
- 猛击
- 只读
/proc
其他帖子提到了 rssh 或 Chroot,但这些是最好的方法吗?在我看来,应该有一种方法可以创建一个没有权限的用户,只添加所需的权限,在文件系统级别而不是 SSH 上强制执行我的限制。这可能吗?
我现在想要监控的所有系统都运行 Ubuntu,但我不想将自己锁定在任何一个特定的发行版上。
答案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 程序更容易。
答案2
要强制对 /proc 进行只读,您可以访问 /proc 的 sshfs 只读克隆。