安装 acl

安装 acl

我的 ubuntu 机器中有许多不同的 Python 版本:

/home$ ls /usr/bin/ | grep python
dh_python2
dh_python3
python
python2
python2.7
python3
python3.5
python3.5m
python3m

/home$ which python
/usr/local/bin/python

python --version
Python 3.6.6

我希望某个用户组只能访问“python”(例如 3.6.6)并禁用其他版本的访问。

我认为卸载 python 会导致其他问题。在不破坏任何东西的情况下实现此目标的推荐方法是什么?

答案1

chown将非公开版本发布到特定组,使其仅可由该组执行(chmod 754 ...),并将允许的用户添加到该组。

但请记住,有些系统实用程序依赖于特定的 Python 版本,因此您可能会破坏某些东西:在我的 Ubuntu 16.04 中,/usr/bin包含 106 个带有 shebang 的文件python.*,其中 47 个有python3shebang。

答案2

我希望用户使用新版本并且不要访问旧版本。

不。

Ubuntu 有两个版本的 Python 是有原因的。因为有些实用程序是用 Python2 编写的,而不能跑在 Python 3 中。其他是用 Python 3 编写的,无法在 Python 2 中运行。

此外,Python 2 仍然广泛用于各种任务,并且大多数 Python 代码可能仍然是 Python 2。

Python 2.7 将至少在 2020 年之前得到支持并修复错误。

答案3

我通过使用acl权限做到了这一点。我只是删除了目标用户组对错误 Python 版本的访问权限。就这么简单,没有损坏任何东西(不敢相信有人建议这样做)。

安装 acl

sudo apt-get install acl

重新挂载系统磁盘并支持 acl

编辑fstab

sudo nano /etc/fstab

如果尚未存在,请添加“acl”支持,例如从

UUID=abc-123-456-789 / ext4 defaults 1 1

到:

UUID=abc-123-456-789 / ext4 defaults,acl 1 1

重新挂载根:

sudo mount -o remount /

设置访问权限

为 python3 创建符号链接,以便 python 和 python3 都适用于我的目标用户组:

sudo ln -s /usr/local/bin/python /usr/local/bin/python3

更新 acl 权限,以便从系统 Python 版本中删除用户组“blocked”的访问权限:

setfacl -m g:blocked:- -R /usr/bin/python2
setfacl -m g:blocked:- -R /usr/bin/python3
setfacl -m g:blocked:- -R /usr/bin/python3.5m

相关内容