我需要允许特定用户运行特定的 python 脚本。此用户可以访问受限的 bash,目前仅允许命令clear
。
通常,脚本将通过运行python3 script_name.py
。在这种情况下,目标是最大限度地限制用户的能力。因此,我不想让python3
用户访问命令。
有没有办法将python3
命令的使用限制为特定用户python3 script_name.py
,或者有没有办法自动和暂时将用户切换到授权用户,运行脚本,然后切换回原始用户?
非常感谢!
编辑:
在搜索有关受限 shell 的功能及其配置的更多信息时,我发现这一页,其中写道:
当执行被发现是 shell 脚本的命令时(参见 Shell 脚本),rbash 会关闭为执行该脚本而生成的 shell 中的所有限制。
这是否意味着在用户的基本文件夹中创建一个.sh
文件并向python3 script_name.py
该文件添加执行权限应该可以解决我的问题?毕竟它是一个 shell 脚本,因此应该不受限制。
更新:虽然脚本没有解决我的问题,@muru向我指出了一个实用的解决方法。
我在用户的命令位置创建了一个“launcher.py”可执行文件,其中仅包含以下内容:
#! /usr/bin/python3
import sys
sys.path.insert([1], <path_to_actual_script>)
import <actual_script>
这使得用户launcher.py
无需直接访问程序即可运行该命令。
答案1
理论上这是可能的。你必须:
- 在 Ubuntu 中安装 firejail - sandbox。它适用于 deb 和 appimage 包中提供的应用程序;
- 为 bash 创建自定义 firejail 配置文件(仅限于使用
sudo
、python3
和script_name.py
); - 创建脚本
restricted_bash.sh
- 它必须使用自定义 bash 配置文件在 firejail 中启动 bash; - 将用户shell更改
/etc/passwd
为restricted_bash.sh
; - 修改
script_name.py
:添加#!/usr/bin/python3
为第一行。
注意:这尚未经过测试!
注意:缺点是您必须授予用户访问权限python3
- 这是正常的,因为 firejail 限制是命运的,可能无法根据需要升级(例如当您运行时script_name.py
)。
注意:bash 有许多内置命令,您无法通过这种方式禁用它们。为了删除它们,您必须使用其他 shell,甚至创建自定义受限 shell。