Uma solução proposta baseada em SUID
Você poderia criar o dito script que chama systemctl com o sudo. Faça o script de propriedade de root. Conceda a permissão SUID
para fazer root, ler e executar permissões para o grupo de administradores de banco de dados (dba).
Apenas tome cuidado para não fornecer permissão de gravação para o grupo ou para os outros, pois dessa forma eles podem alterar o script e fazê-lo executar qualquer coisa precedida com o sudo! Verifique também se o script é à prova de bala.
$ cat >> start_database.sh
sudo /usr/bin/systemctl start database@$1
(Ctrl+D)
Este script pode ser melhorado verificando se o argumento é de fato fornecido e imprimir uma mensagem Usage: if if ..., também porque é um script com SUID
que seria apropriado verificar; para evitar a injeção de outros comandos após o argumento. Ou, melhor ainda, permita inserir apenas uma das strings relacionadas ao aplicativo que você mencionou!
Em seguida, você deve garantir que as permissões para o script sejam estritamente as seguintes:
$ sudo chown root:dba start_database.sh
$ sudo chmod u-x,g-w,o-rwx start_database.sh
$ sudo chmod u+s,g+rx start_database.sh
Em seguida, para verificar as permissões corretas:
$ls -la
.
.
.
-rwSr-x--- 1 root dba 35 Aug 2 19:11 start_database.sh
.
.
.
Então, para recapitular:
1. o owner of the script is root
2. o arquivo can be read and executed by the dba group members
3. no-one else will be able to even read
it.
4. SUID
permitirá ao usuário que executa o script tornar-se root contanto que o script seja executado.
5. Então o sudo não irá parar por uma senha.
Em qualquer caso, em um sistema com vários usuários, seja muito cuidadoso com SUID
, pois isso pode deixar espaço para o abuso de permissão.