Fazendo backup de syslog / dmesg / message para pasta diferente

3

Eu tenho uma atribuição na qual é necessário fazer backup dos arquivos de texto /var/log/dmesg , /var/log/syslog e /var/log/message em uma pasta diferente, como a área de trabalho. Ele também criará um arquivo chamado Execution.txt para registrar a data e a hora sempre que o script bash for executado. Eu tenho esse código que eu escrevi ainda toda vez que eu corro, isso me dá:

./bash.sh: line 7: /var/log/dmesg: Permission denied
./bash.sh: line 8: /var/log/syslog: Permission denied
./bash.sh: line 9: /var/log/message: Permission denied

No entanto, ele cria esses arquivos na área de trabalho, mas a mensagem e os arquivos dmesg estão vazios. Eu queria saber se isso é normal ou se fiz algo errado? Abaixo está o código que escrevi até agora. Qualquer ajuda seria apreciada. Obrigado!

#!/bin/bash

cat /var/log/dmesg l nl >> /home/administrator/Desktop/dmesg
cat /var/log/syslog l nl >> /home/administrator/Desktop/syslog
cat /var/log/message l nl >> /home/administrator/Desktop/message

echo ' ' > /var/log/dmesg
echo ' ' > /var/log/syslog
echo ' ' > /var/log/message

date >> /home/administrator/Desktop/execution.txt
    
por Zenkarus 25.03.2014 / 14:21

3 respostas

8

Eu suspeito que você simplesmente não tenha acesso a eles pelo usuário que está executando este script. Veja as posses do arquivo:

$ ls -l /var/log/{dmesg,syslog,message}
ls: cannot access /var/log/message: No such file or directory
-rw-r----- 1 root   adm 86384 Mar  9 11:12 /var/log/dmesg
-rw-r----- 1 syslog adm 18553 Mar 25 13:25 /var/log/syslog

Você pode ler esses arquivos se tiver um usuário no grupo adm , mas não conseguir escrever. O primeiro usuário em um sistema normalmente é um membro do grupo adm , mas se as suas ~/Desktop cópias estiverem vazias, sugiro que seu usuário não seja (verifique com o comando groups ). Você tem algumas opções.

  • Você pode consultar adicionando permissões de ACL ao seu usuário. Eles são separados das permissões padrão e adicionar acesso explícito de leitura / gravação ao usuário não afeta nada. O que é legal.

    sudo apt-get install acl
    sudo setfacl -m u:$USER:rw /var/log/{dmesg,syslog,message}
    

    Isso pode precisar de uma reinicialização. Você pode até precisar alterar seu fstab . Eu não tenho, mas as ACLs parecem funcionar bem aqui, então estou assumindo que não é mais necessário.

  • Você pode alterar as permissões do unix no arquivo. A maneira mais segura de fazer isso seria adicionar o usuário ao grupo adm e ativar a gravação do grupo nesses arquivos:

    sudo usermod -a -G adm $USER
    sudo chmod g+w /var/log/{dmesg,syslog,message}
    

    Você precisará sair e entrar novamente para ver o efeito.

  • Ou você pode deixar qualquer um ler e gravar esses arquivos. Isso pode ser um risco de segurança, então eu não estou dando código ... Mas honestamente, enquanto possível, você provavelmente não quer isso.

  • A outra opção é simplesmente executar o script como root com sudo ./scriptname . A desvantagem disso é que qualquer coisa que esse script faça será feita como root. Isso inclui a criação de novos arquivos (que >> pode se o arquivo já não existir) e isso pode ser um problema para o usuário.

E se isso não é curiosidade acadêmica e você está realmente tentando fazer algum trabalho da melhor maneira possível, existem ferramentas que fazem essas coisas para você, mas melhor. Você realmente quer olhar para logrotate . Este tutorial do Oceano Digital é o mais limpo que posso encontrar rapidamente.

    
por Oli 25.03.2014 / 14:29
4

Você provavelmente não tem permissões de leitura para /var/log/{dmesg,syslog,message} . Assim, mesmo que você tenha os arquivos criados no seu destkop, eles estarão vazios, já que nada foi lido, mas uma tentativa de gravação foi feita em um arquivo (aquele criado em sua área de trabalho).

Então você tem duas opções:

  1. Obtenha permissões de leitura para /var/log/{dmesg,syslog,message} da seguinte forma:

    sudo usermod -a -G adm $USER #adm is the group name which owns /var/log/syslog
    
  2. Use o sudo para leitura (mais fácil para leitura única):

    sudo cat /var/log/dmesg >> /home/administrator/Desktop/dmesg
    
por jobin 25.03.2014 / 14:37
4

Seu problema são as seguintes linhas do seu script:

echo ' ' > /var/log/dmesg
echo ' ' > /var/log/syslog
echo ' ' > /var/log/message
Não é de surpreender, uma vez que são precisamente as linhas 7, 8 e 9 que são as que se queixam de bash.

Esses comandos estão tentando excluir o conteúdo desses três arquivos de log em /var/log , mas como eles são de propriedade do root e você não tem acesso de gravação a eles, você está recebendo um erro. Bom ! Eu estou supondo que você não quer limpar seus logs do sistema assim.

Lembre-se que > sobrescreve o conteúdo de um arquivo, você precisa de >> para anexar a ele. Em qualquer caso, você nunca deve modificar esses arquivos, eles são usados pelo sistema e não há absolutamente nenhuma razão pela qual você queira substituí-los. Mesmo se você fizer isso, há maneiras muito mais simples de fazer isso, como rm file ou simplesmente > file .

Uma maneira mais limpa de fazer tudo isso seria usar logrotate .

    
por terdon 25.03.2014 / 15:05

Tags