Вы знаете sudo, верно? Наверняка вы пользовались ею когда-то.
Для большинства пользователей Linux это волшебный инструмент, который дает вам возможность выполнить любую команду от имени root или переключиться на пользователя root.
Но это только полуправда. Видите ли, sudo
– это не абсолютная команда. sudo – это инструмент, который можно настроить по своему вкусу и потребностям.
Ubuntu, Debian и другие дистрибутивы поставляются с предустановленной sudo, позволяющей выполнять любые команды от имени root. Это заставляет многих пользователей верить, что sudo – это некий магический переключатель, который мгновенно даёт вам root-доступ.
Например, сисадмин может настроить его таким образом, что пользователи, входящие в определённую группу „dev“, смогут выполнять с помощью sudo только команды nginx Эти пользователи не смогут выполнить ни одну другую команду с помощью sudo или переключиться на root.
Если вас это удивляет, то это потому, что вы, возможно, всегда использовали sudo, но никогда не задумывались о механизме, лежащем в его основе.
В этой статье вы увидите, как можно настраивать различные аспекты sudo. Некоторые из них полезны, а некоторые довольно бесполезны, но забавны.
Пожалуйста, не начинайте слепо следовать всем упомянутым твикам. Если вы сделаете это неправильно, то в итоге можете получить испорченную систему, которая не сможет работать с sudo. По большей части, просто читайте и наслаждайтесь. А если вы решите попробовать некоторые из твиков, сделайте резервную копию системных настроек, чтобы можно было вернуть все на свои места.
1. Всегда используйте visudo для редактирования sudo config
Команда sudo настраивается через файл /etc/sudoers
.
Хотя вы можете редактировать этот файл с помощью вашего любимого текстового редактора на базе терминала, такого как Micro, NeoVim и т.д., вы МОЖЕТЕ НЕ делать этого.
Почему? Потому что любой неправильный синтаксис в этом файле приведет к тому, что вы получите испорченную систему, в которой sudo не будет работать. Что может сделать вашу Linux-систему бесполезной.
Просто используйте его следующим образом:
sudo visudo
Команда visudo
традиционно открывает файл /etc/sudoers
в редакторе Vi. Ubuntu откроет его в Nano.
Преимущество заключается в том, что visudo выполняет проверку синтаксиса, когда вы пытаетесь сохранить изменения. Это гарантирует, что вы не испортите конфигурацию sudo из-за неправильного синтаксиса.
Вот! Теперь вы можете увидеть некоторые изменения в конфигурации sudo.
Я бы рекомендовал сделать резервную копию файла /etc/sudoers. Таким образом, если вы не уверены в том, какие изменения вы сделали, или если вы хотите вернуться к конфигурации sudo по умолчанию, вы скопируете ее из резервной копии.
sudo cp /etc/sudoers /etc/sudoers.bak
2. Показывать звездочки при вводе пароля с помощью sudo
Мы унаследовали это поведение от UNIX. Когда вы вводите пароль для sudo в терминале, он ничего не отображает. Отсутствие визуальной обратной связи заставляет новых пользователей Linux думать, что их система зависла.
Старики говорят, что это функция безопасности. Возможно, в прошлом веке так и было, но я не думаю, что нам стоит продолжать в том же духе. Это только мое мнение.
В любом случае, в некоторых дистрибутивах, таких как Linux Mint sudo настроен таким образом, что он отображает звездочки при вводе пароля.
Теперь это больше соответствует поведению, которое мы видим повсюду.
Чтобы отобразить звездочки в sudo, запустите sudo visudo и найдите строку:
Defaults env_reset
Измените ее на:
Defaults env_reset,pwfeedback
В некоторых дистрибутивах, таких как Arch, вы можете не найти строку Defaults env_reset. В этом случае просто добавьте новую строку с текстом Defaults env_reset, pwfeedback
Теперь, если вы попробуете использовать sudo и он запросит пароль, вы должны увидеть звездочки при вводе пароля.
Если вы заметили проблемы с тем, что пароль не принимается даже при правильной работе с графическими приложениями, такими как Software Center, верните это изменение. В некоторых старых сообщениях на форуме это упоминалось. Я с этим не сталкивался.
3. Увеличьте тайм-аут для пароля sudo
Итак, вы используете sudo в первый раз, и он запрашивает пароль. Но для последующих команд с помощью sudo вам не нужно вводить пароль в течение определенного времени.
Назовем это sudo password timeout.
В разных дистрибутивах есть разные таймауты. Это может быть 5 минут или 15 минут.
Вы можете изменить поведение и установить таймаут пароля sudo по своему усмотрению.
Редактируйте файл sudoer, как вы видели выше, и найдите строку с Defaults env_reset и добавьте
timestamp_timeout=XX
к строке, чтобы она стала такой:
Defaults env_reset, timestamp_timeout=XX
Здесь XX – таймаут в минутах.
Если у вас есть другие параметры, например, обратная связь со звездочкой, которую вы видели в предыдущем разделе, их можно объединить:
Defaults env_reset, timestamp_timeout=XX, pwfeedback
Так же вы можете управлять лимитом повторных попыток ввода пароля. Используйте параметр passwd_tries=N
, чтобы изменить количество раз, которое пользователь может ввести неправильный пароль.
4. Использование sudo без пароля
Все верно! Итак, вы увеличили таймаут ввода пароля в sudo.
Все в порядке. Я имею в виду, кому нравится вводить пароль каждые несколько минут.
Увеличение таймаута – это одно. Другое дело – не использовать его постоянно.
Да, вы все правильно поняли. Вы можете использовать sudo без ввода пароля.
Это звучит рискованно с точки зрения безопасности, верно? Так и есть, но есть реальные случаи, когда вам (продуктивно) лучше использовать sudo без пароля.
Например, если вы управляете несколькими Linux-серверами удаленно и создали на них пользователей sudo, чтобы не использовать root постоянно. Проблема в том, что у вас будет слишком много паролей. Вы не хотите использовать один и тот же пароль sudo для всех серверов.
В этом случае вы можете настроить SSH-доступ к серверам только на основе ключей и разрешить использование sudo без пароля. Таким образом, только авторизованный пользователь получит доступ к удаленному серверу, а пароль sudo не нужно будет запоминать.
Я делаю это на тестовых серверах, которые размещаю на DigitalOcean для тестирования инструментов и сервисов с открытым исходным кодом.
Хорошо то, что это можно разрешить для каждого пользователя. Откройте файл /etc/sudoer
для редактирования с помощью:
sudo visudo
А затем добавьте строку следующего содержания:
user_name ALL=(ALL) NOPASSWD:ALL
Конечно, вам нужно заменить user_name
на реальное имя пользователя в строке выше.
Сохраните файл и наслаждайтесь жизнью sudo без паролей.
5. Создание отдельных файлов журнала sudo
Вы всегда можете прочесть syslog или журнал на предмет записей, связанных с sudo.
Однако если вам нужна отдельная запись для sudo, вы можете создать собственный файл журнала, посвященный sudo.
Допустим, вы хотите использовать файл /var/log/sudo.log
для этой цели. Вам не нужно создавать новый файл журнала заранее. Он будет создан за вас, если его не существует.
Редактируйте файл /etc/sudoers с помощью visudo и добавьте в него следующую строку:
Defaults logfile="/var/log/sudo.log"
Сохраните его, и вы сможете увидеть, какие команды были выполнены sudo в какое время и каким пользователем в этом файле:
6. Разрешить выполнение определенных команд с помощью sudo только определенной группе пользователей
Это более продвинутое решение, которое используется сисадминами в многопользовательской среде, где люди из разных отделов работают на одном сервере.
Разработчику может понадобиться запустить веб-сервер или другую программу с правами root, но предоставление ему полного доступа sudo будет проблемой безопасности.
Хотя это можно сделать на уровне пользователя, я рекомендую делать это на уровне группы. Допустим, вы создаете группу coders
и разрешаете ей выполнять команды (или двоичные файлы) из каталогов /var/www
и /opt/bin/coders
и команду inxi (двоичный файл /usr/bin/inxi
).
Это гипотетический сценарий. Пожалуйста, не воспринимайте его дословно.
Теперь отредактируйте файл sudoer с помощью sudo visudo (да, вы уже знаете это). Добавьте в него следующую строку:
%coders ALL=(ALL:ALL) /var/www,/opt/bin/coders,/usr/bin/inxi
Если хотите, можете добавить параметр NOPASSWD, чтобы sudo для разрешенных выше команд можно было запускать с помощью sudo, но без пароля.
7. Проверка доступа sudo для пользователя
Правильно! Это скорее совет, чем твик.
Как узнать, есть ли у пользователя доступ sudo? Проверьте, входит ли он в группу sudo, скажете вы. Но это не гарантия. Некоторые дистрибутивы используют имя группы wheel вместо sudo.
Лучший способ – использовать встроенную функциональность sudo и посмотреть, какой доступ sudo есть у пользователя:
sudo -l -U user_name
Он покажет, есть ли у пользователя доступ sudo для некоторых команд или для всех команд.
Как вы можете видеть выше, он показывает, что у меня есть пользовательский файл журнала и обратная связь по паролю, помимо sudo доступа ко всем командам.
Если у пользователя нет sudo доступа вообще, вы увидите вывод, подобный этому:
User prakash is not allowed to run sudo on this-that-server.
Бонус: Пусть sudo оскорбляет вас за неправильные попытки ввода пароля
Этот «бесполезный» твик я упоминал в начале статьи.
Вы, наверное, ошиблись в вводе пароля при использовании sudo в прошлом, верно?
Этот маленький твик позволит sudo случайно оскорблять вас за неправильный ввод пароля.
С помощью sudo visudo отредактируйте файл конфигурации sudo и добавьте в него следующую строку:
Defaults insults
А затем вы можете проверить изменения, введя неправильные пароли:
Вы можете задаться вопросом, кому нравится, когда его оскорбляют?
Как сделать sudo?
Я знаю, что настройке нет конца. Хотя, sudo – это не то, что настраивает обычный пользователь Linux.
Тем не менее, я люблю делиться с вами такими вещами, потому что вы можете открыть для себя что-то новое и полезное.
Комментарии (0)