允许受限 bash 用户运行特定的 python 脚本

允许受限 bash 用户运行特定的 python 脚本

我需要允许特定用户运行特定的 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

理论上这是可能的。你必须:

  1. 在 Ubuntu 中安装 firejail - sandbox。它适用于 deb 和 appimage 包中提供的应用程序;
  2. 为 bash 创建自定义 firejail 配置文件(仅限于使用sudopython3script_name.py);
  3. 创建脚本restricted_bash.sh- 它必须使用自定义 bash 配置文件在 firejail 中启动 bash;
  4. 将用户shell更改/etc/passwdrestricted_bash.sh
  5. 修改script_name.py:添加#!/usr/bin/python3为第一行。

注意:这尚未经过测试!

注意:缺点是您必须授予用户访问权限python3- 这是正常的,因为 firejail 限制是命运的,可能无法根据需要升级(例如当您运行时script_name.py)。

注意:bash 有许多内置命令,您无法通过这种方式禁用它们。为了删除它们,您必须使用其他 shell,甚至创建自定义受限 shell。

相关内容