Minoru 25.12.2009 06:20
Security — Su и иже с ним
В статье о Compose key я несколько раз упомянул некий sudoedit. Так как сейчас на welinux'е проводится неделя безопасности nix систем, решил написать о sudo, sudoedit, su и некоторых аспектах работы с ними.su
О su сегодня не слышали разве что виндузятники :) Всемирно известная утилита, применяемая для смены привилегий на чужие (в том числе рутовские; как раз для получения прав рута чаще всего и применяется).Тут надо сделать замечание о принципе работы su — после ввода пароля вы получаете привилегии на неограниченное время (аж пока не наберёте exit). Таким образом, утилита во многих случаях неудобна — например, если вам нужно запустить какую-то софтину от рута, вам придётся выполнять su, потом запускать программу, а по завершении работы с ней выполнять exit. Правда, такой поход оправдан, если чьи-то права вам нужны на довольно длительное время — например, если вы настраиваете систему или, скажем, помогаете знакомому привести в порядок его конфиги.
Не смотря на то, что выглядит и работает su очень просто — введи пароль пользователя, чьи права хочешь получить, и работай — она также может представлять довольно серьёзную угрозу. Интересующихся отправляю к лекции о разнице между «su» и «su -», а мы продолжим.
sudo
Как известно, sudo является почти полной противоположностью su:требует пароль текущего пользователя, а не того, чьи права мы получаемрасширяет привилегии только для комманды, которая была передана в качестве аргументаимеет довольно гибкие настройки, позволяющие ограничить набор допустимых программ или определить, какие программы могут быть запущены с повышенными привилегиями даже без ввода пароляОсновное преимущество sudo как раз в том, что не нужно вводить пароль рута — вы можете выдать своим пользователям возможность выполнять некоторые программы с помощью 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 (собственно обновление). Сделать это можно такой незамысловатой конструкцией:
1 |
|
Окей, ищем второй путь: делаем su, вводим пароль рута, потом выполняем
1 |
|
Возникает противоречие: sudo может выполнить только одну команду, а su нужен пароль рута. Выход довольно прост: делать
1 |
|
Вот таким вот нехитрым способом мы одновременно удовлетворили свою параноидальность (пароль рута в процессе не участвует) и решили задачу (система обновляется без нашего вмешательства). У меня вышеприведённый однострочник выполнен в виде скрипта и запускается время от времени.
P.S. Довольно интересную статью схожей тематики написал Алексей Федорчук — советую почитать и её тоже.
За "su -" спасибо.
Не раскрыта тема su root something (а оно эквивалентно sudo something только помощнее).
Не смотря на то, что выглядит и работает su очень просто — введи пароль пользователя, чьи права хочешь получить, и работай — она также может представлять довольно серьёзную угрозу.
Опасность "su" представляет только в случае если ты не знаешь чего ты делаешь (то есть например при работе с браузером, скриптами незнакомого содержания, программами непонятного назначения) или или делаешь чёрт знает что (в шесть утра rm -rf ./* так похож на rm -rf /*).Не раскрыта тема su root something (а оно эквивалентно sudo something только помощнее).
Таким образом, sudo лучше применять для одиночных действий.
Вообще говоря sudo придумали для того чтобы повышать привилегии (причём не абы какие, а только разрешённые вышестоящим начальством) не будучи при этом рутом (чтобы не выдавать каждому пользователю всех привилегий). Иными словами sudo следует использовать в первую очередь когда у вас нет рутового пароля.
Не раскрыта тема su root something (а оно эквивалентно sudo something только помощнее).
Не совсем понял, что имеется в виду :(
sudo следует использовать в первую очередь когда у вас нет рутового пароля.
Да, вы правы. Попробую поправить статью.
Не совсем понял, что имеется в виду :(
Хм... Ну попробуй например сделать:$ su root apt-get update
(не помню, но вроде в дебьяноидах оно требует привилегий суперпользователя).
% su root apt-get update
Пароль:
/usr/bin/apt-get: /usr/bin/apt-get: cannot execute binary file
%
Что-то мне подсказывает, что ты вовсе не эту ошибку мне хотел показать…
Опытным путём выяснил, что в дебах апт агрессивно против такого поведения. Попробуй что-то вроде:
$ su root ls /root
Должно сработать. По крайней мере на последнем дебиане вчера пахало.
$ su root ls /root
Должно сработать. По крайней мере на последнем дебиане вчера пахало.
% su root ls /root
Пароль:
/bin/ls: /bin/ls: cannot execute binary file
% /bin/bash
minoru@eternity:~$ su root ls /root
Пароль:
/bin/ls: /bin/ls: cannot execute binary file
minoru@eternity:~$
:(
Я вот вместо su пользують „sudo -i“
А вместо sudoedit — можна вызвать sudo -e. По сути то же самое.
за пояснение «sudo su» спасибо, теперь понял для чего его можно использовать, но органичнее помоему будет:
sudo -i "aptitude update && aptitude -y safe-upgrade && exit“
А вместо sudoedit — можна вызвать sudo -e. По сути то же самое.
за пояснение «sudo su» спасибо, теперь понял для чего его можно использовать, но органичнее помоему будет:
sudo -i "aptitude update && aptitude -y safe-upgrade && exit“
Я вот вместо su пользують „sudo -i“
Хм… Постараюсь совместить это с фразой KblCb о пользе sudo.
А вместо sudoedit — можна вызвать sudo -e. По сути то же самое.
Да, абсолютно.
sudo -i "aptitude update && aptitude -y safe-upgrade && exit“
Не пашет, кстати:% sudo -i "aptitude update && aptitude safe-upgrade" ~
-bash: aptitude update && aptitude safe-upgrade: Нет такого файла или каталога
Странно весьма, возможно дело в кавычках, у меня на Arch правда работает с и с ними и без.
Возможно дело в конфигурации sudo, PATH, алиасы.
Возможно дело в конфигурации sudo, PATH, алиасы.
Ну, выполнять серию команд от имени рута и возвращаться в юзерский шелл.
Конкретно та команда — апгрейдить deb-систему. У меня Arch, так что не покажу))
Конкретно та команда — апгрейдить deb-систему. У меня Arch, так что не покажу))
выполнять серию команд от имени рута и возвращаться в юзерский шелл.
Т.е. то же самое, что и su -c, только с вводом пароля пользователя, а не рута. Ясно.
Конкретно та команда — апгрейдить deb-систему
Я знаю, что делает aptitude — мне было интересно, что такого интересного делает sudo с ключиком i. Теперь, кажется, дошло — остальось выяснить, почему не работает как положено.
Меня бы тоже хакнули, так что тоже радуюсь, что админ только у себя на десктопе :)
С sudoedit в vim возникает одна небольшая проблема — на некоторых файлах отключается подсветка синтаксиса, т.к. она порой привязана к расположению открываемого файла (/etc/make.conf в Gentoo, к примеру). Мелочь, а неприятно…
отключается подсветка синтаксиса, т.к. она порой привязана к расположению открываемого файла
Скорее не к расположению, а к имени. sudoedit дописывает в конец имени скопированного файла какую-то чепуху, поэтому тип файла не определяется. Я в таком случае просто делаю :filetype detect
Я не могу сейчас конкретный пример привести, но знаю, что сталкивался с тем, что файл под тем же именем, но при другом расположении не мог автоматически определиться VIM'ом. Это я проходил, т.к. у меня две системы (Gentoo и Arch) и одна примонтированна в другой. И, редактируя идентичные файлы, один вполне мог подсвечиваться автоматом (из текущей системы), а другой — нет.
А вообще, сделать :filetype detect не проблема, но сама необходимость этого наталкивает меня на некоторые размышления по поводу «а оно того стоит?». :)
А вообще, сделать :filetype detect не проблема, но сама необходимость этого наталкивает меня на некоторые размышления по поводу «а оно того стоит?». :)
чтоб не могли подсунуть свенью такую надо быть параноиком
и монтировать так /dev/mapper/eee--ps-home /home ext3 noatime,nodiratime,defaults,noexec,nodev 0 2
и блокировать на запись ./.bashrc ./.bash_aliases ./.profile
и монтировать так /dev/mapper/eee--ps-home /home ext3 noatime,nodiratime,defaults,noexec,nodev 0 2
и блокировать на запись ./.bashrc ./.bash_aliases ./.profile
Спасибо про разницу между "su" и "su -".