Есть ли что-то вроде событий в Ubuntu?

Я хотел бы знать, есть ли в Ubuntu что-то вроде событий. Мне нужно запустить задание Дженкинса, но у Дженкинса нет привилегий sudo, и я не хочу давать его ему. Но задание должно выполнить некоторые действия, требующие привилегий sudo. Решением может быть запуск события, которое будет прослушиваться от имени пользователя root, и это событие запустит код с привилегиями sudo. Может быть, меня все еще смущают привилегии, но, думаю, это может быть очень кстати. Или что-то вроде общедоступного пользовательского интерфейса root, который будет доступен для других пользователей, но будет работать как пользователь root. Как

root->doSomethingAsRoot()

Надеюсь, вы понимаете, чего я хочу достичь. Спасибо за помощь.

PS Этот вопрос связан с этой проблемой

2
задан 17 June 2021 в 10:05

3 ответа

Окончательное решение этой проблемы, когда Laravel генерирует файлы с помощью chmod 644, - это установить права ACL для родительского каталога через setfacl.

setfacl -R -dm "g:www-data:rw" $www_new_app_dir/storage 

, где все сгенерированные файлы наследуют настройки acl из родительского каталога. В данном случае rw для группы www-data.

0
ответ дан 28 July 2021 в 11:27

Если действия, которые необходимо запускать от имени root, можно разделить на отдельные процессы / сценарии, то вы можете запустить эти процессы от имени пользователя setuid root. Это очень удобный инструмент, который, на мой взгляд, используется слишком редко.

Что такое setuid-процессы? Взгляните, например, на команду passwd . Его может запускать любой пользователь, но он должен запускаться от имени пользователя root, поскольку ему необходимо изменить пароль, хранящийся в файле, доступ к которому имеет только root ( / etc / shadow ).

Как это делается? Посмотрите разрешения на двоичный файл / usr / bin / passwd :

-rwsr-xr-x 1 root root 68208 maj 28  2020 /usr/bin/passwd

«s» вместо «x» в поле владельца указывает, что этот двоичный файл будет запускаться с правами его владельца - это корень.

Таким образом, каждый двоичный файл может быть запущен от имени пользователя root (или любого другого пользователя), независимо от того, кто его вызывает.

Однако в сценариях бит setuid игнорируется по соображениям безопасности. Итак, чтобы запустить сценарий от имени пользователя root, вам необходимо использовать двоичную оболочку , которая будет вызывать сценарий изнутри. Вы можете использовать следующую простую программу на C для создания такой оболочки:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>

int main()
{
   int rc;
   setuid( 0 );
   rc=WEXITSTATUS(system( "/path/to/your/script" ));
   exit(rc);
}

Скомпилируйте программу и сделайте исполняемый файл setuid root (предполагая, что исполняемый файл называется wrapper , выполните sudo chown root: root wrapper , за которым следует sudo chmod o + s wrapper ).

Кстати. Сценарий, запускаемый изнутри оболочки, не требует setuid; только обертка должна.

Отредактируйте : из вашего объяснения в комментариях похоже, что вы хотите запустить определенную команду rm -rf / some / path от имени пользователя root и заботитесь о том, чтобы случайно не удалить что-либо еще. В этом случае я предлагаю просто заменить часть / path / to / your / script в программе-оболочке выше этой самой командой rm -rf / some / path и просто запустить двоичный файл оболочки из вашего сценария в том месте, где вы должны выполнить команду rm -rf / some / path . Это кажется самым безопасным подходом.

1
ответ дан 28 July 2021 в 11:27

Мое прямое решение - запускать бесконечный фоновый сценарий от имени пользователя root, который находит и удаляет необходимые каталоги каждые 10 секунд. Он работает как nohup, поэтому он все еще работает, хотя я закрываю терминал.

while true
do
  find /var/www -maxdepth 1 -type d -name 'deploy-old-*' -exec rm -rf {} \;
  sleep 10
done
0
ответ дан 28 July 2021 в 11:27

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

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