Как перезагрузить пользователей sudo без перезагрузки (Не удалось перезапустить sudo.service)

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

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

Проблема в том, что мне приходится перезагружать машину каждый раз, чтобы изменения вступили в силу: в первый раз, чтобы перестать быть пользователем sudo, и во второй раз (как только скрипт добавляет меня снова в группу sudo), чтобы снова стать им.

Странно, что моя DE (Cinnamon) и файловый менеджер (Nemo) сразу же учитывают изменения, это означает, что если я пытаюсь зайти в папку и “открыть как root”, я не могу это сделать, если я запустил скрипт и меня удалили из группы sudo. Но если я зайду в терминал и, например, выполню sudo apt update, это сработает, если я не выполню перезагрузку.

Цель состоит в том, чтобы эффективно отразить удаление/добавление моего пользователя в группу sudo без необходимости перезагружать машину. (Я говорю “перезагрузка”, а не “выход”, потому что, странным образом, выход, очевидно, не сработает).

Я искал в интернете, и одно из решений было выполнить:

sudo service sudo restart

Но проблема в том, что я получаю ошибку: Не удалось перезапустить sudo.service: Unit sudo.service is masked. Я пытался размаскировать sudo.service, но ничего не изменилось.

Информация: Я на Linux Mint 22 с Cinnamon 6.2.9. Ядро Linux: 6.8.0-48-generic

Редактировать:
Цель всего скрипта
Я делаю форк проекта под названием delayed-admin. Суть в том, что он удаляет основного пользователя из группы sudo, чтобы нельзя было выполнять что-либо, требующее доступа sudo. Затем есть только два способа выполнить команду, требующую sudo:

  1. Ждать запланированных функций at, которые вновь добавят пользователя в группу sudo (потому что, когда вы запускаете команду с sudo ./abdicate.sh "сейчас + 3 часа", вы лишаетесь доступа к sudo на 3 часа).
  2. Использовать команду sudo delayed example-command, таким образом команда example-command будет выполнена, даже если вы не в группе sudo, но она будет выполнена с определенной задержкой, выбранной пользователем через конфигурационный файл.

Что я хочу достичь: иметь возможность терять/приобретать права sudo, когда скрипт удаляет/добавляет моего пользователя в группу sudo, без перезагрузки моей машины.

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

Чтобы решить проблему изменения прав доступа к sudo без перезагрузки системы после добавления или удаления пользователя из группы sudo, необходимо понять, как работают группы и политики разрешений в Linux-системах. Ваша проблема заключается в том, что изменения не применяются немедленно в текущем сеансе, так как кэширование прав доступа пользователя часто требует, чтобы сессия была перезапущена или чтобы пользователь заново вошел в систему.

Вот подробное решение вашей проблемы, учитывающее контекст:

Шаги для обновления прав доступа к sudo без перезагрузки

  1. Проверка группы sudo:
    Первым делом убедитесь, что изменения группы действительно были применены. Вы можете это сделать, выполнив команду:

    groups имя_пользователя

    Если ваш пользователь больше не в группе sudo, изменения сохранятся.

  2. Использование команды newgrp:
    Одним из самых простых способов применить изменения группы без выхода из системы или перезагрузки является использование команды newgrp. Эта команда создает новый сеанс с указанной группой:

    newgrp sudo

    Запуск этой команды немедленно обновит права доступа для текущего пользователя. Обратите внимание, что при этом создается новый сеанс, и все команды, выполняемые после вызова newgrp, будут выполняться с правами из новой группы.

  3. Настройка скрипта:
    Если вы добавляете пользователя в группу sudo с помощью расписания at, вероятно, будет полезно добавлять команду newgrp sudo в ваш скрипт, чтобы новые права доступа применялись мгновенно.

    Пример:

    #!/bin/bash
    # Удалить пользователя из группы sudo
    sudo deluser имя_пользователя sudo
    
    # Добавить пользователя обратно через 3 часа
    echo "sudo adduser имя_пользователя sudo && newgrp sudo" | at now + 3 hours
  4. Обновление прав доступа:
    Если ваш скрипт работает в том же сеансе, вы можете использовать:

    sudo -i

    Эта команда откроет новый интерактивный сеанс с административными правами, и изменения групп будут применены.

  5. Проверка sudo.service:
    Ваша ошибка связана с тем, что sudo.service замаскировано. Чтобы разрешить его использование, выполните:

    sudo systemctl unmask sudo.service

    Однако на большинстве дистрибутивов sudo не требует перезапуска службы, и это может не дать результата. Используйте вышеуказанные методы.

  6. Логирование в сеанс:
    Чтобы упростить процесс после внесения изменений, рекомендуем просто запросить у пользователя выйти из системы и снова войти. Это гораздо быстрее, чем перезагрузка всей системы.

Заключение

Использование команд newgrp и sudo -i является наиболее эффективным решением для немедленного применения изменений прав доступа к sudo в Linux Mint без перезагрузки. Это позволит вам сохранить вашу текущую работу и на лету изменять права доступа, что особенно полезно в случае разработки и тестирования. С помощью вышеуказанных шагов ваш проект останется функциональным, а работа с правами будет максимально удобной.

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

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