Su, sudo, и иже с ними

0
20

Залог безопасности 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 — простое приложение, которое выполняет элементарные действия:

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

    Лично я полностью отучился от 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. Довольно интересную статью схожей тематики написал Алексей Федорчук — советую почитать и её тоже.

    Кстати, если есть необходимость почитать статью на английском языка, а вы им не владеете, то уже не нужно карпеть над переводом перелистывая страницы толстого словаря. В сети есть переводчик, способный за считанные секунды предоставить вам русский вариант английской статьи.

    НЕТ КОММЕНТАРИЕВ

    ОСТАВЬТЕ ОТВЕТ