我应该把无主日志文件放在哪里

我应该把无主日志文件放在哪里

我有一个可以进出使用 sudo 的脚本。某些命令必须以 $USER 身份执行,某些命令必须以 root 身份执行。

目前,我正在后台运行一个循环以保持 sudo 活动状态,以便您执行脚本,输入密码一次,脚本 sudos 它需要的命令(以普通用户身份运行其余部分),然后后台循环在以下情况终止:脚本确实如此。该脚本仅在非常受控的环境中运行,我并不担心 sudo 访问在此过程中保持打开状态。

但是,我还尝试将此脚本记录在一个以后不会被清理的地方。以下是脚本的相关部分:

#!/bin/bash

logFile="path/to/log/file"

main () {
   # some getopts
}

getOptExample () {
   sudoFunction
   # do some other stuff that takes a really long time
   # and bounces back and forth between sudo and not sudo
   cleanUp
}

getOptOtherExample () {
   sudoFunction
   # do some other stuff that takes a really long time
   # and bounces back and forth between sudo and not sudo
   cleanUp
}

sudoFunction () {
    sudo -v
    while true;
    do
        sudo -n true
        sleep 60
        kill -0 "$$" || exit
    done 2>/dev/null &
}

cleanUp () {
    # remove script file
    # remove tmp dir that we're working in
    # reboot computer to apply all changes
}

(main "$@") 2>&1 | tee $logFile

我无法写入 /var/log ,因为脚本的最后一行发生在调用 sudo 函数之前,因此它仅具有执行用户的权限。我也无法写入我的 tmp 目录,因为它变得混乱,我需要在脚本完成后删除其中的文件。此外,在脚本自动化的工作完成后,该目录没有理由继续存在。

  • 我确实有一个帐户,其主目录不受影响,但该用户无权在该主目录中创建文件。
  • 这个脚本正在 mac 操作系统上运行,但是,我试图让它与其他/未来/非 mac 的东西兼容(坚持 bash,试图坚持 posix,地狱,甚至试图坚持 Linus 的指导方针)用于添加到 Linux 内核)。
  • 我需要日志文件在至少一次重新启动后持续存在

我应该在哪里转储该脚本的日志文件,即:

  • 容易找到(直观)
  • 用户无需 sudo 可写
  • 不写入用户的主目录
  • 重启时不会被删除

或者我有更好的方法来做到这一点(如果需要,我可以发布整个庞大的脚本)?

答案1

使用基本文件权限或 ACL 来完成此操作。

例如,有一个group权限部分,以及一个用于newgrp切换主要组的命令。还要考虑SGID使用该位,例如nobody作为所有者。

不确定 ACL 在 OSX 上是否可用,但我希望它在那里。只需用于setfacl允许user|group访问和写入日志文件。

通常/var/log/应用于日志文件。例如,设置一个具有适当权限的文件夹/var/log/yourscripname

相关内容