adicionando aliases para o novo usuário após o sudo'ing interativo a partir de um script

1

Eu estava seguindo as instruções em link para criar meu próprio script bash. É o seguinte:

sudo -u otheruser -i
alias cd1="cd /dir/one/"
alias cd2="cd /dir/two/"

Eu quero que esses aliases estejam disponíveis para otheruser . Meu objetivo é executá-lo como um executável, mas para o teste eu estou sourcing (para evitar o problema em ) como source ./myscript .

Mesmo com isso, o sudo funciona, mas nenhum dos aliases a seguir está disponível (por otheruser ). Você acha que os aliases estão sendo aplicados ao usuário que chamou este comando e não ao novo usuário? Ou existe alguma regra que os comandos em um script são ignorados após o sudo para outro usuário?

    
por Stephen 02.04.2018 / 18:37

1 resposta

1

Acho que a razão pela qual isso não funciona é que os dois comandos alias são executados após a sessão bash iniciada por sudo finishes. Você poderia faça um teste - crie o script, quando a nova sessão começar, pressione Ctrl - d para sair e depois no tipo de shell original:

$ type cd1
cd1 is aliased to 'cd /dir/one/'
$ type cd2
cd2 is aliased to 'cd /dir/two/'

Posso conseguir o que você quer com o script expect , mas não sou especialista sobre isso tão crítica é bem vinda:

#!/usr/bin/expect -f

spawn sudo -u otheruser -i
send "alias cd1='cd /dir/one/'"
send "\n"
send "alias cd2='cd /dir/two/'"
send "\n"

interact

Certifique-se de ter expect instalado antes de executar este roteiro.

Você pode instalar expect e tcl (o que é necessário) usando o gerenciador de pacotes do seu sistema. Se você precisar instalá-lo manualmente, consulte as instruções para Esperar no link . Os arquivos README / INSTALL para o Expect apontam você em alguns locais para obter o Tcl, mas estes parecem desatualizados. No entanto, você pode obter uma cópia do Tcl do ActiveState.

    
por 02.04.2018 / 19:05

Tags