Эмалированное sudo
Эмалированное sudo
(надеюсь, что эта заметка не причинит никому пользы, потому что надеюсь что никто больше так не зафакапается)
Что будет, если вы выполнили деструктивную команду, которая переписала всю систему на текущего юзера?
$ sudo chown -R $USER:$USER /
Во-первых, у вас отвалися жопа sudo
:
$ sudo su
sudo: /etc/sudoers is owned by uid 1000, should be 0
Во-вторых - ssh
:
(other-system)$ ssh user@remote
kex_exchange_identification: Connection closed by remote host
Обязательно отвалится что-то ещё, и без sudo
и ssh
это не починить.
Чиним sudo
- Открываем два терминала, через tmux или screen.
- С одним терминалом не работает.
- Если у вас нет tmux/screen, и ssh сломан - сожалею.
- В первом терминале получаем pid текущего шела:
$ echo $ 123456
- Во втором терминале выполняем:
$ pkttyagent --process 123456 # pid, полученный в первой консоли
- Возвращаемся в первый терминал:
$ pkexec chown root:root /etc/sudoers /etc/sudoers.d -R
- Идём во второй терминал и вводим там пароль текущего пользователя.
sudo
починен!
Чиним ssh
(возможно, тут хватит reboot'а, но мне было страшно его запускать)
От такого неловкого chown
'а наверняка слетели права на /run/sshd
,
о чём sshd
пожалуется в логах:
$ grep sshd /var/log/auth.log | grep run
...
... fatal: /run/sshd must be owned by root and not group or world-writable.
Пофиксим:
$ sudo chown root:root /run/sshd*
И сверху перезапустим systemd-logind
:
$ sudo systemctl restart systemd-logind
После этих действий ssh должен ожить.
UPD 1
Я снова выстрелил себе в ногу. Запишу доп-действия:
- Если у вас есть какой-то демон, который пишет в
/var/run
(напримерcntlm
), проверьте что права на его директорию корректные.