0

商业案例... 我使用的应用程序服务器(Ubuntu/nginx/postgresql/python)将 gzip 压缩的系统日志文件作为根写入 /var/log 我需要将这些日志文件中的数据呈现给用户的浏览器

我的方法 我需要在服务器端做一些搜索和字符串操作,所以我有一个 python 脚本来处理打开和处理,然后返回一个格式良好的 JSON 结果集。然后使用网页中的 ajax 调用 python (cgi) 脚本。

我的问题 当从命令行以 SU 调用脚本时,该脚本运行良好,但是(......显然)我正在使用的文件打开方法( gzip.open(filename) )在网络服务器以用户 www-data 调用时失败。

其他有用信息 相关的应用服务器(合同上而不是物理上)有点像黑匣子 - 我有 SU 访问权限,我可以编写脚本,我可以读取任何内容但我不能更改文件权限,添加额外的 python 库或或弄乱配置。可以使用此日志提取的用户子集也具有 SU 密码,因此可以显示一个登录对话框,我可以将其传递给脚本。

鉴于我的限制,你会怎么做?

4

2 回答 2

1

一种选择是在与 Web 断开连接的后台进程中执行这种有些敏感的“su”工作。

可能通过 cron 运行,此脚本将获取 root 拥有的日志文件,可能将它们更改为 Web 端代码可以轻松处理的格式,例如将它们加载到数据库中,或者只是将它们解压缩并将它们放置到不同的位置稍微宽松的权限。

然后,Web 端代码可以轻松访问数据,而无需跳过“su”圈。

从我的角度来看,这个计划似乎没有违反你的合同规则。Web 服务器配置、权限等保持不变。

于 2013-06-20T07:11:03.707 回答
0

我的两分钱。您应该尝试使用 paramiko,允许您通过 SSH 访问主机(甚至是“localhost”):

import paramiko
ssh = paramiko.SSHClient()
ssh.connect('127.0.0.1', username='jesse', password='lol')

当您有机会要求输入登录名/密码时,这些将是用户查询日志时提供的。然后访问文件只是一件事情或在 SSH 下读取文件。一旦你完成了“敏感”的工作,你就有机会关闭连接。

于 2013-06-20T07:57:28.290 回答