PDA

Показать полную графическую версию : Почему не нужно использовать "sudo" на домашней Linux-системе


AMDBulldozer
29-10-2012, 18:45
Очень часто можно встретить советы пользователям Linux не работать под учетной записю root, а пользоваться вместо этого командой "sudo".
Данные советы глубоко ошибочны. Попробуем разобраться, почему это именно так.

Начнем с истории создания данной утилиты. А началась эта история 30 лет назад.
Причем, за прошедшие 30 лет принципы её использования претерпели значительные изменения.
Сам автор sudo говорил о ней так: «при существующей системе доступа к учетной записи суперпользователя „su” пользователи имеют тенденцию работать под этой записью независимо от того, необходимо это или нет. sudo направлена на решение этой проблемы путем предоставления системным администраторам удобного способа доступа к определенным возможностям суперпользователя на покомандной основе.»

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

В настоящее время, использование этой утилиты рекомендуется исключительно в тех случаях, когда некоторому человеку необходимо предоставить доступ к части полномочий суперпользователя. То есть, заполнить лакуну образованную в результате реализации первоначальной идеологии Unix - все пользователи делятся на рядовых и суперпользователя без каких-либо промежуточных вариантов между ними. Для системы созданной в 1970-ом году это было нормально. Другие распространенные в то время ОС (например, семейства RSX-11 разработанной DEC) были устроены точно так же.
Никакой возможности ввести должности «администраторов сервисов» на них не было и о самой такой возможности в то время никто не думал.
Таким образом, при необходимости добавления пользователей с промежуточными правами в многопользовательской системе, использование команды sudo может быть оправданным. В любом случае, при компрометации учетной записи пользователя с расширенными правами, злоумышленник получит доступ не ко всей системе, а только к той части возможностей суперпользователя, которая доступна владельцу скомпрометированного account'а.

Теперь давайте рассмотрим работу в однопользовательской системе.
Постоянная работа под учетной записью суперпользователя во-первых, опасна тем, что случайные ошибки пользователя при наборе команд могут повредить всю систему.
На практике, эта причина не играет особой роли для опытных пользователей. Изуродовать систему проще всего ошибкой в команде администратора (mkfs, например), чем пользователя. Набрать по ошибке «rm -rf /» в командной строке способен только клинический идиот.
Намного более существенна вторая причина - при постоянной работе в сети пользователь всегда a priori должен считать свой домашний каталог скомпрометированным. Понятно, что если злоумышленник захочет получить доступ к Вашему компьютеру и подсунет Вам, к примеру трояна, которого Вы запустите под своей учетной записью, этот троян будет иметь возможность возможность делать всё, что угодно в Вашем каталоге. Но за его пределы он выйти не сможет.
Когда-то, несколько лет назад, я по определенным причинам опубликовал на lor'е программку из одной строчки на perl. В ней простой командой «y» (translate) была зашифрована команда оболочки «rm -rf /».
Как легко понять, эта команда не в состоянии удалить абсолютно ничего будучи запущена от имени простого пользователя. Она даже, по очевидным причинам, не сможет удалить его домашний каталог.
Что Вы думаете? Вопреки всем моим ожиданиям, на форуме нашлось немало людей, постоянно работающих под root'ом.

Давайте теперь представим, что злоумышленник хочет не проучить конкретного идиота, а получить неограниченный доступ к его компьютеру.
Тогда троян не станет ничего удалять. Он сделает всего две вещи: добавит некоторый доступный для записи каталог в начало PATH (прописав это, к примеру, в ~/.bashrc: export PATH=~/.config:$PATH), а затем создаст в добавленном каталоге сценарий с именем sudo, который будет имитировать стандартный вывод sudo и запрашивать пароль. Получив пароль, он передаст управление настоящей команде sudo
(echo $password | /usr/bin/sudo -S) и пользователь ничего не заметит.
Узнав пароль пользователя, сценарий получает полный доступ к системе и «заметает следы» - восстанавливает .bashrc, передает пароль злоумышленнику и удаляет сам себя (при необходимости, предварительно внеся дополнительные изменения в систему. Наилучшим образом для этого подходит замена какой-либо из разделяемых библиотек на библиотеку с «черным ходом»).
Дело сделано. Вашу систему теперь контролируют со стороны.
Можно ли было этого избежать? Да запросто - всегда указывайте абсолютный путь к программе. Питшите /usr/bin/sudo вместо sudo. Тогда злоумышленник даже псевдоним (alias) этой команды сделать не сможет. Но ответьте, положа руку на сердце, многие ли так делают?
Итак, команда sudo - это одна огромная дыра в безопасности системы, которая стирает грань между компрометацией учетной записи простого пользователя и компрометацией всей системы.

Каким образом пользователь может себя защитить от подобного рода угроз? Я не буду останавливаться на общесистемных средствах контроля безопасности, IDS и программах проверки целостности файлов (таких, как tripwire).
Всё гораздо проще - не пользуйтесь sudo. «su», понятное дело, тоже не пользуйтесь. Если Вам нужно выполнить какие-либо консольные команды от имени другого пользователя, особенно если это суперпользователь, переключитесь в текстовую консоль и введите комбинацию имя/пароль в ответ на приглашение Вашей верии getty.
Если Вы сами включали компьютер, Вы можете быть уверены, что приглашение исходит именно от той программы, которая была указана в файлах инициализации (/etc/inittab для большинства дистрибутивов, за исключением ubuntu и ему подобных, которые используют upstart и /etc/init/rc-sysinit.conf).
Если Вы не уверены в том, что приглашение исходит именно от mingetty - используйте "magic key kill" (Alt-SysRq-K, который, понятное дело, всегда должен быть включен).
Злоумышленника, которому удалось добраться до файлов инициализации либо подменить magic key, Вы можете не бояться. Его бояться уже поздно...

И последнее. Подменить обычную программу (скажем, "echo" или "ls") злоумышленник не сможет. И дело не в том, что echo - встроенная команда оболочки. Её легко подменить командой alias. Проблема в другом. Даже самого тупого пользователя немного удивит когда в ответ на ввод команды "echo" он получит ответ "для выполнения этой команды Вы должны ввести свой пароль. Вводите:"

exo
29-10-2012, 19:03
такой вопрос. Если у меня есть второй пользователь, то если мне нужно ему предоставить права на какую-нибудь утилиту, к примеру, dig, то я могу для этого использовать sudo.
Т.е. когда пользователь захочет ею воспользоваться, то введёт sudo dig oszone.net без пароля (если я правильно настрою права) ?
А так, статья понятна. Что можно заменить sudo на вредоносную программу, но реальна ли эта ситуация с подменой?

AMDBulldozer
29-10-2012, 19:11
Что можно заменить sudo на вредоносную программу, но реальна ли эта ситуация с подменой? »

1. В соответствии со статьей 51-ой Конституции Российской Федерации, я имею право не отвечать на этот вопрос! :wink:

Если у меня есть второй пользователь, то если мне нужно ему предоставить права на какую-нибудь утилиту, к примеру, dig, то я могу для этого использовать sudo. »

Да, конечно. Правда "dig" не совсем удачный пример - этой утилитой и так могут все пользоваться.

exo
29-10-2012, 19:20
Правда "dig" не совсем удачный пример - этой утилитой и так могут все пользоваться. »
у меня был случай, когда в системе (не в каталоге пользователя) был DIG, но не мог ей пользоваться...

AMDBulldozer
29-10-2012, 19:35
у меня был случай, когда в системе (не в каталоге пользователя) был DIG, но не мог ей пользоваться... »

Возможны два варианта:
1. Пользователь не имел права запустить файл. Тут надо смотреть права на файл и все родительские директории.
2. Dig запускался, но ему не хватало полномочий для работы. Такого я никогда не встречал, но представить подобную ситуацию несложно. Это могло быть либо следствием использования соответствующей политики безопасности, если ядро было компилировано с поддержкой таких политик, либо использованием правил брандмауэра (к примеру, с модулем "owner") для ограничения доступа в сеть. Ну и т.д. В таких ситуациях правильнее разобраться в причинах её возникновения и устранить их. Хотя, конечно, можно и пойти по предложенному Вами пути - это проще и быстрее.

