![如何限制 ubuntu 服务器上的命令行](https://linux22.com/image/953053/%E5%A6%82%E4%BD%95%E9%99%90%E5%88%B6%20ubuntu%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E5%91%BD%E4%BB%A4%E8%A1%8C.png)
我想限制所有用户的 Ubuntu 命令行。
但是如果我写一个超级用户命令,如“enable”或类似的命令。Ubuntu 应该要求我输入超级用户密码,如果我输入正确,它必须打开正常的不受限制的 bash。
我怎样才能做到这一点?
我看到了一些带有二维码的示例。他们运行超级用户命令,操作系统会在屏幕上显示一些随机字符和二维码。他们扫描此二维码,然后他们的应用程序会创建一个一次性密码。他们如何做到这一点?如果有这样的应用程序,那么这个应用程序的名称是什么?
答案1
这是一个相当普遍的答案,因为您的问题似乎也相当广泛。
严格来说,普通用户所能做的事情已经非常有限了。普通用户可以:
- 修改自己主目录中的文件。
- 查看不受限制的系统文件
- 运行大多数应用程序 - 默认情况下仍只修改其主目录中的文件
您最有可能提到的超级用户命令是该sudo
命令(默认情况下)。如果用户属于该sudo
组,他们可以获得提升的权限,但这只应授予系统管理员。
可以通过执行以下操作来进一步限制普通用户可以执行的操作(但这需要大量的手动调整):
- 您可以限制对某些系统文件的读取权限 - 例如,您可以将权限
/var/log/apt
从 0644 更改为 0640,以防止普通用户查看apt
日志。 - 您可以限制特定二进制文件的执行访问 - 例如,您可以将权限
/usr/bin/cat
从 0755 更改为 0750,以阻止普通用户执行该cat
命令。
但是,上述示例需要对要从普通用户中排除的每个文件/目录和每个二进制文件进行手动调整。
因此,您可能应该详细说明您实际想要施加的限制,以看看是否有意义。
答案2
如果不知道你想应用什么类型的限制,很难回答,但有一种东西叫做受限外壳. 根据手动的,受限 shell 中下列操作被禁用:
- 使用内置命令更改目录
cd
。 SHELL
设置或取消设置、PATH
、HISTFILE
、ENV
或变量的值BASH_ENV
。- 指定包含斜杠的命令名称。
- 指定包含斜杠的文件名作为内置命令的参数
.
。 - 指定包含斜杠的文件名作为内置命令的参数
history
。 - 指定包含斜杠的文件名作为
-p
hash 内置命令选项的参数。 - 在启动时从 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 才具有实际意义。