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" он получит ответ "для выполнения этой команды Вы должны ввести свой пароль. Вводите:"
Данные советы глубоко ошибочны. Попробуем разобраться, почему это именно так.
Начнем с истории создания данной утилиты. А началась эта история 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" он получит ответ "для выполнения этой команды Вы должны ввести свой пароль. Вводите:"