linux sudoers文件的python接口

pysudoers的Python项目详细描述


侏儒

这个库为linux sudoers文件提供了一个Python接口。python sudoers是在BSD 3-Clause license下开源的。

CircleCIcodecov

基本知识

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已设置为具有正确的参数。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
字典java cassandra对象映射注释   java定制Solr TokenFilter lemmatizer   字符串从Java文件中读取windows文件名   java如何在Windows上设置StanfordCorenlp服务器以返回文本   java axis2“意外的子元素值”   java使用POI HSSF获取错误   多线程Java等待计时器线程完成   java ForkJoinPool BuffereImage处理风格   从java代码运行Python脚本   java将字节[]转换为短[],使每个短元素包含13位数据   java如何为swing jframe应用程序将代码划分为类   java使用okhttp更改baseurl   java AlertDialog。建设者setView导致堆栈溢出错误   java如何在特定的radius 安卓 studio中接收地址列表?