![为什么 SO 上的 setgid 权限会导致失败?](https://linux22.com/image/79601/%E4%B8%BA%E4%BB%80%E4%B9%88%20SO%20%E4%B8%8A%E7%9A%84%20setgid%20%E6%9D%83%E9%99%90%E4%BC%9A%E5%AF%BC%E8%87%B4%E5%A4%B1%E8%B4%A5%EF%BC%9F.png)
当我在服务器上加载特定版本的 Python 时,出现以下错误:
python:加载共享库时出错:libpython2.7.so.1.0:无法打开共享对象文件:没有这样的文件或目录
ldd 显示该文件可用,唯一令人惊讶的是权限,如下所示:
-rwxrwsr-x
来自S我得出的结论是,可能是偶然,在该文件上调用了 setgid。但我也是拥有该文件的组的成员。在这种情况下,我是否应该能够让 Python 运行,即使非组成员不能?
Python 正在由环境模块加载,该模块执行以下操作:
prepend-path PATH /path/to/python/2.7.9/bin
prepend-path MANPATH /path/to/python/2.7.9/share/man
prepend-path PYTHONPATH /path/to/python/2.7.9/lib/python2.7/site-packages:/path/to/spss/22/Python/lib/python2.7/site-packages
prepend-path LD_LIBRARY_PATH /path/to/python/2.7.9/lib
答案1
删除 S 权限后,我能够正确加载库。我们最终注意到的区别是,能够加载库的用户实际上将其 gid 设置为与库的 gid 相同的值。仅仅成为库被授予权限的组的成员是不够的 - 用户必须将其设置为其主要组。