V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zedpass
V2EX  ›  Linux

无 root 权限时如何在/var/log 下写入日志

  •  
  •   zedpass · 2022-04-19 17:05:56 +08:00 · 3173 次点击
    这是一个创建于 940 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有一个 python 告警脚本部署在多台服务器,现在需要让这个脚本的运行日志写入到 /var/log/zabbix 目录下,但是没有服务器的 root 权限,无法直接在 /var/log/zabbix 下创建日志文件,尝试使用 syslog ,可以无 root 权限写入日志到 /var/log/syslog ,google 了一圈没找到怎么写入到 /var/log 下的指定目录,求解

    cpstar
        1
    cpstar  
       2022-04-19 17:28:17 +08:00
    先 root 创建一个 /var/log/zabbix 然后 chown 给相应用户?
    aaa5838769
        2
    aaa5838769  
       2022-04-19 17:31:23 +08:00
    目录权限修改一下吧。
    adoal
        3
    adoal  
       2022-04-19 18:21:05 +08:00 via iPhone
    你的脚本又不是 zabbix 的一部分,为什么要往 /var/log/zabbix 下写东西?
    dndx
        4
    dndx  
       2022-04-19 18:32:46 +08:00
    syslog
    k9982874
        5
    k9982874  
       2022-04-19 18:48:44 +08:00
    把你的用户加入 zabbix 组,设置目录对 zabbix 组可写
    documentzhangx66
        6
    documentzhangx66  
       2022-04-19 19:16:18 +08:00
    1 楼正解,就拿装 Oracle 的过程来分析一下:

    以 root 用户登录 shell:

    1.添加用户 oracle:
    useradd oracle

    2.添加用户组 oinstall
    /usr/sbin/groupadd oinstall

    3.把 oracle 用户拉到 oinstall 用户组里
    /usr/sbin/usermod -g oinstall -G dba oracle

    4.创建目录,因为当前用户是 root ,所以创建的目录,权限属于 root:
    mkdir -p /opt/oracle/

    5.把目录 /opt/oracle 的所有权限赋值给用户 oracle 与用户组 oinstall
    chown -R oracle.oinstall /opt/oracle
    zedpass
        7
    zedpass  
    OP
       2022-04-19 21:19:38 +08:00
    @adoal 因为是 zabbix 的告警脚本,所以想统一放到 zabbix 目录下
    zedpass
        8
    zedpass  
    OP
       2022-04-19 21:20:42 +08:00
    @dndx syslog 好像只能写入到 /var/log/syslog 下面?没找到自定义路径的方法
    adoal
        9
    adoal  
       2022-04-19 23:01:56 +08:00   ❤️ 4
    @zedpass “zabbix 的告警脚本”是什么意思?是你从 zabbix 外部独立运行这个脚本,还是会在 zabbix 运行时触发?
    前者的话跟 zabbix 没有任何关系,只是你从心理上觉得适合“统一放到 zabbix 目录下”而已。如果是后者,(我不懂 zabbix ,按一般情况推理)那运行时是以 zabbix 身份启动的,那一般不是很建议自己搞日志,应该通过 zabbix 提供的机制……如果没有的话,真是个人畜无害的小白花纯脚本,需要自己来搞日志,那也不应该放到 /var/log/zabbix 下。

    另外,你这个话题提供的 context 不太足,让人没办法判断。你在这个工作里是什么角色?服务器拿不到 root ,那我按一般情况推理来假设,你应该不是这个服务器的“法定”运维管理人……那应该去找对应的人协商应该怎么办。是给你权限,还是由对方部署,还是按对方的要求把日志文件写到指定的地方……总之靠你在 v2 就这么没有 context 地莫名其妙发一帖,别人又不知道你的实际情况,没法给出准确的建议。

    一般来说,“我没有服务器 root 权限”这事不是个纯粹的技术问题。它的本质是“我并不是所在的组织机构里认可的能合规管理这台服务器的人”,是人的职权问题。操作系统里帐号、文件系统的权限,只不过是管理策略落实到技术上的投影。你首要该做的是把职权的障碍打通。
    adoal
        10
    adoal  
       2022-04-19 23:03:31 +08:00
    @zedpass syslog 可以通过 /etc/syslog.conf (或者 rsyslog.conf )来配置,但……这是系统全局配置,肯定又要 root 的。
    raysonx
        11
    raysonx  
       2022-04-20 07:39:40 +08:00   ❤️ 1
    可以按 1 楼的方法先为你的脚本创建一个用户,比如 myapp ,然后创建于一个子目录 /var/log/myapp ,用 chown myapp: -R /var/log/myapp 修改目录权限。
    然而现在更优雅的办法是直接把日志输出到 stderr ,然后用 systemd 等工具启动服务自动管理日志。
    HeyEvan
        12
    HeyEvan  
       2022-04-20 12:57:41 +08:00
    programName="Your Program"

    tee /etc/rsyslog.d/${programName:?'-'}.conf << EOF
    \$template CleanMsgFormat, "%msg%\n"
    \$template ${programName:?'-'}LogPath, "/var/log/zabbix/%programname%-%\$YEAR%-%\$MONTH%-%\$DAY%.log"
    if \$programname == '${programName:?'-'}' then ?${programName:?'-'}LogPath; CleanMsgFormat
    & stop
    EOF

    重启就好了
    systemctl restart rsyslog
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5425 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 08:37 · PVG 16:37 · LAX 00:37 · JFK 03:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.