redefine $ SHELL para seu valor padrão [duplicado]

1

I read the answers on those questions (this && this), neither of them work for me!

% uname --operating-system --kernel-name --kernel-version --kernel-release 
Linux 4.9.6-200.fc25.x86_64 #1 SMP Thu Jan 26 10:17:45 UTC 2017 GNU/Linux

Eu faço o download / instalação do terminal st ( terminal simples ), e gostaria de configurá-lo como meu principal emulador de terminal, mas Eu cometi um erro enorme , que está executando este comando como root: % su -c 'chsh -s /usr/local/bin/st' .

Agora, sempre que eu quiser fazer login / executar um comando como root, uma mensagem será impressa: Can't open display . Eu tentei os seguintes comandos (como mostrado abaixo), mas nenhum deles funciona ..

% env -i bash
% su
Password:
Can't open display
% su -c 'env -i bash'
Password:
Can't open display
% su -c 'chsh -s /usr/bin/bash'
Password:
Can't open display
% su -s bash
Password: 
su: using restricted shell /usr/local/bin/st
Can't open display
% su
Password:
Couldn't read from shell: Input/output error
child finished with error '256'
% 

UPDATE: Eu tentei fazer como explicado na resposta proposta

  1. No prompt do gerenciador de partida, navegue até a entrada comum da qual você inicializa.
  2. Em vez de pressionar Enter, pressione e para editar primeiro os parâmetros da linha de comando do kernel
  3. No editor que é aberto, use as teclas de seta para encontrar a linha que começa com o linux, vá até o fim e anexe o init = / bin / sh a ele. Isso substituirá seu sistema init temporariamente pelo shell do seu sistema e, uma vez que o init é iniciado pelo root, este será um shell de root.
  4. Pressione CTRL + X para inicializar a entrada modificada
  5. execute o chsh novamente com os parâmetros corretos

Mas quando fiz o passo 4, fui confrontado com este ecrã!

    
por 0x0584 03.02.2017 / 12:43

1 resposta

0

I did a huge mistake

Você fez de fato. A maneira de recuperar isso é encontrar uma maneira de executar um comando como superusuário, mas sem usar o shell de login configurado do superusuário.

Os modos de resgate e emergência não conseguirão isso, a menos que você tenha a sorte de ter /usr em um volume de disco separado - ironicamente o oposto da tendência dos últimos 30 anos. Se o volume do disco contendo /usr/local/bin/st não for a raiz, o arquivo não será executável. Em tal situação, um login de emergência com os gostos de sulogin ou emergency-login tentará para voltar a um nome de shell com fio.

Outra maneira de conseguir isso é com a opção -s para sudo , que executa o shell fornecido pela variável de ambiente SHELL como o shell interativo, em vez do shell fornecido no banco de dados de contas do usuário para o superusuário . (Contraste a opção -i .)

doas -s da mesma forma emprega o shell especificado pela variável de ambiente SHELL .

Alguns comandos su dos sistemas operacionais também podem fazer isso com uma opção --shell . Isso não é universal, no entanto. Além disso, ele é ignorado, como você encontrou, se o shell do superusuário no banco de dados da conta não estiver na lista de shells autorizados ( /etc/shells ).

    
por 03.02.2017 / 17:04