exo
29-10-2012, 20:50
Очень часто можно встретить советы пользователям Linux не работать под учетной записю root, а пользоваться вместо этого командой "sudo". »
я бы сказал не просто часто, а всегда вижу это в статьях.

AMDBulldozer
29-10-2012, 23:15
я бы сказал не просто часто, а всегда вижу это в статьях. »

Это пишут по единственной причине - предлагают альтернативу, чтобы люди не работали под root'ом.
Правильный стиль работы, который был описан, выглядит достаточно неудобным - иметь несколько консолей, причем суперпользователь должен в идеале работать в текстовой, от которой уже давным-давно все отвыкли.
Я упоминал про то, что многие "юные хакеры" постоянно работают под root'ом и приводил пример, когда для некоторых из них это плохо заканчивалось.
Можете прочитать самое начало этой ветки (http://www.linux.org.ru/forum/development/392747). Читать её дальше не имеет смысла - она длинная, непонятная (бОльшую часть сообщений удалили модераторы) и неинтересная.
Краткий смысл в следующем: около десятка читаттелей lor'а уничтожили или серьезно повредили свои файловые системы.
Поэтому, конечно, для подобных деятелей sudo куда меньшее зло. Но зачем вообще выбирать из двух зол?

exo
30-10-2012, 00:15
причем суперпользователь должен в идеале работать в текстовой, от которой уже давным-давно все отвыкли »
я работаю только в терминале. по причине не использования графики на серверах... или другое имелось ввиду?

AMDBulldozer
30-10-2012, 00:20
я работаю только в терминале. по причине не использования графики на серверах... или другое имелось ввиду? »


Нет, имелось в виду именно это.
Но Ваш случай, согласитесь, достаточно нетипичен. Насколько я понимаю, подавляющее большинство пользователей Linux предпочитает работать в графической среде. Я был искренне удивлен, когда однажды выяснил, что некоторые пользователи ничего не знают даже о самом факте существования текстовых консолей.

exo
30-10-2012, 00:50
что некоторые пользователи ничего не знают даже о самом факте существования текстовых консолей »
наверное, дело в том, что у каждого свои нужды.

shisik
31-10-2012, 01:49
Сидеть всё время от рута, я имею в виду логин от рута в иксах и, соовтетственно, запуск всех без исключения приложений от рута - это самое худшее, что можно придумать в Линуксе. Хуже может быть только разве что автологин в этот самый рут. А ведь во многих говносборках именно так и сделано, в частности китайский NeoShine Kylin Linux OS, который установлен на подаренных Украине компах из Китая, - недавно столкнулся...

zai
01-11-2012, 15:26
Очень часто можно встретить советы пользователям Linux не работать под учетной записю root, а пользоваться вместо этого командой "sudo".
Данные советы глубоко ошибочны.»
Если немного включить логику, то как часто приходиться пользоваться sudo, когда комп уже настроен? Раз в неделю (если только его постоянно не ковырять), в лучшем случае!!!

El Scorpio
07-11-2012, 06:11
. Насколько я понимаю, подавляющее большинство пользователей Linux предпочитает работать в графической среде. »
В отдельную текстовую консоль нельзя, например, скопировать текст из интернета, а забивать длинные строки по памяти неудобно. Проще запустить terminal или другую программу для работы с консолью в окне и скопировать текст нужной команды

Rezor666
08-11-2012, 12:31
Почему не нужно использовать "sudo" на домашней Linux-системе »
Вот новички будут рады...
А если по существу то шанс заразить систему и без sudo достаточно.
Соц инжинерния, эксплойты, да обычная криворукость.
Напоминает картинку где волк из ну погоди и фраза "В России там много проблем: корупция, проституция, насилие а бороться решили с мультиками..."




© OSzone.net 2001-2012