Введение / Зачем это нужно
Когда sudo перестаёт работать, вы теряете возможность устанавливать ПО, управлять сервисами и изменять системные настройки. Это может быть вызвано удалением пакета, ошибкой в /etc/sudoers, потерей прав на бинарный файл или изменением политик безопасности. В этом гайде вы узнаете, как быстро диагностировать проблему и вернуть контроль над системой безопасным и надёжным способом.
Требования / Подготовка
- Доступ к терминалу под любой учётной записью (даже без прав администратора).
- Возможность использовать
su -или Live-образ (если система заблокирована полностью). - Пакет
sudoустановлен или возможность его переустановить. - Права на редактирование
/etc/sudoers(только черезvisudo).
Пошаговая инструкция
Шаг 1: Проверить наличие и версию sudo
Убедитесь, что команда доступна и её путь указан в PATH:
which sudo
sudo --version
Если which sudo ничего не возвращает, возможно, пакет удалён или /usr/bin отсутствует в переменной окружения. Проверьте PATH:
echo $PATH
При необходимости временно добавьте путь:
export PATH=/usr/bin:$PATH
Шаг 2: Проверить права и владельца sudo
Права на /usr/bin/sudo должны быть 4755, а владелец — root:root. Проверьте это:
ls -l /usr/bin/sudo
Если права отличаются, восстановите их (требуется root):
su -
chmod 4755 /usr/bin/sudo
chown root:root /usr/bin/sudo
⚠️ Важно: бит setuid (4755) обязателен, иначе sudo не сможет повысить привилегии.
Шаг 3: Проверить синтаксис sudoers
Ошибки в /etc/sudoers или подключаемых файлах в /etc/sudoers.d/ блокируют работу команды. Провалидируйте конфигурацию:
visudo -c
Если вывод содержит ошибки, исправьте их:
visudo
Не редактируйте файл напрямую через nano или vi вне visudo — это может полностью заблокировать sudo. Убедитесь, что ваша строка доступа выглядит корректно, например:
username ALL=(ALL:ALL) ALL
или для группы:
%sudo ALL=(ALL:ALL) ALL
Шаг 4: Проверить членство в группах
Убедитесь, что ваша учётная запись состоит в группе sudo или wheel:
groups
Если группы нет, добавьте её (требуется root):
su -
usermod -aG sudo username
После этого перезайдите в сеанс или выполните newgrp sudo, чтобы применить изменения.
Шаг 5: Проверить логи и политики PAM
Изучите системные журналы на предмет отказов:
journalctl -xe | grep sudo
cat /var/log/auth.log | grep sudo
Если там есть сообщения о блокировке или неверной конфигурации, проверьте /etc/pam.d/sudo. Убедитесь, что нет лишних или закомментированных строк, блокирующих аутентификацию. При необходимости восстановите оригинальный файл из пакета или документации дистрибутива.
Шаг 6: Восстановить доступ через Live-носитель
Если система недоступна даже для su - или повреждён корень, используйте Live-образ:
- Загрузитесь с USB-носителя.
- Смонтируйте корневой раздел:
sudo mount /dev/sdXn /mnt
- При необходимости смонтируйте псевдофайловые системы:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
- Исправьте
/etc/sudoersили переустановите sudo в целевой системе:
sudo chroot /mnt
visudo
# или
apt reinstall sudo # Ubuntu/Debian
dnf reinstall sudo # Fedora/CentOS
- Перезагрузите систему.
Проверка результата
После исправлений убедитесь, что sudo работает корректно:
sudo whoami
Ожидаемый вывод — root. Проверьте также, что ваш пользователь может выполнять команды с повышением привилегий:
sudo ls /root
Если ошибок нет — доступ восстановлен.
Возможные проблемы
- «sudo: no valid sudoers sources found» — повреждён или отсутствует
/etc/sudoers. Исправьте его черезvisudoили Live-образ. - «sudo: must be setuid root» — бит setuid сброшен. Восстановите права
chmod 4755 /usr/bin/sudo. - «username is not in the sudoers file» — пользователя нет в
sudoersили группеsudo. Добавьте запись или членство в группе. - «sudo: unable to resolve host» — несоответствие имени хоста в
/etc/hostnameи/etc/hosts. Приведите их в соответствие или временно закомментируйте проблемную строку вsudoers, если она не критична. - Блокировка через PAM — проверьте
/etc/pam.d/sudoи отключите лишние модули, напримерpam_accessилиpam_time, если они блокируют вашу учётную запись.