Qual é uma boa maneira de executar um script de shell como um usuário diferente. Estou usando o Debian etch e sei qual usuário quero personificar.
Se eu estivesse fazendo isso manualmente, faria:
su postgres
./backup_db.sh /tmp/test
exit
Como eu quero automatizar o processo, preciso de uma maneira de executar o backup_db.sh como postgres (herdando o ambiente, etc.)
Obrigado!
-
(ou--login
) junto com--command, -c
na verdade não inicia uma sessão de logon, porque-c
sempre força um shell que não é de logon.- postgress
deve aparecer no final do comando. Na página de manual:When - is used, it must be specified before any username. For portability it is recommended to use it as last option, before any username. The other forms (-l and --login) do not have this restriction.
Se o usuário de destino a executar tiver nologin shelll definido, você poderá usar a opção -s para especificar o shell:
Veja a seguinte pergunta: execute o script como usuário que possui o shell nologin
fonte
Para automatizar isso em uma programação, você pode colocá-lo no crontab do usuário. Porém, os trabalhos em Cron não terão o ambiente completo, mas pode ser melhor colocar todas as variáveis env que você precisa no próprio script de qualquer maneira.
Para editar o crontab do usuário:
fonte
Esta deve ser uma leitura informativa - setuid em scripts de shell
Se você executar su com uma
- username
sequência de argumentos " ", ele criará um shell de login para o usuário fornecer o mesmo ambiente que o usuário. Geralmente, é usado para executar rapidamente seu script com o ambiente doméstico a partir de um login diferente.fonte
Experimente a página de manual su:
su -c script_run_as_postgres.sh - postgres
Por outro lado, você pode usar o sudo para permitir que você execute exatamente esse comando como postgres sem uma senha. Porém, é preciso alguma configuração no seu / etc / sudoers.
fonte
O método "su -c ..." publicado por outras pessoas é bom. Para automação, você pode adicionar o script ao crontab do usuário para o qual precisa executar.
fonte
Se o usuário já tiver uma entrada no sudo e você não souber a senha do superusuário, tente o seguinte: Este reinicia os postgres inicializados em /data/my-db/pgsql/9.6/data
fonte
Você também pode usar:
fonte