Залог безопасности Linux и вообще Unix систем, это четкое разграничение прав. И сеть команды, которые управляют правами доступа и привилегиями. Minoru сделал любопытную подборку, которую я и публикую.
В статье о Compose key я несколько раз упомянул некий sudoedit. Так как сейчас на welinux’е проводится неделя безопасности nix систем, решил написать о sudo, sudoedit, su и некоторых аспектах работы с ними.
su
О su сегодня не слышали разве что виндузятники Всемирно известная утилита, применяемая для смены привилегий на чужие (в том числе рутовские; как раз для получения прав рута чаще всего и применяется).
Тут надо сделать замечание о принципе работы su — после ввода пароля вы получаете привилегии на неограниченное время (аж пока не наберёте exit). Таким образом, утилита во многих случаях неудобна — например, если вам нужно запустить какую-то софтину от рута, вам придётся выполнять su, потом запускать программу, а по завершении работы с ней выполнять exit. Правда, такой поход оправдан, если чьи-то права вам нужны на довольно длительное время — например, если вы настраиваете систему или, скажем, помогаете знакомому привести в порядок его конфиги.
Не смотря на то, что выглядит и работает su очень просто — введи пароль пользователя, чьи права хочешь получить, и работай — она также может представлять довольно серьёзную угрозу. Интересующихся отправляю к лекции о разнице между «su» и «su -», а мы продолжим.
sudo
Как известно, sudo является почти полной противоположностью su:
Таким образом, sudo лучше применять для одиночных действий.
sudoedit
Теперь перейдём к программе, входящей в состав пакета sudo, но почему-то редко упоминаемой. Т.к. все права на общесистемные конфигурационные файлы, находящиеся в /etc, принадлежат руту, администраторы часто выполняют что-то вроде sudo vim /etc/… Естественно, такой метод имеет некоторые недостатки, самый очевидный из которых — следующее протирование: вы должны сохраняться часто, потому что частые сохранения — это хорошо; в то же время, вам нужно сохранять изменения только после того, как вы полностью отредактируете конфиг, т.к. сервис или приложение может прочесть частично сохранённые изменения и не запуститься. Вторым существенным недостатком может являться то, что редактор root’а может быть настроен не так, как ваш, и вам придётся ненадолго привыкать к отсутствию привычных вещей. Именно поэтому придумали sudoedit — простое приложение, которое выполняет элементарные действия:
Таким вот простым образом решается и проблема с сохранениями, и проблема с настройками редактора.
Лично я полностью отучился от sudo vim … и юзаю sudoedit, чего и вам желаю.
visudo
visudo — утилита, предназначенная для редактирования файла /etc/sudoers, т.е. конфига sudo. Она работает почти как sudoedit за исключением того, что копирует она заранее известный файл — /etc/sudoers — а перед копированием его обратно в /etc проверяет синтаксис. visudo, фактически, является единственным допустимым средством редактирования sudoers, если вы не хотите нечаянно поломать свою систему.
Некоторые аспекты использования sudo и su
Всё вышеприведённое было сухой теорией, большая часть которой известна каждому. Теперь же перейдём к практике.
Первый аспект, касающийся исключительно su, уже был упомянут — следует понимать разницу между «su» и «su -».
Второй любопытный момент, который лично я использую каждый день — это опция su -c. Давайте подробнее остановимся на ситуации, в которой нам может понадобится эта опция.
Для обновления системы мне необходимо выполнить от рута два действия: aptitude update (обновление пакетов) и aptitude -y safe-upgrade (собственно обновление). Сделать это можно такой незамысловатой конструкцией: sudo aptitude update && sudo aptitude -y safe-upgrade. Правда, если первая команда будет выполняться довольно долго, то sudo «забудет» ранее введённый пароль и потребует его заново. Это нехорошо, потому что я рассчитываю, что контрукция выполнится без моего вмешательства.
Окей, ищем второй путь: делаем su, вводим пароль рута, потом выполняем aptitude update && aptitude -y safe-upgrade && exit. Уже лучше, но появился неприятный момент — нужно вводить пароль рута.
Возникает противоречие: sudo может выполнить только одну команду, а su нужен пароль рута. Выход довольно прост: делать sudo su -c “aptitude update && aptitude -y safe-upgrade”. Как работает этот «конвеер»? sudo запрашивает пароль текущего пользователя, после чего запускает su с рутовскими привилегиями. В этом случае su не запрашивает пароль, а просто выполняет указанную в качестве аргумента конструкцию, а именно обновляет списки пакетов, а за ними и сами пакеты.
Вот таким вот нехитрым способом мы одновременно удовлетворили свою параноидальность (пароль рута в процессе не участвует) и решили задачу (система обновляется без нашего вмешательства). У меня вышеприведённый однострочник выполнен в виде скрипта и запускается время от времени.
P.S. Довольно интересную статью схожей тематики написал Алексей Федорчук — советую почитать и её тоже.
Кстати, если есть необходимость почитать статью на английском языка, а вы им не владеете, то уже не нужно карпеть над переводом перелистывая страницы толстого словаря. В сети есть переводчик, способный за считанные секунды предоставить вам русский вариант английской статьи.