Onde devo colocar o arquivo de log ownerless

4

Eu tenho um script que entra e sai usando o sudo. Certos comandos devem ser executados como $ USER e certos comandos devem ser executados como root.

Atualmente, estou executando um loop em segundo plano para manter o sudo ativo para que você execute o script, insira sua senha uma vez, o script sudos os comandos de que precisa (executa o restante como usuário regular) e depois o plano de fundo loop termina quando o script faz. Este script é executado somente em um ambiente muito controlado e não estou preocupado com o acesso do sudo sendo aberto durante o processo.

No entanto, também estou tentando registrar esse script em um lugar que não será limpo depois. Aqui estão as partes pertinentes do script:

#!/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

Não consigo gravar em / var / log porque a última linha do script acontece antes que a função sudo seja invocada, portanto, só tem permissões para o usuário em execução. Eu também não posso escrever para o meu diretório tmp porque fica confuso e eu preciso remover os arquivos lá depois que o script estiver completo. Além disso, o diretório não tem motivos para continuar depois que o trabalho que o script automatiza está completo.

  • Eu tenho uma conta que tem um diretório inicial não afetado, mas o usuário não tem permissão para criar um arquivo nesse diretório inicial.
  • Este script está sendo executado no mac OS, no entanto, eu estou tentando mantê-lo como compatível com outras coisas / futuro / não-mac (aderindo ao bash, tentando manter o posix, inferno, mesmo tentando ficar com Diretrizes do Linus para adicionar ao kernel Linux).
  • Eu preciso do arquivo de log para persistir através de pelo menos uma reinicialização

Onde devo descarregar o arquivo de log para este script que é:

  • Fácil de encontrar (intuitivo)
  • User gravável sem sudo
  • Não grava no usuário diretório inicial
  • Não é excluído na reinicialização

Ou existe uma maneira melhor de fazer isso (posso postar o script inteiro, se necessário)?

    
por SSS 30.08.2018 / 05:51

1 resposta

2

Use permissões básicas de arquivo ou ACL para fazer isso.

Existe, por exemplo, a seção group nas permissões e um comando chamado newgrp para alternar o grupo primário. Considere também o SGID bit usando, por exemplo, nobody como proprietário.

Não tenho certeza se a ACL está disponível no OSX, mas espero que esteja lá. Basta usar setfacl para permitir que user|group acesse e grave no arquivo de registro.

Normalmente, /var/log/ deve ser usado para arquivos de log. Por exemplo. configurar uma pasta em /var/log/yourscripname com as devidas permissões.

    
por 30.08.2018 / 07:26

Tags