Разрешить всем пользователям запускать синхронизацию данных в общую директорию (группы против фиктивного пользователя?)

Вопрос или проблема

У меня есть сервер Ubuntu с примерно 6-7 пользователями. Мы все используем программное обеспечение, которое требует регулярного обновления некоторых общих файлов и папок. Назовем эту общую директорию

/opt/science/online-data

В ней находятся файлы калибровки и данных, которые обновляются нерегулярно на внешнем публичном сервере, не принадлежащем мне. У меня есть cron-задача, которая выполняет команду rsync каждый день в 5 утра, чтобы поддерживать ее в актуальном состоянии. В повседневном использовании эта папка просто должна быть доступна для чтения всем пользователям (без записи).

Однако иногда программное обеспечение выдает ошибку, указывающую на необходимость немедленного обновления папки online-data перед использованием ПО. Я не всегда рядом как администратор, чтобы выполнить эту команду. Я хотел бы настроить систему так, чтобы любой из моих пользователей мог запустить скрипт “update_online_data.py” или подобный, и это активировало бы rsync.

Я попробовал сделать это, установив для папки online-data группу “softwaregroup” и предоставив всем пользователям членство, но пользователи сообщают о проблемах с разрешениями. Это, вероятно, ошибка, которую я могу исправить (я уверен, что это должно работать), но я думаю, есть ли более безопасный способ сделать это? На данный момент членство в группе теоретически позволяет им вмешиваться в эти файлы, а я действительно не хочу, чтобы они делали что-либо, кроме rsync. Есть ли способ создать команду, которая запускает пользователя, не требующего входа в систему, специально для этой задачи, чтобы делать это и только это? (У меня есть смутное представление, что демоны или сервисы могут быть возможностью, но у меня не так много опыта их использования в нестандартных сценариях.)

Существует множество способов сделать это, наверное, самый традиционный — создание записи в файле sudoers, которая позволяет им выполнять определенную команду от имени зарезервированного пользователя.

Более новый, но простой механизм может быть системой systemd с инициированием по пути. Для его использования пользователи создавали бы файл, например /opt/science/online-data/UPDATEME, и это активировало бы блок службы для выполнения команды от имени зарезервированного пользователя для обновления, а затем удаления файла.

Вы создадите файл .path в /etc/systemd/system/, например myupdate.path, содержащий

[Unit]
Description=start myupdate.service when UPDATEME file appears
[Path]
PathExists=/opt/science/online-data/UPDATEME
[Install]
WantedBy=multi-user.target

и другой myupdate.service, содержащий

[Unit]
Description=Update files on user request by creating file UPDATEME
[Service]
User=wantedusername
ExecStart=/bin/myupdatefilescript
ExecStartPost=rm -f /opt/science/online-data/UPDATEME

Не запускайте службу, а выполните systemctl start myupdate.path для тестирования и включите ее для перезагрузок.

Ответ или решение

У вас есть несколько способов решения задачи, чтобы любые пользователи могли инициировать процесс синхронизации данных с общим каталогом. Это важный аспект обеспечения бесперебойной работы вашего программного обеспечения и поддержания актуальности файлов в каталоге /opt/science/online-data. Вот шаги, которые можно предпринять для решения этой задачи:

1. Настройка доступа через Sudo

Использование конфигурации sudoers — это традиционный и эффективный метод. Вы можете создать запись, которая предоставляет определенной группе пользователей или конкретным пользователям права на выполнение конкретной команды без необходимости вводить пароль администратора.

Пример настройки sudoers:

  1. Откройте файл конфигурации sudoers с помощью привилегированного доступа:

    sudo visudo
  2. Добавьте следующую строку, чтобы разрешить группе softwaregroup запускать ваш скрипт update_online_data.py от имени пользователя с правами доступа без необходимости ввода пароля:

    %softwaregroup ALL=(ALL) NOPASSWD: /usr/bin/python3 /оптимизация/научный/в интернете-данные/update_online_data.py

2. Использование systemd для автоматического обновления данных

Для более автоматизированного и безопасного подхода вы можете воспользоваться systemd для создания path-initiated сервиса, который сработает при создании файла-триггера пользователем.

Настройка сервисной службы с использованием Systemd:

  1. Создание файла .path:

    Создайте файл /etc/systemd/system/myupdate.path с содержимым:

    [Unit]
    Description=start myupdate.service when UPDATEME file appears
    
    [Path]
    PathExists=/opt/science/online-data/UPDATEME
    
    [Install]
    WantedBy=multi-user.target
  2. Создание файла .service:

    Создайте файл /etc/systemd/system/myupdate.service:

    [Unit]
    Description=Update files on user request by creating file UPDATEME
    
    [Service]
    User=wantedusername
    ExecStart=/usr/bin/python3 /opt/science/online-data/update_online_data.py
    ExecStartPost=/usr/bin/rm -f /opt/science/online-data/UPDATEME
  3. Запуск и активация path:

    Выполните команду для тестирования и активации при перезагрузке:

    sudo systemctl start myupdate.path
    sudo systemctl enable myupdate.path

Заключение

Оба подхода эффективны, но использование systemd предоставляет более автоматизированное и безопасное решение, минимизируя риск человеческой ошибки. Это особенно важно, если вы хотите ограничить доступ пользователей только к выполнению необходимой команды без возможности манипуляции файлами вручную. Выбор подхода зависит от ваших предпочтений и требуемого уровня безопасности.

Оцените материал
Добавить комментарий

Капча загружается...