Security — Su и иже с ним

su
О su сегодня не слышали разве что виндузятники :) Всемирно известная утилита, применяемая для смены привилегий на чужие (в том числе рутовские; как раз для получения прав рута чаще всего и применяется).

Тут надо сделать замечание о принципе работы su — после ввода пароля вы получаете привилегии на неограниченное время (аж пока не наберёте exit). Таким образом, утилита во многих случаях неудобна — например, если вам нужно запустить какую-то софтину от рута, вам придётся выполнять su, потом запускать программу, а по завершении работы с ней выполнять exit. Правда, такой поход оправдан, если чьи-то права вам нужны на довольно длительное время — например, если вы настраиваете систему или, скажем, помогаете знакомому привести в порядок его конфиги.

Не смотря на то, что выглядит и работает su очень просто — введи пароль пользователя, чьи права хочешь получить, и работай — она также может представлять довольно серьёзную угрозу. Интересующихся отправляю к лекции о разнице между «su» и «su -», а мы продолжим.

sudo
Как известно, sudo является почти полной противоположностью su:

1. требует пароль текущего пользователя, а не того, чьи права мы получаем
2. расширяет привилегии только для комманды, которая была передана в качестве аргумента
3. имеет довольно гибкие настройки, позволяющие ограничить набор допустимых программ или определить, какие программы могут быть запущены с повышенными привилегиями даже без ввода пароля

Основное преимущество sudo как раз в том, что не нужно вводить пароль рута — вы можете выдать своим пользователям возможность выполнять некоторые программы с помощью sudo.

sudoedit
Теперь перейдём к программе, входящей в состав пакета sudo, но почему-то редко упоминаемой. Т.к. все права на общесистемные конфигурационные файлы, находящиеся в /etc, принадлежат руту, администраторы часто выполняют что-то вроде sudo vim /etc/... Естественно, такой метод имеет некоторые недостатки, самый очевидный из которых — следующее протирование: вы должны сохраняться часто, потому что частые сохранения — это хорошо; в то же время, вам нужно сохранять изменения только после того, как вы полностью отредактируете конфиг, т.к. сервис или приложение может прочесть частично сохранённые изменения и не запуститься. Вторым существенным недостатком может являться то, что редактор root'а может быть настроен не так, как ваш, и вам придётся ненадолго привыкать к отсутствию привычных вещей. Именно поэтому придумали sudoedit — простое приложение, которое выполняет элементарные действия:

1. копирует заданный файл в /tmp
2. открывает скопированный файл в вашем редакторе (основываясь на переменной окружения $EDITOR)
3. по завершении правки перемещает файл обратно (если он был изменён)

Таким вот простым образом решается и проблема с сохранениями, и проблема с настройками редактора.

Лично я полностью отучился от 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 не запрашивает пароль, а просто выполняет указанную в качестве аргумента конструкцию, а именно обновляет списки пакетов, а за ними и сами пакеты.

Вот таким вот нехитрым способом мы одновременно удовлетворили свою параноидальность (пароль рута в процессе не участвует) и решили задачу (система обновляется без нашего вмешательства). У меня вышеприведённый однострочник выполнен в виде скрипта и запускается время от времени.

Источник

Похожие новости

Комментариев 0