Обход ограничения на запуск любых программ от root в Kali Linux


Для выполнения некоторых программ требуются повышенные привилегии – привилегии суперпользователя, права root. А некоторые программы наоборот – не хотят запускаться с повышенными привилегиями. Среди последних на вскидку я могу назвать VLC, Tor Browser, Google Chrome, Chromium.

Почему опасно запускать с root правами VLC, Tor Browser, Google Chrome, Chromium и т.д.?

Главное объяснение – меры безопасности. Например, в теории можно так сформировать медиа поток для VLC media player, что он будет каким-то образом угрожать вашей системе – например, позволит удалённо выполнить команду.

Аналогично с веб-браузерами – в них регулярно находят разные уязвимости, одна из этих уязвимостей может позволить выполнять команды или делать изменения на файловой системе, что, при наличии достаточных прав у веб-браузера, может привести к компрометации (взлому) системы пользователя, у которого он запущен.

Безусловно, это правильные рассуждения, но насколько повыситься уровень угрозы при запуске пары дополнительных программ с правами суперпользователя в системе, где всё остальное (т.е. вообще всё, в том числе другой браузер и другой медиа проигрыватель), работают с правами root? На мой взгляд, это больше риторический, а не практический вопрос.

Насколько опасно работать в учётной записи пользователя root?

Во многих уважаемых источниках (веб-ресурсах, книгах) можно встретить мнение, что работа под root – это так плохо, что уже почти ппц. Это не просто плохо – это уже как в Windows. Также имеется расхожее мнение, что Linux – это какая-то неуязвимейшая система и вам ничего не угрожает, если вы работает под обычным пользователем (по крайней мере, там точно не нужен антивирус).

Обе эти позиции странные. Для выполнения команды, делающий файл исполнимым любым пользователем, не нужны права рута:

chmod +x /home/user/путь/до/файла

Для доступа к настройке автозапуска через crontab -e от имени обычного пользователя не нужны права root’а. Поэтому примерно следующая запись cron может добавить файл в автозагрузку с правами текущего пользователя:

@reboot /home/user/путь/до/файла

