首先是权限。当您创建一个新帐户时(使用 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程序更容易。