Захотелось сегодня порассуждать на одну популярную тему в мире linux серверов. Нужно ли использовать sudo при работе в консоли сервера, а если нужно, то зачем именно. Статью пишу чтобы порассуждать, почитать ваши отзывы и поделиться своим мнением.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Введение
Я постоянно читаю кучу статей на тему настройки linux серверов как в русскоязычном интернете, так и англоязычном. В статьях обычно в равной мере встречаются команды с sudo и без. Для тех, кто не знает, что это такое и о чем идет речь, кратко поясню.
С помощью sudo можно авторизовываться на сервере под обычным пользователем и выполнять команды с правами root, просто введя его пароль. То есть вы запускаете одну конкретную команду с правами root. Например, вот так в debian или ubuntu:
# sudo apt-get update
Или так в centos:
# sudo yum update
Дальше вводите пароль root и команда начинает исполняться.
Зачем нужен sudo?
Основной аргумент за использование sudo при работе в консоли, который я слышал - так безопаснее. В чем именно безопасность, лично я не понимаю. Возможно в том, что вы страхуете себя от ошибки ввода и лишний раз смотрите на исполняемую команду перед вводом пароля root. Какая еще может быть безопасность, мне не ясно.
Лично я захожу на сервера по ssh для выполнения административных действий. И только для этого. Мне всегда там нужны полные права. Я не очень понимаю, зачем мне каждый раз использовать sudo. Поэтому я всегда авторизуюсь под root и начинаю делать то, зачем подключился к консоли. Если права доступа там не разграничены через sudo, то сразу делаю:
# sudo su -
и начинаю выполнять поставленные задачи.
Могу понять, зачем нужно sudo, если linux ваша рабочая станция и вы за ней ежедневно работаете. Тогда удобно работать под обычным пользователем, а sudo использовать, чтобы повысить свои права для конкретной команды. На сервере я не вижу в этом смысла, если к нему подключаюсь только я.
Так же оправдано использование sudo при работе на сервере команды администраторов. Для каждого создается своя учетка, добавляется в sudo, настраиваются те или иные права, включается логирование команд через sudo.
В разных дистрибутивах разное отношение к sudo. Например, если в минимальной конфигурации Centos вы введете в консоли команду sudo, то увидите следующее.
# -bash: sudo: command not found
Команды sudo нет в минимальной установке, ее нужно установить:
# yum install sudo
А в debian или ubuntu у вас по-умолчанию после установки сервера разрешено подключение по ssh только для обычного пользователя. С помощью sudo можно начинать последующую настройку сервера после подключения.
Когда использовать sudo
Подозреваю, что сюда могут заглянуть какие-то продвинутые товарищи, чтобы сказать о том, что работа в консоли признак непрофессионализма. Все должно настраиваться с помощью ansible, chef, puppet и т.д. Прошу это не писать, статья не об этом, а такое мнение в определенных ситуациях может быть оправдано. Но я не претендую ни на какие лавры. Пишу о том, чем занимаюсь и что меня интересует.
Если подытожить сказанное, то sudo нужно в следующих случаях:
- К серверу подключаются разные администраторы. Нужно логировать их действия и разграничивать права доступа.
- Linux ваша рабочая системы, с помощью sudo вы запускаете редкие команды с полными правами.
- Sudo используется в скриптах для ограничения доступа. Абсолютно оправданное использование, сам так поступаю.
Если я единолично управляю сервером, подключаюсь для совершения административных действий, sudo считаю лишней сущностью и не использую его. Возможно я ошибаюсь и чего-то не понимаю. Жду ваших комментариев на эту тему. Как и когда вы используете sudo?
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
НИЧЕГО не исполняется! Абсолютно ничего не даёт сделать консоль под обычным пользователем! Все что нашел в интернете - не рабатает! Он принимает пароль пользователя и на ВСЕ команды отвечает неизменно: nick is not in the sudoers file. This incident will be reported.
"Дальше вводите пароль root и команда начинает исполняться".
Пароль пользователя же.
На серверах работаю так
1) захожу обычным юзером (в sshd делаю permit руту)
2) sudo -i и работаю по "посинения"
Согласен с вами - когда админ один - можно спокойно работать от root.
Кстати, не совсем понял про "К серверу подключаются разные администраторы. Нужно логировать их действия".
Вроде наоборот получается - любой админ делает sudo -i и никакого хистори нет.
sudo -i запрещаем или бьем по рукам за него. Логи храним не только локально. В общем, это как идея, не готовая реализация.
ну, да))
:~$ history
1 uptime
2 sudo -i
Для меня ещё sudo удобно тем, что можно сохранить настройки окружения при работе с повышенными привелегиями, не перекрывая конфиги других админов. Хотя это с точки зрения многих не секьюрно, но лично мне удобней дать sudo -s, и получить настроенный под меня zsh с рутовыми правами, и не выслушивать нытье "опять ты руту zsh поставил, мне удобней в bash"
ну а пароль рута традиционно в запечатанном конверте в сейфе лежит, на случай "совсем бл*, но сервер перегружать для сингл юзера нельзя"
Даже, когда я один на сервере админ, захожу под учеткой юсера и далее повышаю привелегии с помощью sudo без ввода пароля. Разрешать ssh под root несекьюрно. Каждый раз вводить пароль root через su неудобно.
Это понятная тема, забыл об этом упомянуть. Запрет подключения root по ssh понятен и оправдан. Но я так понял, после подключения вы постоянно под root работаете.
Да, конечно, грешен )), просто каждый раз вводить sudo неудобно. Но повышаю привелегии именно через sudo без пароля. Как правило пароль root ставлю рандомный, знаков на 10 и забываю его. Опять же при разворачивании сервера в производственной среде подразумевает что там будут еще пользователи/админы, что уже обосновывает применение sudo. А если для себя - это уже наработанная привычка. Я не программист - я админ.