Примечание: @reboot в cron работает не всегда (учитывайте, если делаете свои тесты), но это не является проблемой. Также файл должен быть исполнимым и если это скрипт, то в нём должен быть шебанк (например, #!/bin/bash).

Также не нужны права рута для записи в файл ~/.bashrc (это является примерным аналогом автозапуска, но срабатывает только при открытии консоли).

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

Само-собой разумеется, имея права суперпользователя можно скомпрометировать систему не только для текущего, но и для всех пользователей, увеличить скрытность (например, используя низкоуровневые методы подключения и туннелирования, методы руткитов для сокрытия и т.д.). Но если уж в веб-браузере есть дыра, позволяющая выполнять команды с правами обычного пользователя или иметь доступ к файловой системе с правами обычного пользователя, то возможна компрометация этого обычного (не root) пользователя. Даже если у него нет прав на выполнении sudo.

Второй причиной, по которой рекомендуют использовать обычную учётную запись – невозможность навредить системе. Это действительно так. Но это супердостоинство, к сожалению, почти полностью нивелируется, если у пользователя всё-таки есть право использовать sudo. Могу показать на своём собственном примере, однажды я перепутал команду

rm -rf ~/bin/

с командой:

rm -rf /bin/

Поскольку я был обычным пользователем, то система не дала мне выполнить вторую команду. Но в поддиректории bin, которая размещается в домашней папке, я запускал программы от суперпользователя. Я подумал, что какая-то из этих программ создала файл, на удаление которого у меня не хватает прав. И перезапустил rm -rf /bin/ добавив к ней sudo. Понятно, что такая невнимательность стоила мне затраченного на переустановку системы времени.

Тем не менее, если вы считаете, что в Kali Linux работа под root’ом в приложениях опасна, то стоит задуматься о смене учётки root на обычного пользователя. Это автоматически разрешит проблему с запуском VLC, Tor Browser, Chromium и т.п. под учётной записью root.

1. Создание и работа под обычным пользователем в Kali Linux

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

Создание нового пользователя в Kali Linux:

useradd -m -G sudo -s /bin/bash new_user

Замените new_user на желаемое имя.

Установите для него пароль:

passwd new_user

Также замените new_user на выбранное ранее имя пользователя.


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

Достоинством метода является раз и навсегда решение проблемы с программами, которые не хотят запускаться под рутом, а также возможность полноценного использования Cinnamon.

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

Linux позволяет вам запускать программы от имени других пользователей. Т.е. вы по-прежнему можете использовать учётную запись root, но делать запуск проблемных программ от имени обычного пользователя. Для этого создадим его:

useradd -m -G sudo -s /bin/bash new_user

Замените new_user на желаемое имя.

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

Мы будем использовать команду:


xhost + && su -c /путь/до/файла/запуска new_user && xhost -

В ней /путь/до/файла/запуска меняйте на файл, который будете искать с помощью команды which, new_user на имя пользователя, которого вы создали.

Как запустить Chromium в Kali Linux

Установите пакет:

apt-get install chromium

Найдите путь файла запуска:

which chromium
/usr/bin/chromium

Сформируйте команду:

xhost + && su -c /usr/bin/chromium new_user && xhost -

Сделайте проверку:

Создайте ярлык:

gedit Рабочий\ стол/Chromium.desktop

В открывшийся текстовый файл скопируйте-вставьте следующее:


[Desktop Entry]
Name=Chromium
Encoding=UTF-8
Exec=sh -c "xhost + && su -c /usr/bin/chromium new_user && xhost -"
Icon=/usr/share/icons/hicolor/256x256/apps/chromium.png
StartupNotify=false
Terminal=false
Type=Application

Как запустить VLC в Kali Linux

Установите пакет:

apt-get install vlc

Найдите путь файла запуска:

which vlc
/usr/bin/vlc

Сформируйте команду и сделайте проверку:

xhost + && su -c /usr/bin/vlc new_user && xhost -

Создайте ярлык:

gedit Рабочий\ стол/VLC.desktop

В открывшийся текстовый файл скопируйте-вставьте следующее:

[Desktop Entry]
Name=VLC
Encoding=UTF-8
Exec=sh -c "xhost + && su -c /usr/bin/vlc new_user && xhost -"
Icon=/usr/share/icons/hicolor/256x256/apps/vlc.png
StartupNotify=false
Terminal=false
Type=Application

Как запустить Google Chrome в Kali Linux

Скачиваем Google Chrome с официального сайта: https://www.google.ru/intl/ru/chrome/browser/desktop/index.html

Для 64-битной кали скачиваете файл «64 bit .deb (для Debian/Ubuntu)».

Перейдите в папку со скаченным файлом:

cd Загрузки/

Установите скаченный файл:

dpkg -i google-chrome-stable*.deb
apt-get install -f

Найдите путь файла запуска:

which google-chrome
/usr/bin/google-chrome

Сформируйте команду и сделайте проверку:

xhost + && su -c /usr/bin/google-chrome new_user && xhost -

Создайте ярлык:

gedit Рабочий\ стол/Google_Chrome.desktop

В открывшийся текстовый файл скопируйте-вставьте следующее:


[Desktop Entry]
Name=Google Chrome
Encoding=UTF-8
Exec=sh -c "xhost + && su -c /usr/bin/google-chrome new_user && xhost -"
Icon=/usr/share/icons/hicolor/256x256/apps/google-chrome.png
StartupNotify=false
Terminal=false
Type=Application

Добавление ярлыков на рабочий стол GNOME 3 в Kali Linux

По умолчанию в Kali Linux нет инструментов для удобного создания ярлыков на рабочем столе. Для создания ярлыка на рабочем столе в GNOME 3 можно воспользоваться обычным текстовым редактором. Создайте текстовый файл на рабочем столе с расширением .desktop. В этот файл скопируйте следующий шаблон:

Name=Имя программы
Encoding=UTF-8
Exec=sh -c "Команда запуска"
Icon=Пут до файла с изображением
StartupNotify=false
Terminal=false
Type=Application

В нём нужно заменить:

  • Имя программы – на имя, которое вы хотите, чтобы отображалось для ярлыка
  • Команда запуска – путь до исполнимого файла, можно использовать сочетания команд для запуска (как в наших примерах)
  • Пут до файла с изображением – графический файл, который будет иконкой для ярлыка.

Я искал эти файлы прямо в системе, используя программу locate (по ссылке примеры использования этой программы). После установки нового пакета, обновите базу данных:

updatedb

Чтобы найти нужные изображения, я использовал такие команды как:

locate -b -r 'chromium.*png'
locate -b -r 'vlc.*png'
locate -b -r 'chrome.*png'

При первом запуске ярлыка появится такое предупреждение:

Нажмите «Считать проверенным».

3. Способы удаления проверки запуска программы от root’а

Кроме универсального способа – запуск программы от обычного пользователя, либо переход на использование учётной записи обычного пользователя, у каждой программы есть свои варианты обхода. Например, загрузчиком Tor Browser является скрипт (обычный текстовый файл), в котором проводится проверка, запущена ли программа с правами рута. Поэтому достаточно в этом файле (/opt/Browser/start-tor-browser) строку «id -u» заменить, например, на «echo 1» и Tor Browser будет запускаться от рута.

Для Chromium и Google Chrome имеется ключ --no-sandbox, который позволяет открывать эти программы в Kali Linux без дополнительных манипуляций:

chromium --no-sandbox
google-chrome --no-sandbox

Запуск программы VLC осуществляется бинарным файлом, который можно пропатчить следующей командой:

sed -i 's/geteuid/getppid/' /usr/bin/vlc

Также VLC можно скомпилировать самому с флагом --enable-run-as-root.

Заключение

Итак, в этой статье:

  • мы попытались оценить дополнительные риски опасности, возникающие при запуске программ с правами суперпользователя;
  • научились создать обычных пользователей в Linux;
  • узнали, как можно запустить VLC, Google Chrome, Chromium и любые другие программы в Kali Linux будучи root’ом (о том, как запустить Tor Browser в Kali Linux смотрите здесь);
  • (бонус) научились создавать пользовательские ярлыки на рабочем столе Kali Linux.

Если у вас трудности с какой-то другой программой, которая не хочет запускаться в Kali Linux под рутом, то пишите её название здесь в комментариях – будет добавлена инструкция для решения этой проблемы.


Рекомендуется Вам:

5 комментариев to Обход ограничения на запуск любых программ от root в Kali Linux

  1. Заха:

    Доброе время суток. Очень познавательная статья. Меня она очень выручила.
    Осталась еще одна задумка. Вопрос такой, как не создавая ярлыка на рабочем столе, запускать приложение (Chrome, Chromium) с правами обычного пользователя?
    Мне нравиться держать рабочий стол чистым. Но после создания ярлыка, как описано в статье я не могу добавить его в приложения. Есть ли способ добавить значек в "приложения", и запускать с правами обычного пользователя?
    Спасибо.

    • Alexey:

      Идея хорошая. Сам хотел разобраться с меню Kali Linux (например, добавить раздел Анонимность с ярлыками для перенаправления всего трафика через Tor), даже начал писать статью-инструкцию. Но это оказалось не так просто – инструменты для редактирования меню работают некорректно в Kali Linux. Поэтому приходится редактировать текстовые файлы, которые отвечают за ярлыки, категории и подкатегории, но пока я разбирался какой файл за что отвечает, у меня начали закипать мозги.

    • Alexey:

      Я всё-таки разобрался с меню, добавление новых ярлыков программ в меню описано здесь: https://hackware.ru/?p=5283

  2. давид:

    здравствуйте, у меня после того как я создал юзера спрашивает пароль, при создании юзера его не спрашивали, а когда захожу в юзера и пытаюсь поставить chromium просит пароль. 0000, root,toor- не принимает. что мне сделать?

    • Alexey:

      Находясь на этой странице, в своём браузере нажмите CTRL+f, в открывшееся окно поиска введите:

      passwd

      Будет найдена строка, прочитайте одну строку до неё и одну строку после неё.

Добавить комментарий для Alexey Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *