Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Защита компьютерных систем (http://forum.oszone.net/forumdisplay.php?f=20)
-   -   Почему не нужно использовать "sudo" на домашней Linux-системе (http://forum.oszone.net/showthread.php?t=245740)

AMDBulldozer 29-10-2012 18:45 2014465

Почему не нужно использовать "sudo" на домашней Linux-системе
 
Очень часто можно встретить советы пользователям 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 2014481

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

AMDBulldozer 29-10-2012 19:11 2014487

Цитата:

Цитата exo
Что можно заменить sudo на вредоносную программу, но реальна ли эта ситуация с подменой? »

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

Цитата:

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

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

exo 29-10-2012 19:20 2014491

Цитата:

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

у меня был случай, когда в системе (не в каталоге пользователя) был DIG, но не мог ей пользоваться...

AMDBulldozer 29-10-2012 19:35 2014502

Цитата:

Цитата exo
у меня был случай, когда в системе (не в каталоге пользователя) был DIG, но не мог ей пользоваться... »

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

exo 29-10-2012 20:50 2014562

Цитата:

Цитата AMDBulldozer
Очень часто можно встретить советы пользователям Linux не работать под учетной записю root, а пользоваться вместо этого командой "sudo". »

я бы сказал не просто часто, а всегда вижу это в статьях.

AMDBulldozer 29-10-2012 23:15 2014700

Цитата:

Цитата exo
я бы сказал не просто часто, а всегда вижу это в статьях. »

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

exo 30-10-2012 00:15 2014739

Цитата:

Цитата AMDBulldozer
причем суперпользователь должен в идеале работать в текстовой, от которой уже давным-давно все отвыкли »

я работаю только в терминале. по причине не использования графики на серверах... или другое имелось ввиду?

AMDBulldozer 30-10-2012 00:20 2014745

Цитата:

Цитата exo
я работаю только в терминале. по причине не использования графики на серверах... или другое имелось ввиду? »


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

exo 30-10-2012 00:50 2014761

Цитата:

Цитата AMDBulldozer
что некоторые пользователи ничего не знают даже о самом факте существования текстовых консолей »

наверное, дело в том, что у каждого свои нужды.

shisik 31-10-2012 01:49 2015545

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

zai 01-11-2012 15:26 2016533

Цитата:

Цитата AMDBulldozer
Очень часто можно встретить советы пользователям Linux не работать под учетной записю root, а пользоваться вместо этого командой "sudo".
Данные советы глубоко ошибочны.»

Если немного включить логику, то как часто приходиться пользоваться sudo, когда комп уже настроен? Раз в неделю (если только его постоянно не ковырять), в лучшем случае!!!

El Scorpio 07-11-2012 06:11 2020567

Цитата:

Цитата AMDBulldozer
. Насколько я понимаю, подавляющее большинство пользователей Linux предпочитает работать в графической среде. »

В отдельную текстовую консоль нельзя, например, скопировать текст из интернета, а забивать длинные строки по памяти неудобно. Проще запустить terminal или другую программу для работы с консолью в окне и скопировать текст нужной команды

Rezor666 08-11-2012 12:31 2021447

Цитата:

Цитата AMDBulldozer
Почему не нужно использовать "sudo" на домашней Linux-системе »

Вот новички будут рады...
А если по существу то шанс заразить систему и без sudo достаточно.
Соц инжинерния, эксплойты, да обычная криворукость.
Напоминает картинку где волк из ну погоди и фраза "В России там много проблем: корупция, проституция, насилие а бороться решили с мультиками..."


Время: 20:07.

Время: 20:07.
© OSzone.net 2001-