Não é possível inicializar no modo de usuário único

1

Eu fiz o meu login (script ruim /etc/profile.d) e não consigo acessar o SSH no meu sistema ou inicializá-lo em um único. Eu adiciono "single" ao final dos parâmetros de inicialização do kernel e ele apenas continua inicializando normalmente. Eu também tentei "s" sem sucesso. No entanto, "emergência" funciona. Estou executando o RHEL 6.3. Alguma idéia do que estou fazendo errado?

    
por majikman 25.04.2014 / 23:34

2 respostas

2

Suspeito que algo em /root/.bashrc (ou algo sendo source 'por esse arquivo) esteja fazendo com que o bash saia imediatamente, resultando na inicialização da máquina para o nível de execução padrão. Para mais detalhes sobre essa suspeita, veja o abaixo.

Quaisquer argumentos do kernel que não são reconhecidos pelo kernel são passados para o init. De acordo com o bootparam (7) :

Any remaining arguments that were not picked up by the kernel and were not interpreted as environment variables are then passed onto process one, which is usually the init(1) program. The most common argument that is passed to the init process is the word 'single' which instructs it to boot the computer in single user mode, and not launch all the usual daemons. Check the manual page for the version of init(1) installed on your system to see what arguments it accepts.

Como o RHEL 6 é executado, você provavelmente desejará inspecionar os arquivos de configuração iniciantes relacionados ao modo de usuário único:

  • /etc/init/rc.conf
  • /etc/init/rcS.conf
  • /etc/init/rcS-sulogin.conf
  • /etc/init/rcS-emergency.conf

No sistema Centos 6.5 que tenho localmente, /etc/init/rcS-sulogin.conf tem as seguintes estrofes:

script
        . /etc/sysconfig/init
        plymouth --hide-splash || true
        [ -z "$SINGLE" ] && SINGLE=/sbin/sushell
        exec $SINGLE
end script
post-stop script
        if [ "$RUNLEVEL" = "S" ]; then
                [ -f /etc/inittab ] && runlevel=$(/bin/awk -F ':' '$3 == "initdefault" && $1 !~ "^#" { print $2 }' /etc/inittab)
                [ -z "$runlevel" ] && runlevel="3"
                exec telinit $runlevel
        fi
end script

O script post-stop leva o sistema ao nível de execução padrão depois que o shell iniciado por sushell foi finalizado. /sbin/sushell é um script simples que inicia o valor de $ SUSHELL ou bash. Por padrão, o bash que é iniciado é um shell interativo, não-login, o que significa que ele lê ~/.bashrc na inicialização.

Se este arquivo inadvertidamente terminasse o shell, o sistema continuaria a inicialização para o nível de execução padrão.

A palavra-chave de emergência provavelmente funciona porque invoca /sbin/sulogin , que (de acordo com a página man) retorna para /bin/sh se a tentativa de executar o shell do usuário root falhar.

Note que, para os mais terríveis desastres, você pode dizer ao kernel para inicializar um shell diretamente anexando init=/bin/sh . Você será inicializado em um shell executando como root. Se você precisar fazer alterações no sistema de arquivos, também desejará alterar o argumento ro boot para rw para que seu dispositivo raiz seja montado para gravações ou remonte o dispositivo uma vez inicializado.

    
por 22.09.2014 / 11:17
0

Se você tiver acesso físico à máquina, é relativamente fácil. Inicialize um CD de recuperação no shell raiz e monte e repare o dano nos arquivos. Quando estiver pronto, você deve ser capaz de reiniciar sem problemas ..... a menos que haja algo mais acontecendo que você não tenha mencionado ...: -)

    
por 26.04.2014 / 07:25

Tags