我的 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 个有python3
shebang。
答案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