site 库是 Python 标准库的一部分,主要用于处理 Python 模块的搜索路径和相关配置。
-S 参数 屏蔽模块默认加载
根据官网的提示,site 模块将在初始化时被自动导入。 此自动导入可以通过使用解释器的 -S 选项来屏蔽。
通过有无 -S 参数分别打开两个 python 解释器会话,加载 sys 模块,按照官网所述,在不加 -S 的参数的情况下, site 模块是默认加载的,所以 site 应该是在 sys.modules 所指向的模块集中的,
同理,在加 -S 的参数的情况下,解释器屏蔽site 模块的自动导入,所以此时 site 应该不存在于sys.modules 所指向的模块集中。
通过.pth文件指定配置文件路径
首先创建一个自定义的你想要导入的包的路径,这里为了方便,我直接在 python 相关的 site-packages 文件夹下创建了一个 my_site_packages 文件
这里我的是ubuntu,在部分系统中 site-packages 文件夹可能指的是 dist-packages 文件夹
mkdir /usr/local/lib/python3.8/dist-packages/my_site_packages
在 site-packages 文件夹下创建一个以pth为后缀的文件(这里我创建的是 my_path.pth)
在官方文档中存在上面内容,写的是在.pth文件中主要包含两个部分,一个是python代码部分,会被直接执行,一个是单行字符串,作用是根据字符串所指定的路径导入对应的模块路径(但是不会检测是目录还是文件)
我在我创建的 my_path.pth 文件中写入了 my_site_packages ,这是个相对路径,用于指向 /usr/local/lib/python3.8/dist-packages 同级目录下的 my_site_packages 文件夹。
重新启动 python 解释器,通过 sys.path 查看系统加载的模块路径可以发现 /usr/local/lib/python3.8/dist-packages/my_site_packages 已经被成功加载到系统路径中去了。
两个特殊的模块 sitecustomize 和 usercustomize
sitecustomize 模块
https://docs.python.org/zh-cn/3.13/library/site.html#module-sitecustomize
usercustomize 模块
https://docs.python.org/zh-cn/3.13/library/site.html#module-usercustomize
sitecustomize 和 usercustomize 权限维持
这两个模块本质上还是 python 文件,所以可以直接在文件中加入python 代码,在模块被加载的时候,将会自动执行对应文件中的代码,从而也会执行你所写的 python 代码(但是这两个文件默认只有管理员或者root用户拥有写权限,所以对于用作权限维持是一个比较好的方法)
参考资料:
[1] https://docs.python.org/zh-cn/3.13/library/site.html#module-usercustomize
原文始发于微信公众号(蟹堡安全团队):site 库
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论