商业案例...... 我使用的app服务器(Ubuntu / nginx / postgresql / python)将gzip压缩系统日志文件作为root写入/ var / log 我需要将这些日志文件中的数据提供给用户的浏览器
我的方法 我需要做一些搜索和字符串操作服务器端,所以我有一个python脚本处理打开和处理,然后返回一个格式良好的JSON结果集。然后使用网页中的ajax调用python(cgi)脚本。
我的问题 当从命令行调用SU作为SU时,脚本工作得很好但是(......显然)我正在使用的文件打开方法(gzip.open(filename))在由webserver作为用户www-data调用时失败。
其他有用信息 有关的应用程序服务器(合同而不是物理)有点黑盒子 - 我有SU访问权限,我可以编写脚本,我可以读取任何内容,但我无法更改文件权限,添加额外的python库或或者配置混乱。 可以使用此日志提取的用户子集也具有SU密码,因此可以显示我可以传递给脚本的登录对话框。
鉴于我有限制,你会怎么做呢?
答案 0 :(得分:1)
一种选择是在与网络断开连接的后台进程中执行这种有点敏感的“su”工作。
可能通过cron运行,这个脚本将获取root拥有的日志文件,可能会将它们更改为Web端代码可以轻松处理的格式,例如将它们加载到数据库中,或者只是解压缩它们并将它们放入不同的位置,权限稍微松散。
然后,网络端代码可以轻松访问数据,而无需跳过“su”箍。
从我的角度来看,这个计划似乎并没有违反你的合同规则。 Web服务器配置,权限等保持不变。
答案 1 :(得分:0)
我的两分钱。您应该尝试paramiko,允许您通过SSH访问主机(甚至“localhost”):
import paramiko
ssh = paramiko.SSHClient()
ssh.connect('127.0.0.1', username='jesse', password='lol')
由于您有机会要求输入登录名/密码,因此用户可以查询日志。然后访问文件只是一个问题或在SSH下读取文件。一旦完成“敏感”工作,您就有机会关闭连接。