如何限制 ubuntu 服务器上的命令行

如何限制 ubuntu 服务器上的命令行

我想限制所有用户的 Ubuntu 命令行。

但是如果我写一个超级用户命令,如“enable”或类似的命令。Ubuntu 应该要求我输入超级用户密码,如果我输入正确,它必须打开正常的不受限制的 bash。

我怎样才能做到这一点?

我看到了一些带有二维码的示例。他们运行超级用户命令,操作系统会在屏幕上显示一些随机字符和二维码。他们扫描此二维码,然后他们的应用程序会创建一个一次性密码。他们如何做到这一点?如果有这样的应用程序,那么这个应用程序的名称是什么?

答案1

这是一个相当普遍的答案,因为您的问题似乎也相当广泛。

严格来说,普通用户所能做的事情已经非常有限了。普通用户可以:

  • 修改自己主目录中的文件。
  • 查看不受限制的系统文件
  • 运行大多数应用程序 - 默认情况下仍只修改其主目录中的文件

您最有可能提到的超级用户命令是该sudo命令(默认情况下)。如果用户属于该sudo组,他们可以获得提升的权限,但这只应授予系统管理员。

可以通过执行以下操作来进一步限制普通用户可以执行的操作(但这需要大量的手动调整):

  • 您可以限制对某些系统文件的读取权限 - 例如,您可以将权限/var/log/apt从 0644 更改为 0640,以防止普通用户查看apt日志。
  • 您可以限制特定二进制文件的执行访问 - 例如,您可以将权限/usr/bin/cat从 0755 更改为 0750,以阻止普通用户执行该cat命令。

但是,上述示例需要对要从普通用户中排除的每个文件/目录和每个二进制文件进行手动调整。

因此,您可能应该详细说明您实际想要施加的限制,以看看是否有意义。

答案2

如果不知道你想应用什么类型的限制,很难回答,但有一种东西叫做受限外壳. 根据手动的,受限 shell 中下列操作被禁用:

  • 使用内置命令更改目录cd
  • SHELL设置或取消设置、PATHHISTFILEENV或变量的值BASH_ENV
  • 指定包含斜杠的命令名称。
  • 指定包含斜杠的文件名作为内置命令的参数.
  • 指定包含斜杠的文件名作为内置命令的参数history
  • 指定包含斜杠的文件名作为-phash 内置命令选项的参数。
  • 在启动时从 shell 环境导入函数定义。
  • SHELLOPTS在启动时从 shell 环境解析的值。
  • 使用>>|<>>&&>>>重定向运算符重定向输出。
  • 使用exec内置命令将 shell 替换为另一个命令。
  • 使用-f-d选项添加或删除内置命令enable
  • 使用enable内置命令启用已禁用的 shell 内置命令。
  • 指定-p内置选项command
  • set +r使用或关闭限制模式shopt -u restricted_shell

基本上,所有这些限制的目的都是为用户提供一个环境,在该环境中只能执行少数严格定义的命令(当然,除了为用户设置受限的 shell 之外,还需要适当设置 shell 启动文件、预定义命令目录等),例如某种没有密码的“访客”帐户,任何人都可以登录,但只能将其用于ssh网络中的其他机器。

您也可以选择授予用户访问特定命令/脚本的权限,该命令/脚本在输入密码后运行正常的不受限制的 shell,但您必须注意,一旦授予访问不受限制的 shell 的权限,用户可以将其 shell 永久设置为正常的不受限制的 shell,从而删除所有提到的限制。因此,只有当用户无法退出到正常的不受限制的 shell 时,使用受限制的 shell 才具有实际意义。

相关内容