Позвольте пользователю в оболочке chrooted использовать команду sudo

У меня есть пользователь chrootредактор к каталогу, и все работает гладко. Я хочу группу, в которой находится этот пользователь смочь перезапустить единственный процесс, которым этим управляют supervisor, однако, и я не могу выяснить как.

Я добавил эту строку к /etc/sudoers:

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

Я скопировал /usr/bin/sudo к тому же пути в chroot среда. Я также скопировал все его зависимости к соответствующим местам (найденный использованием ldd /usr/bin/sudo).

Я собрал это sudo использует тонну дополнительных файлов в системе, и я скопировал их в chroot среда. Я застреваю теперь, однако, и не могу закончить эту ошибку. Что я пропускаю?

sudo журнал (разрывы строки для удобочитаемости):

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

Действительно ли это - абсолютно глупая идея во-первых?

3
задан 10 November 2016 в 23:38

1 ответ

Вместо того, чтобы пытаться скопировать sudo двоичный файл и его зависимости в chroot, могло бы быть легче иметь сценарий, работающий как корень, который проверяет, когда файл существует и перезапускает процесс.

, Что сценарий мог бы быть чем-то вроде этого:

#!/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

(Это также принимает, пользователь является chrooted к папке в / домой)

, После того как этот сценарий работает как корень, chrooted пользователь должен был бы просто выполнить одну из следующих команд для создания пустого файла (названный restartprocess) в его корневом каталоге (Вы могли добавить ~/ перед именем файла):

touch restartprocess
echo > restartprocess
> restartprocess

И процесс был бы перезапущен.

6
ответ дан 1 December 2019 в 15:23

Другие вопросы по тегам:

Похожие вопросы: