O /etc/rc.local é um bom lugar para executar um script antes que qualquer usuário (normal) possa fazer o login?

5

Eu tenho um servidor Ubuntu 14.04 que, durante a inicialização, deve sincronizar algumas coisas na rede antes que qualquer usuário normal possa efetuar login (através do ssh).

Eu queria saber se chamar o script de /etc/rc.local é o lugar certo?

Olhando o comentário deste script:

This script is executed at the end of each multiuser runlevel.

Parece que ele é chamado depois que o sistema está pronto para aceitar logins de usuários.

Isto é como eu entendo o "no final de cada runlevel multiusuário".

Eu vi a resposta aqui: Propósito e Uso Típico de /etc/rc.local , ainda achei um pouco ambíguo.

UPDATE

Um pouco mais de contexto é apropriado: é um processo automatizado, em que o usuário é, na verdade, muitas máquinas que fazem o polling do servidor para efetuar login ...

    
por cecemel 08.05.2015 / 13:59

4 respostas

4

Normalmente, /etc/rc.local é a opção válida, mas também depende da quantidade de trabalho envolvido na "sincronização de algumas coisas" e da importância dos usuários não efetuarem login antes que essa ação seja concluída.

Se você quiser ter certeza de que a sincronização foi concluída antes do login dos usuários, considere uma das duas opções "nologin".

  1. Escreva um script que defina o shell de login (de um grupo específico usuários) para /usr/sbin/nologin antes de sincronizá-lo e restaurá-lo após a sincronização.

  2. Crie um arquivo /etc/nologin vazio antes de sincronizar usando touch /etc/nologin e remova-o após a sincronização. Note que esta opção pode facilmente bloquear você se você desabilitou o login como root sobre SSH, já que evita que todas as contas não-root façam o login.

por 08.05.2015 / 14:23
3

Para o caso que você descreve, chamar seu script de sincronização de /etc/rc.local é uma solução válida. É com o que provavelmente também irei, embora haja, sem dúvida, outras soluções que outras pessoas poderiam inventar.

Ele é executado após todos os scripts de inicialização rc "incorporados", mas antes que o prompt de login seja apresentado no console. Lembre-se, no entanto, que os usuários poderão efetuar login no sistema via SSH antes que rc.local seja executado. Se isso for uma preocupação, você pode colocar seu script na sequência de inicialização depois que a rede tiver sido iniciada, mas antes que o SSH seja iniciado. A razão pela qual eu ainda usaria rc.local e não me preocuparia em mover sua localização é que o tempo entre o daemon SSH começando e os usuários percebendo que o sistema está disponível é muito mais longo do que o sistema leva para executar e executar o% scriptrc.local.

    
por 08.05.2015 / 14:12
2

It looks like it is called after the system is ready to accepting logins from users. This is how I understand the "at the end of each multiuser runlevel".

Não, /etc/rc.local é executado quando o sistema é inicializado. (Quando o login do usuário usando ssh ele definirá o ambiente e executará scripts de /etc/profile ~/.bashrc , leia esta página para mais informações.

I was wondering whether calling the script from /etc/rc.local is the right place?

Sim, você pode

    
por 08.05.2015 / 14:12
1

Eu pessoalmente escolheria a solução do @John, mas você também pode definir a sequência de inicialização para que, no início (perto dos links simbólicos S01), ele execute este comando:

echo "Please try to log in later" > /etc/nologin

E, em seguida, coloque em /etc/rc.local :

/root/yourscript.sh
rm -f /etc/nologin

A presença do arquivo /etc/nologin impede que usuários não-root efetuem login, seja a partir do SSH ou do console. Isso garantirá que os usuários não efetuem login antes do término do seu script.

    
por 08.05.2015 / 14:21