sudo para executar o comando como usuário diferente

1

Estou tentando configurar um script que será executado como um usuário "maint". O script é basicamente um menu que permite ao pessoal de manutenção fazer coisas diferentes no servidor. No entanto, alguns dos scripts que o menu maint executará devem ser executados como usuários específicos para funcionar corretamente.

minha pergunta é como executar esses comandos com sudo e não exigir senha. Lembre-se, os scripts que são executados no menu devem ser executados como um usuário diferente. Aqui está uma demonstração do que tentei e estou tentando realizar.

arquivo "sudoTest" vive em / home / user1 / arquivo "testSudo" vive em / home / maint

"sudoTest" parece com isso atualmente:

#!/bin/bash

echo "I am in sudoTest"
whoami

"testSudo" parece com isso atualmente:

#!/bin/bash

sudo -u user1 /home/user1/sudoTest

Meu objetivo é basicamente que quando eu estou logado como usuário maint e execute "testSudo", a saída do comando whoami será "user1"

Isto é o que o arquivo parece atualmente quando eu uso o comando visudo

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
maint   ALL= NOPASSWD: /home/user1/*

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d        

A outra coisa estranha é que quando eu faço isso na linha de comando:

sudo /home/user1/sudoTest

Ele permite que eu execute o script e receba a saída:

Estou no sudoTest raiz

mas quando eu tento executar o "testSudo" ele pede senha, e quando eu entro eu volto:

Desculpe, o usuário maint não tem permissão para executar '/ home / user1 / testSudo' como user1

Obrigado por qualquer ajuda!

    
por Dan 27.03.2013 / 17:38

2 respostas

2

Eu encontrei o problema.

O problema foi que o arquivo sudoers estava faltando um pedaço

# User privilege specification
root    ALL=(ALL:ALL) ALL
maint   ALL= NOPASSWD: /home/user1/*

deve ser

# User privilege specification
root    ALL=(ALL:ALL) ALL
maint   ALL=(ALL) NOPASSWD: /home/user1/*
    
por 27.03.2013 / 17:45
0

Acredito que você esteja executando o script como o usuário que o invocou, não como o usuário sudo. Aqui está um exceto a partir das páginas do man sudo.

 -i [command]
                   The -i (simulate initial login) option runs the shell
                   specified in the passwd(5) entry of the target user as a
                   login shell.  This means that login-specific resource files
                   such as .profile or .login will be read by the shell.  If a
                   command is specified, it is passed to the shell for
                   execution.  Otherwise, an interactive shell is executed.
                   sudo attempts to change to that user's home directory
                   before running the shell.  It also initializes the
                   environment, leaving DISPLAY and TERM unchanged, setting
                   HOME, MAIL, SHELL, USER, LOGNAME, and PATH, as well as the
                   contents of /etc/environment on Linux and AIX systems.  All
                   other environment variables are removed.
    
por 27.03.2013 / 17:45