Как пятничным вечером я удалил себя из группы sudo

Дело было так — понадобилось прикрутить своему пользователю в ubuntu linux ещё одну группу. И удалил своего user из группы sudo! Кто столкнулся с этим же — читаем далее.

Для тех кто пока не понимает, о чём идёт речь — уточню, любая попытка на выполнение команды через sudo возвращает следующее:

$ sudo apt-get update
[sudo] password for user:
user отсутствует в файле sudoers. Данное действие будет занесено в журнал.

Казалось бы, что стоит взять и отредактировать файл /etc/sudoers должным образом и дать своему юзеру возможность состоять во всех группах, в т.ч. и системных? Но если у вас дата изменения файла совпадает с датой установки системы, как у меня

$ ls -lah /etc/sudoers
-r--r----- 1 root root 745 июля  16  2012 /etc/sudoers

то источник проблемы точно не в этом файле, его ковырять не нужно, иначе можно угробить рутовые права совсем, и вообще, если честно, это серьёзная брешь с точки зрения безопасности.

То есть на деле, стало не вот так (как это должно выглядеть в ubuntu по-умолчанию)

$ id
uid=1000(user) gid=1000(user) группы=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)

а как-то так

$ id
uid=1000(user) gid=1000(user) группы=1000(user)

Также посмотреть это можно по-другому:

$ cat /etc/group | grep имя_вашего_пользователя

где вместо «имя_вашего_пользователя» нужно ввести имя своего пользователя, которое можно узнать выполнив команду в терминале:

whoami

получим примерно такой вывод

$ cat /etc/group | grep user
user:x:1000:user

Чтобы решить это, потребуется физический доступ к машине, где установлена ubuntu. В моём случае физический доступ к машине имеется не всегда, поэтому проблему удалось решить лишь спустя два дня.

Итак, для того, чтобы добавлять пользователя в группы, нужны права суперпользователя, которых под нашим текущим пользователем по каким-либо причинам сейчас нет.
1 Шаг.
Нужно войти под тем, кто имеет права суперпользователя:

1 Вариант. Если у Вас на компьютере есть еще один пользователь с правами суперпользователя (и на него по счастливой случайности установлен пароль, который вам известен), то подключаемся к нему через терминал.

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

2 Вариант. Если установлен пароль на root, то можно подключиться к root:

su root

Если пароль на root не установлен, а пользователя с рутовым доступом у вас нет, то как и мне, вам остаётся только третий вариант.

3 Вариант. Через grub меню войти в recovery mode.

Перезагружаем машину, входим в grub menu (если у Вас оно не видно при обычной загрузке системы, то жмём «Esc» при старте системы, сразу после POST экрана BIOS)

Заходим в пункт «Дополнительные параметры системы» и выбираем Ubuntu (recovery mode)

Запустится «Режим восстановления» — «Recovery mode» Ubuntu, очень полезная утилита, которая часто выручает.

Чтобы перемонтировать файловую систему с режимом записи, нужно выбрать стрелками клавиатуры пункт «network — enable network» и нажать клавишу «Enter».

Теперь выбираем пункт «root» и жмём клавишу «Enter».

Воспользовавшись одним из вариантов мы вошли в систему под пользователем, у которого есть полные права.

2 Шаг.
Возвращаем своему пользователю права суперпользователя.
Для того, чтобы вернуть своему пользователю права sudo, нужно выполнить команду следующего шаблона:

usermod -aG список_групп,через_запятую_без_пробелов имя_вашего_пользователя

Для того, чтобы вернуть права суперпользователя Вашему пользователю, его нужно добавить в две группы:

adm
sudo

Но помимо этого еще по умолчанию пользователь добавлен в следующие группы:

plugdev
cdrom
dip
lpadmin

и группа_аналогична_имени_вашего_пользователя она равна имени вашего пользователя, в моём случае это user.

В общем, нужно выполнить следующую команду, которая решит нашу проблему (вводите правильно имена групп!):

usermod -aG adm,sudo,plugdev,cdrom,dip,lpadmin,user user

вместо user — имя Вашего пользователя.
Не вводим ни в коем случае пробелов в списке групп после запятых.
Пробел ставится только после списка групп, перед именем пользователя.

Проверяем файл /etc/group , что пользователь добавился в группы:

cat /etc/group | grep имя_вашего_пользователя

Должны увидеть следующее:

adm:x:4:syslog,user
cdrom:x:24:user
sudo:x:27:user
dip:x:30:user
plugdev:x:46:user
lpadmin:x:108:user
user:x:1000:user
sambashare:x:124:user

Теперь перезагружаем систему.

И пробуем ввести команду с sudo, например

sudo apt-get dist-upgrade

Если всё успешно — то поздравляю вас, вы вернули права sudo вашему пользователю.

Теперь совет, как это решить быстро, если по криворукости вас снова настигнет такая беда.

Необходимо задать какой-нибудь пароль на юзера root, желательно стойкий к подбору, например: Fgrdph4C
Сделать это можно с помощью такой вот нехитрой команды:

$ sudo passwd root
Введите новый пароль UNIX:
Повторите ввод нового пароля UNIX:
passwd: пароль успешно обновлён

Кстати, не пугайтесь, звёздочки при вводе пароля не отображаются из соображений безопасности.

Теперь вы можете смело удалять себе права на группу sudo, потому что первый шаг этой инструкции смело можно пропускать.
Достаточно ввести в терминале команду

$ su root
Пароль: (который задали выше)
root@machine:/home/user#

И проделать второй шаг данной инструкции снова, уже не используя консоль восстановления.

Часть материалов данной статьи взято с ресурса: http://www.linuxrussia.com/2014/10/return-sudo-ubuntu.html

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