linux sudoers文件的python接口
pysudoers的Python项目详细描述
侏儒
这个库为linux sudoers文件提供了一个Python接口。python sudoers是在BSD 3-Clause license下开源的。
基本知识
pysudoers仍然在python 2.7上运行,python>;=3.4
功能
此库将sudoers文件解析为其组件部分。它还没有100%符合文件的ebnf格式,但它已经达到了要求。目前,脚本从文件中解析出6种不同的行类型:
- 默认值(目前这只是一个字符串。默认设置的片段不会被解析/分离。)
- cmnd_别名
- 主持人别名
- runas_别名
- 用户别名
- 用户规范(我们称之为rules)
由于用户规范是最复杂的,它们很可能是最需要改进的领域。目前,作为解析的一部分,用户规范的以下部分被分离出来:
- 用户列表
- 主机列表
- 命令列表(包含): **标签 **作为符号运行 **命令
安装
您可以使用pip安装pysudoers:
pip install pysudoers
示例
作为初始化Sudoers
对象的一部分,解析sudoers
文件。因此,您可以立即开始使用Sudoers
下的属性。以下示例将从文件中打印出所有不同的“类型”:
frompysudoersimportSudoerssobj=Sudoers(path="tmp/sudoers")fordefaultinsobj.defaults:print(default)forkeyinsobj.host_aliases:print(key)print(sobj.host_aliases[key])forkeyinsobj.cmnd_aliases:print(key)print(sobj.cmnd_aliases[key])forkeyinsobj.runas_aliases:print(key)print(sobj.runas_aliases[key])forkeyinsobj.user_aliases:print(key)print(sobj.user_aliases[key])forruleinsobj.rules:print(rule)
现在,假设您想打印出所有用户规范(规则),但您只想看到每个规则的用户和主机。
frompysudoersimportSudoerssobj=Sudoers(path="tmp/sudoers")forruleinsobj.rules:print("%s | %s"%(",".join(rule["users"]),",".join(rule["hosts"])))
贡献
总是欢迎请求添加功能和修复错误。请查看contribution.md以了解有关捐款的详细信息。
测试
我们试图对代码进行高水平的测试覆盖。因此,在向repo中添加任何内容时,应该编写测试来测试新功能或测试错误修复,这样就不会出现回归。这个库的设置非常简单,可以使用Docker构建一个工作的开发环境。因此,建议您在克隆此存储库的位置安装Docker,以使开发更容易。
要启动开发环境,您应该能够运行dev.sh
脚本。此脚本将使用此存储库中的Dockerfile
来构建一个Docker容器,其中包含使用Pipenv安装的所有开发依赖项。
./dev.sh
第一次运行脚本时,它应该构建Docker图像,然后将您放入容器的shell中。克隆此存储库的目录应该是卷装入到/usr/src
,该目录也应该是当前工作目录。从那里,你可以做你认为合适的改变。只需键入green
即可从/usr/src
目录运行测试,因为green已设置为具有正确的参数。