Permitir que usuário em um shell chrooted use um comando sudo

3

Eu tenho um usuário chroot ed em um diretório e tudo está funcionando normalmente. Eu quero um grupo em que este usuário esteja para poder reiniciar um único processo que está sendo gerenciado por supervisor , no entanto, e não consigo descobrir como.

Adicionei esta linha a /etc/sudoers :

%mygroupname ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart myprocessname

Eu copiei /usr/bin/sudo para o mesmo caminho no ambiente chroot . Eu também copiei todas as suas dependências para os locais relevantes (encontrados usando ldd /usr/bin/sudo ).

Reuni que sudo usa tonelada de arquivos adicionais no sistema e os copiei para o ambiente chroot . Estou preso agora, no entanto, e não consigo superar esse erro. O que estou perdendo?

sudo log (quebras de linha para legibilidade):

Nov 10 20:29:04 sudo[3593] pam_setcred: Failure setting user credentials @
                           sudo_pam_begin_session()
                           /build/sudo-1bDJzQ/sudo-1.8.16/plugins/sudoers/auth/pam.c:274

Nov 10 20:29:04 sudo[3593] pam_open_session: Module is unknown @
                           sudo_pam_begin_session()
                           /build/sudo-1bDJzQ/sudo-1.8.16/plugins/sudoers/auth/pam.c:283

Esta é uma ideia completamente estúpida em primeiro lugar?

    
por vaindil 10.11.2016 / 21:38

1 resposta

6

Em vez de tentar copiar o binário sudo e suas dependências para o chroot, pode ser mais fácil ter um script em execução como root que verifica quando um arquivo existe e reinicia o processo.

Esse script pode ser algo assim:

#!/bin/bash
restartfile="restartprocess"
while :
do
   for user in /home/*
   do
      if [ -f $user/$restartfile ]
      then
         supervisorctl restart myprocessname
         rm $user/$restartfile
      fi
   done
   sleep 5 #Adjust file checking time interval
done

(Isto também assume que o usuário é chrooted para uma pasta em / home)

Quando esse script estiver sendo executado como root, o usuário chrooted só terá que executar um dos seguintes comandos para criar um arquivo vazio (chamado restartprocess ) em seu diretório inicial (você pode adicionar ~/ antes do nome do arquivo ):

touch restartprocess
echo > restartprocess
> restartprocess

E o processo seria reiniciado.

    
por Evan Chen 13.11.2016 / 02:19