1

我正在使用 syslog-ng 用树莓派编写 cisco pix 防火墙的日志。日志每天轮换。轮换后,最后一个文件被传递给 python 脚本,该脚本搜索日志文件中的所有 IP 地址,然后根据主机名(如果可能)查找并用主机名替换 IP 地址。结果行被写入一个单独的日志文件。到目前为止,一切都很好。

我遇到的问题是,由 python 脚本生成的文件具有另一个 GUID 作为 syslog-ng 生成的文件。

这是ls -l 的输出为*

-rw-r--r-- 1 root root  82799344 Jul  3 03:45 asa_ip_to_hostnames.log
-rw-r----- 1 root adm  200182806 Jul  3 14:05 asa.log
-rw-r----- 1 root adm  135410305 Jul  3 02:25 asa.log.1
-rw-r----- 1 root adm      46145 Jul  2 13:52 asa.log.2.gz
-rw-r----- 1 root adm      36942 Jul  2 13:50 asa.log.3.gz
-rw-r----- 1 root adm      30969 Jul  2 13:49 asa.log.4.gz
-rw-r----- 1 root adm      55544 Jul  2 13:48 asa.log.5.gz
-rw-r----- 1 root adm      74464 Jul  2 13:46 asa.log.6.gz
-rw-r--r-- 1 root root 153725702 Jul  3 03:45 asa_w_hostnames.log
-rw-r--r-- 1 root root    639542 Jul  2 13:53 asa_w_hostnames.log.1
-rw-r--r-- 1 root root     38303 Jul  2 13:51 asa_w_hostnames.log.2.gz
-rw-r--r-- 1 root root     31992 Jul  2 13:49 asa_w_hostnames.log.3.gz
-rw-r--r-- 1 root root     57687 Jul  2 13:48 asa_w_hostnames.log.4.gz
  • asa.log 由 syslog-ng 生成
  • asa_w_hostnames.log 由我的 python 脚本生成(通过 logrotate 执行)
  • asa_ip_to_hostnames.log 是 python 脚本的文本输出

如您所见,通过 logrotate 创建的文件关联到 root/root,而 asa_log 文件关联到 adm/root。

我想要与 adm/root 关联的所有文件,以便我可以将只读 samba 用户添加到组 adm,以便可以在 Windows 系统上复制日志文件。我不想将 samba 用户添加到 adm 和 root。

有什么建议么?

4

2 回答 2

1
import os
import pwd

admdetails = pwd.getpwnam('adm')
rootdetails = pwd.getpwnam('root')

for fname in ['name1', ,,,]:
   os.chown(fname, rootdetails.pw_uid, admdetails.pr_gid)

或者类似的东西应该适应工作。注意 您可能需要以 root 或 sudo 身份运行,因为不鼓励将所有权从 root 更改为 root 。

于 2013-07-03T12:54:53.440 回答
1

史蒂夫巴恩斯的答案是完美的,它只需要一点点调整。这是最终的代码:

import os, pwd, grp, stat

grpdetails = grp.getgrnam('adm')
rootdetails = pwd.getpwnam('root')

os.chown(filename_out, rootdetails.pw_uid, grpdetails.gr_gid)
os.chmod(filename_out, stat.S_IREAD | stat.S_IWRITE | stat.S_IRGRP)
于 2013-07-04T06:08:34.043 回答