Как запустить определенную программу с правами суперпользователя (ОС Ubuntu), когда в систему не вошел ни один пользователь sudo? Программа нуждается в привилегиях суперпользователя для правильной работы. Обычный пользователь не должен быть в состоянии остановить этот процесс. Например, у меня есть два пользователя, Admin и Client; Программа должна запускаться только тогда, когда клиент входит в систему. Ему нужны привилегии суперпользователя, и клиент не должен быть в состоянии остановить этот процесс.
изменён williamstome 103
задан Alexander 24
2 ответа 2
- Системные ботинки. Upstart запускает службы, включая GDM (/etc/init/gdm).
- GDM запускается, инициализирует X-сервер (/etc/gdm/Init/*) и представляет окно входа в систему с графическим интерфейсом.
- Пользователь входит в систему.
- Происходит авторизация PAM (/etc/pam.d/gdm)
- GDM запускает скрипт PostLogin (/etc/gdm/PostLogin/*).
- GDM запускает скрипт PreSession (/etc/gdm/PreSession/*).
- GDM запускает скрипты Xsession и xinit
(/etc/gdm/Xsession, /etc/X11/xinit/xinitrc.d/*, /etc/X11/Xsession, /etc/X11/Xsession.d/*)
ranger. Запуск внешних команд с правами суперпользователя
Где запустить свой скрипт
Все до XSession запускается как root. /etc/gdm/Xsession и все остальное после запуска от имени пользователя. Это оставляет вам три реальных варианта, где запустить ваш скрипт.
- Измените сценарии GDM/KDM PostLogin или PreSession для запуска вашей программы. Имя пользователя доступно в переменных среды USER или USERNAME.
- Используйте PAM для выполнения вашего скрипта. PAM установит авторизующего пользователя в переменную окружения PAM_USER . Добавьте это в /etc/pam.d/gdm, чтобы запустить ваш скрипт:
auth required pam_exec.so /path/to/your/script
- Возможно, вы сможете использовать PAM для сопоставления с конкретным пользователем (как в этом ответе), поэтому сценарий будет запускаться только для этого пользователя и не должен будет сопоставлять пользователей сам. У меня нет опыта PAM, чтобы объяснить, как это сделать.
# start when GDM’s PreSession script runs start on desktop-session-start
Сигнал от PreSession не передается по имени пользователя, поэтому вам нужно настроить сигнал. В /etc /gdm /PreSession /Default найдите строку initctl и измените ее на эту. Вы также можете использовать USERNAME вместо USER.
# add USER variable so Upstart script can find it initctl -q emit desktop-session-start DISPLAY_MANAGER=gdm USER=$USER
Как избежать пользователя Admin
Ваш сценарий должен проверить имя пользователя / пользователя в переменных среды, которые он получает от одного из этих методов, и использовать его, чтобы определить, следует ли прервать или продолжить. Стандартные методы сценариев оболочки будут работать. В зависимости от того, какое начальное местоположение вы выбрали из приведенного выше списка, имя пользователя может быть доступно в переменных среды USER, USERNAME или PAM_USER .
Создать пользователя с правами суперпользователя Linux
Источник: poweruser.guru
Я есть Рут! Суперпользователь в Linux-дистрибутивах
Поговорим сегодня об очень важной составляющей Linux-дистрибутивов: правах на файлы, разграничений привилегий и суперпользователе. Периодически взаимодействие с системой (даже не на уровне терминала) будет требовать введения пароля суперпользователя. Поэтому нужно понимать, что это за пароль, кто такой суперпользователь и почему быть им не всегда круто.
Все есть файл
Ключевой подход к организации файловой системы Linux состоит в представлении о том, что все объекты в системе есть файлы. Будь то папка, программа, флэшка или раздел жесткого диска. С файлами (чем-бы они не являлись для простого пользователя) можно выполнять следующие операции:
- чтение (read)
- запись (write)
- выполнение (execute)
Кроме того, мы должны помнить, что часть файлов в системе необходимо защищать от произвольного к ним доступа, случайной записи или ненужного выполнения. Пользовательские файлы ограничивать также, как и системные, не стоит, так как это причинит пользователю неудобства при обычных сценариях использования системы.
Получается, что права обычного пользователя Linux сильно ограничены, он может управлять только своим каталогом и открывать для чтения определенные файлы из корневого раздела. Доступ для их изменения или установки программ отсутствует.
Суперпользователь или root
Полный набор прав по управлению файлами в системе имеет только пользователь root (аналогичное название имеет папка, где размещаются все системные файлы — root или корневой раздел). Для дистрибутива root-пользователь полноправный хозяин, который может делать абсолютно все, вплоть до попыток удаления важных системных файлов. Поэтому делать каждого пользователя в системе root-пользователем небезопасно.
Становимся суперпользователем. Команда sudo
Иногда даже перед обычным пользователем возникает необходимость, например, установки пакета, что невозможно сделать без прав суперпользователя. В таком случае и применяется программа sudo (от англ. Substitute User and do, «подменить пользователя и выполнить»). Она подменяет текущего пользователя на root и позволяет выполнять с системой нужные действия.
Условием доступа к права root-пользователя является наличие пароля, который вы задаете во время установки дистрибутива. После выполнения нужных действий (например, после установки пакета) права суперпользователя отзываются.
Так как sudo это отдельный пакет, то, например, в Debian он не установлен по-умолчанию. Его нужно отдельно установить и дать понять системе, что текущая учетная запись пользователя может иметь права суперпользователя.
Получается, когда вы устанавливаете программу через стандартный менеджер и выскакивает окошко с запросом пароля, то после его ввода вашей учетной записи предоставляются root-права. Они будут сохранятся (т. е. не нужно будет вводить пароль постоянно) до следующего выхода из системы.
Большую значимость разграничение прав пользователей имеет, естественно, при работе с Linux-серверами. В дистрибутивах со средами рабочего стола касаться root-прав и суперпользователя приходится крайне редко. Но, по крайней мере, вы теперь знаете, почему при осуществлении каких-либо операция система просит у вас ввода пароля.
Напоминаю про поддержку канала и меня, как автора, лайками, комментариями и подписками! Очень радует, когда читатели дают обратную связь, приятно видеть, что счетчик подписчиков растет, значит материалы, которые появляются здесь, кому-то интересны и, быть может, даже полезны.
Источник: dzen.ru
Как получить права root в Linux
Получив права root вы сможете делать в системе что захотите: закрепиться на будущее, внедрить бэкдор, оставить руткит или троян и т.п. Поэтому повышение привилегий в Linux — один из важнейших этапов при пентесте. В статье я расскажу, как получить права root в Linux.
В общем случае эскалация привилегий — это получение прав в системе выше, чем у вас уже есть. Но чаще всего имеется в виду получение доступа к учетной записи root в Linux.
Почему становится возможным повысить права в системе, казалось бы призванной предотвращать подобное? Причин много. Вот, как мне кажется, основные:
- уязвимости в приложениях/скриптах;
- неверная конфигурация ОС и приложений;
- забытые критически важные данные (пароли, логины, бэкапы и прочее);
- уязвимости в ядре ОС.
Ну а основная причина всегда одна и та же — людские ошибки. В идеальной вселенной, скорее всего, повысить привилегии не удалось бы. Но человеческий фактор делает это возможным, поэтому наслаждаемся.
Как получить права root в Linux
Прежде чем что-то делать, нужно понять, с чем мы будем иметь дело. Конечно, кое-что мы узнаем о системе, изучив ее на этапе проникновения, но теперь нужно подробнее выяснить, что именно нам может помочь подняться до root.
Какие-то вещи мы можем узнать вручную. Например, получить сведения о ядре:
uname — a 2 > / dev / null
Или о процессоре:
cat / proc / cpuinfo 2 > / dev / null
cat / etc /*- release 2 > / dev / nul
Можно, конечно, и дальше собирать информацию с помощью терминала, но это долго. Гораздо проще и эффективнее использовать специальные инструменты. Самые распространенные из них:
- privilege-escalation-awesome-scripts-suite (linPEAS);
- LinEnum;
- PXEnum;
- linuxprivchecker;
- SysEnum;
- linux-smart-enumeration.
Все они работают одинаково: последовательно запускают команды bash или короткие скрипты, а вывод отправляют в stdout или лог-файл в зависимости от параметров.
Так примерно выглядит вывод подобного инструмента.
Давайте теперь разберем несколько примеров уязвимостей и посмотрим, как можно их эксплуатировать.
Забытые критические данные
Первое, что стоит проверить, — это забытые критические данные. Ничего не стоит заглянуть в домашние папки юзеров и посмотреть, не хранит ли кто-то на рабочем столе файл с паролем или ключами от чего-нибудь нужного. Это случается редко, но все же случается.
Иногда учетные данные хардкодят в скриптах и конфигах. Стоит также проверить историю шелла, там тоже могут найтись длинные команды, содержащие учетные данные. А иногда бывает, что пользователь набрал пароль, когда консоль его не запрашивала, и он тоже сохранится в истории.
SUID/GUID
Флаги setuid и setgid позволяют пользователю запускать программы от имени владельца. Например, когда надо запускать программу от рута, а пользователь рутом не является. Чаще всего встречается SUID. Устанавливается этот бит легко:
chmod + s / bin / script
Подразумевается, что программа с таким флагом не сможет делать ничего, кроме того, для чего она предназначена. Но так как все мы люди и ошибаемся, то это хорошо порой ошибки позволяют скомпрометировать систему. Чаще всего к возможности повысить привилегии приводит возможность программы производить запись в файловую систему или каким-то образом выполнять код.
В первую очередь нас интересуют файлы, владелец которых — root. Найти их можно руками, такой командой:
find / — user root — perm — u = s — type f 2 > / dev / null
Как вариант — можно поискать в выводе тулз, которые я перечислил выше. Так или иначе, если найдете файлы с подобными разрешениями, значит, у вас есть шанс получить root права.
Вот вывод таких файлов из LinEnum . sh .
Из интересных файлов — find . LinEnum даже услужливо его подсветил отдельно.
Это позволит довольно легко получить привилегии.
Linux Capabilities
Так как предыдущий способ дает избыточные права файлам, в 1997 году была придумана идея дополнительных разрешений — linux capabilities. Если коротко, то идея состоит в том, чтобы давать не полные привилегии, а только часть, необходимую для выполнения задачи.
Как это используется? Для начала найдем подобные файлы в системе.
getcap — r / 2 > / dev / null
А вот результат.
Классический пример иллюстрации — это исполняемый файл tar с разрешением cap_dac_read_search + ep , которое позволяет ему читать любой файл в системе. Это означает, например, возможность получить архив с файлом / etc / shadow , который от лица обычного пользователя недоступен на чтение. Доступ к этому файлу даст нам хеши паролей, в том числе от root, который мы можем попробовать сбрутить.
Еще встречается пустое разрешение = ep . Когда выставлено такое разрешение (есть знак «равно» в начале, и не перечислен список разрешений), это значит, что файлу предоставлены все возможные разрешения. В примере такие разрешения есть у файла openssl .
Этот пример позволит нам прочитать файл / etc / shadow .
И прочитаем файл.
Далее мы можем просто сгенерить новый shadow и перезаписать им системный. Создадим новый хеш, заменим им хеш (в примере — восклицательный знак) и подготовим файл для заливки.
Копируем его в / etc / shadow и логинимся.
Cron
Cron — это служба Unix, которая используется для периодического выполнения скриптов. Действия описываются в файле / etc / crontab и в специальных каталогах (например, / etc / cron . daily ).
Скрипты используются для самого широкого спектра задач — от создания бэкапа по расписанию до очистки директории / tmp .
Если у таких скриптов неаккуратно выставлены привилегии, то это может стать находкой для атакующего. Когда администратор ставит привилегии как попало, «просто чтобы работало», он вполне может написать chmod 777 , что позволит нам отредактировать вызываемый по расписанию скрипт. Поскольку cron запускает файлы от имени root, ничто не мешает вызывать рутовый шелл заодно со скриптом.
Sudo
Программа sudo позволяет выполнять команды от имени суперпользователя (либо других пользователей системы). Ее конфиг находится в / etc / sudoers , и, как правило, ошибки в этом конфиге открывают возможности эскалации привилегий. Сценариев использования — множество, можно выбирать по ситуации. Один из таких вариантов ниже.
Проверяем, какие есть разрешения у sudo .
Здесь редактор vi можно открыть без пароля, и он запустится от имени root. В этом случае проще всего выполнить шелл через редактор, который тоже запустится от рута.
Иногда админы дают разрешение на запуск обычных скриптов sh, и те остаются доступными для записи. Их, конечно же, можно использовать для получения шелла и любых других действий.
Еще один способ абьюзить sudo — возможность внедряться в процесс с действующим токеном.
Эксплоиты для ядра
Как и в любой другой программе, в ядре Linux тоже есть уязвимости. Иногда эти уязвимости позволяют получить права root. Как и в остальных способах, здесь не существует универсального рецепта, и успешная эксплуатация зависит от многих факторов: версии ядра, наличия необходимых разрешений или файлов и даже наличия нужного железа (например, уязвимого перед Meltdown процессора).
На скриншоте ниже — поиск эксплоитов для ядра Linux в Kali.
При многообразии вариантов эксплуатации не все они окажутся рабочими. Может не быть эксплоита под конкретное ядро, либо версия ядра правильная, но оно уже пропатчено. Некоторые эксплоиты работают нестабильно. И так далее.
Наверняка многие помнят уязвимость в ядре, известную как Dirty COW. Баг позволяет спровоцировать состояние гонки, а это приводит к тому, что пользователь без привилегий получает доступ на запись к memory mappings (хотя доступ должен быть только на чтение) и может повысить свои привилегии до root.
Существует несколько эксплоитов для этой уязвимости.
На конкретной системе будут работать не все из них, так что всегда есть смысл перебирать разные варианты.
Другие примеры уязвимостей для повышения привилегий:
- CVE 2017-16995;
- CVE 2013-1959;
- CVE 2012-0056;
- CVE 2010-3904.
Конечно, это не все уязвимости. Их намного больше, и вы всегда можете поискать их описанным выше способом или покопаться на exploit-db.com и других сайтах для поиска уязвимостей.
Заключение
Способов получить рут права в Linux — множество, и я здесь прошелся только по самым очевидным и распространенным. Тем, что встречаются и в реальной жизни, и на CTF, и на экзаменах.
Вообще зачастую это творческая задача: может не сработать ни один из способов, но поможет какая-то, порой неочевидная комбинация из разных. Универсального рецепта здесь нет, и систему всегда нужно анализировать всесторонне.
На сайте GTFOBins есть отличная подборка способов использовать разные популярные утилиты для повышения привилегий. Но помните: этот список на самом деле значительно больше, просто нам еще пока не все известно!
Источник: spy-soft.net