Como funciona o comando “su”?

2

Eu estou tentando escrever meu próprio shell sem olhar para qualquer código-fonte bash, mas há uma coisa que não consigo fazer. Sempre que eu executo "su" a partir de qualquer shell customizado incluindo o meu, ele pega minha senha e me leva ao prompt do bash com o hash indicando o poder da raiz. Eu digitei o código para garantir que meu shell forneça o hash em si quando ele tem poder de root, mas isso é somente quando executado como root, pois sempre que tento tornar-se root com su dentro de meu shell, ele me leva a bash. Existe alguma maneira de fazer minha própria provisão su, talvez até meu executável su personalizado que apenas pede a senha de root e lhe dá os privilégios, enviando de volta para o shell que você estava usando, sem levá-lo para bater? Muito obrigado.

    
por GNU Geek 24.07.2017 / 20:33

2 respostas

5

A página man do su é bem clara neste ponto:

The command will be executed by the shell specified in /etc/passwd for the target user.

e

-s, --shell SHELL The shell that will be invoked.

-m, -p, --preserve-environment Preserve the current environment [...]

O motivo pelo qual você acessa um bash shell depois de chamar su - é que esse é o shell padrão para o root. Eu posso ver três maneiras de substituir esse shell padrão:

  1. Chame su -s /path/to/your/shell em vez de apenas su
  2. Verifique se export SHELL=/path/to/yourshell foi definido e, em seguida, ligue para su -m
  3. Alterar o shell padrão da raiz em /etc/passwd (não recomendado)
por 24.07.2017 / 20:44
2

Is there any way to make my own su provision, maybe even my custom su executable which just asks for the root password and gives you the privileges, sending you back to the shell you were using without taking you to bash? Thanks a lot.

Não. O mecanismo de elevação de privilégios no Unix envolve a execução de um novo processo. O executável su tem um bit de permissão especial, chamado de "set-user-ID bit" ou "setuid", que faz com que ele seja executado de forma que o ID do usuário efetivo do processo seja o do proprietário desse arquivo executável .

Se su autenticar com êxito, ele executará um novo shell.

A maneira usual de ter poderes de superusuário permanecendo no mesmo shell é executar comandos individuais no modo privilegiado com o utilitário sudo .

Se você costuma administrar alguma máquina, pode configurar um ambiente personalizado para seu uso como usuário root. Quando você se tornar root, basta executar o shell que você gosta e configurar seus arquivos de configuração no diretório inicial do root.

$ su
password:
root # exec /path/to/favorite/shell

Se você é o chefe, você poderia fazer o shell de login dessa raiz do shell.

    
por 24.07.2017 / 20:57

Tags