Вопрос или проблема
Мой случай использования заключается в том, что у меня есть скрипт, который удаляет моего пользователя из группы 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
:
- Ждать запланированных функций
at
, которые вновь добавят пользователя в группу sudo (потому что, когда вы запускаете команду сsudo ./abdicate.sh "сейчас + 3 часа"
, вы лишаетесь доступа к sudo на 3 часа). - Использовать команду
sudo delayed example-command
, таким образом командаexample-command
будет выполнена, даже если вы не в группе sudo, но она будет выполнена с определенной задержкой, выбранной пользователем через конфигурационный файл.
Что я хочу достичь: иметь возможность терять/приобретать права sudo, когда скрипт удаляет/добавляет моего пользователя в группу sudo, без перезагрузки моей машины.
Ответ или решение
Чтобы решить проблему изменения прав доступа к sudo без перезагрузки системы после добавления или удаления пользователя из группы sudo, необходимо понять, как работают группы и политики разрешений в Linux-системах. Ваша проблема заключается в том, что изменения не применяются немедленно в текущем сеансе, так как кэширование прав доступа пользователя часто требует, чтобы сессия была перезапущена или чтобы пользователь заново вошел в систему.
Вот подробное решение вашей проблемы, учитывающее контекст:
Шаги для обновления прав доступа к sudo без перезагрузки
-
Проверка группы sudo:
Первым делом убедитесь, что изменения группы действительно были применены. Вы можете это сделать, выполнив команду:groups имя_пользователя
Если ваш пользователь больше не в группе
sudo
, изменения сохранятся. -
Использование команды
newgrp
:
Одним из самых простых способов применить изменения группы без выхода из системы или перезагрузки является использование командыnewgrp
. Эта команда создает новый сеанс с указанной группой:newgrp sudo
Запуск этой команды немедленно обновит права доступа для текущего пользователя. Обратите внимание, что при этом создается новый сеанс, и все команды, выполняемые после вызова
newgrp
, будут выполняться с правами из новой группы. -
Настройка скрипта:
Если вы добавляете пользователя в группуsudo
с помощью расписанияat
, вероятно, будет полезно добавлять командуnewgrp sudo
в ваш скрипт, чтобы новые права доступа применялись мгновенно.Пример:
#!/bin/bash # Удалить пользователя из группы sudo sudo deluser имя_пользователя sudo # Добавить пользователя обратно через 3 часа echo "sudo adduser имя_пользователя sudo && newgrp sudo" | at now + 3 hours
-
Обновление прав доступа:
Если ваш скрипт работает в том же сеансе, вы можете использовать:sudo -i
Эта команда откроет новый интерактивный сеанс с административными правами, и изменения групп будут применены.
-
Проверка
sudo.service
:
Ваша ошибка связана с тем, чтоsudo.service
замаскировано. Чтобы разрешить его использование, выполните:sudo systemctl unmask sudo.service
Однако на большинстве дистрибутивов
sudo
не требует перезапуска службы, и это может не дать результата. Используйте вышеуказанные методы. -
Логирование в сеанс:
Чтобы упростить процесс после внесения изменений, рекомендуем просто запросить у пользователя выйти из системы и снова войти. Это гораздо быстрее, чем перезагрузка всей системы.
Заключение
Использование команд newgrp
и sudo -i
является наиболее эффективным решением для немедленного применения изменений прав доступа к sudo
в Linux Mint без перезагрузки. Это позволит вам сохранить вашу текущую работу и на лету изменять права доступа, что особенно полезно в случае разработки и тестирования. С помощью вышеуказанных шагов ваш проект останется функциональным, а работа с правами будет максимально удобной.