Executando script como usuário com permissões root

Executando script como usuário com permissões root

Devido a permissões conflitantes e em constante mudança nas unidades montadas (que não podem ser facilmente resolvidas devido à estrutura de desenvolvimento dos programas), existe um script que deve ser executado com permissões de root.

Isso pode ser feito sudo /usr/serverm1/lsintde fornece bons resultados. No entanto, desejamos executar este script automaticamente na inicialização.

A execução do script em nosso usuário principal na inicialização resulta em um core dump devido a permissões insuficientes. Portanto, pensamos que poderíamos configurá-lo no crontab como @reboot /usr/serverm1/lsintd(como sugeridoaqui, no entanto, isso é executado com configurações e configurações do root (que é inexistente).

TLDR: Como podemos executar o script exatamente como seria executado com o comando sudo /usr/serverm1/lsintdna inicialização?

Eu também tentei aplicar chmod u+xao binário, mas isso ainda resultou em um core dump como se fosse executado com permissões regulares (ideia tirada depermitir que um usuário execute um script com permissões de root).

Nota:Admito que este é um problema XY, no entanto, devido à estrutura de desenvolvimento lenta e mal organizada de alguns dos outros serviços em nosso servidor, não temos como resolver os problemas raiz e devemos, em vez disso, solucionar isso.

Responder1

Uma maneira seria criar uma unidade systemd.
Todas as opções possíveis você encontra aqui:www.freedesktop.org/.../systemd.unit.html mas vou apresentar um exemplo simples:

1.Vamos criar um script bash que irá gravar a data e hora de cada inicialização do sistema no arquivo: /root/file
Somente rooto usuário tem permissão para gravar e editar arquivos no /rootdiretório.
Vou mudar o usuário para rootcom sudo su -
Vamos criar um script /root/timelog.she torná-lo executávelchmod +x /root/timelog.sh

   #!/bin/bash

   if ! [ /root/file ]; then touch /root/file; fi 
   echo $(date) >> /root/file

2.Agora precisamos do System Unitarquivo:/etc/systemd/system/timelog.service

[Unit]
Description=timelog.service

[Service]
Type=oneshot
ExecStart=/root/timelog.sh

[Install]
WantedBy=multi-user.target

3. A última tarefa é garantir que ele será iniciado com o sistema:

systemctl enable timelog

informação relacionada