Como se inicia um shell não-login a partir de um shell de login?

3

Eu tenho um script projetado para configurar meu sistema após uma nova instalação do sistema operacional. A maior parte do que ele requer requer permissões de superusuário, mas alguns comandos criam, sob o diretório base, arquivos, como um arquivo de bloqueio, para os quais o proprietário do diretório base deve ter permissão de gravação. Para evitar arquivos para o superusuário que está sendo criado em meu próprio diretório pessoal, em vez de /root , exijo que o script seja executado com sudo -i e use sudo -iu "$SUDO_USER" para executar comandos como eu.

Isso funciona muito bem na maior parte do tempo, mas agora preciso executar um comando como se eu tivesse executado com sudo , NÃO sudo -i . Como devo fazer isso?

Uma solução ruim seria algo como o seguinte:

sudo -iu "$SUDO_USER" << LF
sudo [command]
LF

O problema acima é que sudo [command] pode solicitar uma senha e esse script não deve ser interativo.

    
por Matthew 18.12.2017 / 21:04

1 resposta

0

Como sugerido pelo @ Xen2050, eu temporariamente me dei permissão para executar o comando como superusuário sem autenticar.

Eu faço isso adicionando um arquivo no diretório /etc/sudoers.d com a diretiva NOPASSWD . Para ser seguro, eu uso visudo , então eu tenho que usar um script ed em um aqui-doc em vez de um aqui-doc diretamente. Depois de executar o comando, eu apago o arquivo.

#!/bin/bash

EDITOR=ed visudo -f /etc/sudoers.d/[file] << LF
a
$SUDO_USER $(hostname) = NOPASSWD: [command]
.
wq
LF
sudo -iu "$SUDO_USER" bash << LF
sudo [command]
LF
rm /etc/sudoers.d/[file]

Observe que [command] no script ed deve incluir o caminho completo do comando. Eu nomeei [file] após o comando. No meu caso, eu estava executando o instalador do TeX Live, install-tl , então escolhi isso como o nome do arquivo.

    
por 19.12.2017 / 05:11

Tags