Вход в линукс с правами root. Запуск программ вручную с привилегиями root. Право на изменение файла

|

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

Требования

  • Базовые навыки работы с Linux.
  • Сервер Linux (опционально).

Пользователи Linux

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

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

Чтобы просмотреть всех пользователей системы, проверьте файл /etc/passwd. Каждая строка в этом файле содержит данные об отдельном пользователе, начиная с имени пользователя (перед первым символом двоеточия). Чтобы вывести содержимое файла на экран, введите:

Суперпользователь

Кроме основных двух типов пользователей в Linux существует также суперпользователь, или root. Этот пользователь может переопределять права других пользователей на файлы и ограничивать доступ. По сути, суперпользователь имеет права доступа ко всем файлам, существующим на сервере. Этот пользователь имеет право вносить общесистемные изменения, потому его безопасность очень важна для безопасности самого сервера.

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

Группы Linux

Группы представляют собой наборы из 0 или более пользователей. Пользователь принадлежит к группе по умолчанию, а также может быть членом какой-либо из других групп.

Чтобы просмотреть все доступные группы и списки их членов, откройте файл /etc/group.

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

В Linux каждый файл принадлежит одному пользователю и одной группе и имеет индивидуальные настройки доступа.

Для просмотра прав доступа используется команда ls. Она имеет длинный список опций (например, ls -l myfile). Чтобы просмотреть настройки доступа к файлам в текущем каталоге, запустите команду без аргументов:

Чтобы запросить содержимое каталога /etc, введите:

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

В целом вывод команды ls довольно легко понять, кроме, пожалуй, первого столбца, который описывает права доступа к файлу. Он выглядит примерно так:

drwxrwxrwx
drwxrwx---
-rw-rw----
drwx------
-rw-------

Чтобы понять, что значат эти буквы и дефисы, разделим содержимое столбца на его компоненты. Первую строку вышеприведённого примера можно разделить на следующие категории:

d rwx(1) rwx(2) rwx(3)

  • d – поле типа файла.
  • rwx(1) – права пользователя-владельца файла.
  • rwx(2) – права группы-владельца.
  • rwx(3) – права остальных пользователей.

Типы файлов

В Linux существует два основных типа файлов: обычные и специальные.

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

Файл является специальным, если в поле типа содержится буква. Такие файлы обрабатываются операционной системой иначе, чем обычные файлы. Символ в поле типа файла указывает, к какому виду специальных файлов относится определенный файл. Самым распространённым видом специальных файлов является каталог (или директория), он определяется символом d (как в примере выше). В системе Linux существует несколько видов специальных файлов, но данная тема выходит за рамки этой статьи.

Классы доступа

Как говорилось ранее, каждый файл имеет настройки для трёх категорий (или классов) доступа:

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

Такого порядка привилегий придерживаются все дистрибутивы Linux.

Виды доступа

  • r (read) – право на чтение файла,
  • w (write) – право на изменение (редактирование),
  • x (execute) – право на запуск (в некоторых особых случаях вместо х может использоваться другой символ).

Если вместо символа стоит дефис, значит, данный класс не имеет соответствующего права доступа. Например:

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

Рассмотрим подробнее, что именно даёт каждый вид доступа.

Примечание : Чтобы обеспечить нормальный доступ к файлам и каталогам, виды доступа часто используются в сочетании друг с другом.

Право на чтение файла

Право на чтение обычного файла – это возможность просматривать его содержимое.

Право на чтение каталога позволяет пользователю просматривать имена файлов, хранящихся в нём.

Право на изменение файла

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

Если у пользователя есть право на изменение каталога, то такой пользователь может удалить каталог, изменять его содержимое (то есть, создавать, переименовывать или удалять файлы в нём) и содержимое хранящихся в нём файлов.

Право на запуск

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

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

Примеры привилегий

Теперь рассмотрим несколько полезных общих примеров прав доступа к файлу.

  • -rw——-: доступ к файлу имеет только пользователь-владелец файла.
  • -rwxr-xr-x: любой пользователь системы может запустить такой файл.
  • -rw-rw-rw-: любой пользователь системы имеет право на изменение такого файла.
  • drwxr-xr-x: любой пользователь системы может читать данный каталог.
  • drwxrwx—: содержимое каталога могут читать и изменять только пользователь и группа-владелец.

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

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

Примечание : Чтобы научиться изменять права доступа, читайте . В нем речь идёт об использовании команд chown, chgrp и chmod.

Заключение

Теперь вы знакомы с основными понятиями, связанными с правами доступа и собственности в окружении Linux.

Tags:

Как вы знаете, Linux очень серьезно относится к управлению пользователями и предоставлению им прав на работу с системой. Обычный пользователь может записывать файлы только в свой каталог и каталог /tmp/. Также есть возможность читать некоторые файлы в корневой файловой системе. Но вы не можете устанавливать программы, ведь для этого нужно право на запись, не можете изменять атрибуты файлов, не можете запускать сервисы, не можете читать некоторые файлы логов и еще много чего не можете.

В Linux управлять корневой файловой системой и создавать там файлы имеет право только пользователь root.

В этой статье мы рассмотрим какие программы нужны для того, чтобы получить права root пользователя linux, как они работают, как выполнять программу с правами root от обычного пользователя и как запускать графические программы с правами root. А также выясним что такое sudo в чем разница su или sudo.

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

  • Читать, писать и изменять атрибуты файлов в своем каталоге
  • Читать, писать, изменять атрибуты файлов в каталоге /tmp
  • Выполнять программы там, где это не запрещено с помощью флага noexec
  • Читать файлы, для которых установлен флаг чтения для всех пользователей.

Если же нужно сделать что-то большее нам понадобятся права root пользователя linux. У root есть право делать все в вашей файловой системе независимо от того какие права установлены на файл.

Вход под суперпользователем

Чтобы войти под пользователем root можно переключиться в одну из виртуальных консолей, например, с помощью сочетания клавиш Ctrl+Alt+F1 и затем ввести логин root и пароль root пользователя.

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

Можно поступить полностью противоположным путем, ввести логин root и его пароль в графическом менеджере входа, чтобы окружение рабочего стола работало от имени root, и мы получаем все права root linux, но такой вариант крайне не рекомендованный, и очень опасный, вы можете случайно повредить всю систему. Поэтому этот способ был отключен во многих менеджерах входа.

Переключение на суперпользователя в терминале

Теперь мы подошли к более интересному и практичному. С помощью специальных утилит вы можете переключить текущий эмулятор терминала в окружения суперпользователя и выполнять все следующие команды не от своего имени, а от его, таким образом, дав программе права root linux. Для этого существует утилита su. Вообще говоря, эта утилита позволяет не только переключаться на пользователя root но и на любого другого пользователя, но по умолчанию используется именно root. Рассмотрим ее подробнее. Команда su linux имеет следующий синтаксис:

$ su опции пользователь

Вот ее основные опции:

  • -c, --command - выполнить команду
  • -g, --group - установить основную группу пользователя (только для root)
  • -G --supp-group - дополнительные группы пользователя (только для root)
  • -, -l, --login - режим входа, будут очищены и инициализированы с учетом нового пользователя все переменные окружения, а также изменен домашний каталог
  • -p, --preserve-environment
  • -s, --shell - задать оболочку для входа
  • --version - отобразить версию программы.

Теперь немного поэкспериментируем, чтобы понять как работает команда su linux.

Сначала выполним su без параметров, но для начала создадим переменную окружения, чтобы проверить как с ними обходится эта команда:

Теперь выполняем:

Теперь смотрим что получилось:

whoami
$ pwd
$ echo $VAR
$ echo $PATH
$ exit

Из этих команд мы видим, что теперь мы пользователь root, но домашней директорией считается директория нашего предыдущего пользователя и наша переменная не сохранилась также изменилась переменная PATH, теперь там добавлен путь /sbin.

Теперь используем вход в режиме логина:

И повторим ту же комбинацию:

whoami
$ pwd
$ echo $VAR
$ echo $PATH
$ exit

Та же ситуация, только на этот раз изменена ко всему еще и домашняя директория на директорию root. Но мы можем сохранить наши переменные окружения, если это нужно, для этого есть опция -p:

Как видите, наша переменная осталась. Вы также можете переключится на любого другого пользователя. Например:

Получение прав суперпользователя таким способом используется во многих дистрибутивах, например, Debian, OpenSUSE, ArchLInux, Gentoo и т д. Но в Ubuntu, как дистрибутиве для начинающих вход под пользователем root отключен. Это сделано потому, что это тоже не очень безопасно, вы можете забыть что выполняете команду от root и что-то натворить в системе. Поэтому переходим к следующей программе.

Получение прав root без переключения

Чтобы реализовать максимально безопасный интерфейс для работы с правами суперпользователя в Linux была разработана команда sudo. Давайте рассмотрим что такое sudo. Эта команда пишется перед каждой командой, которую нужно выполнить от имени суперпользователя, и для ее выполнения нужно ввести пароль уже не root, а всего лишь вашего пользователя. Так же, как и в предыдущей, в этой утилиты есть свои опции. Сначала рассмотрим синтаксис:

$ sudo опции команда

Опции программы:

  • -b - выполнять запускаемую утилиту в фоне
  • -E - сохранить переменные окружения
  • -g - запустить команду от группы
  • -H - использовать домашний каталог
  • -l - показать список полномочий в sudo для текущего пользователя
  • -r - использовать для команды роль SELinux
  • -s - использовать оболочку
  • -u - запустить команду от имени пользователя, если не задано используется root
  • -i - не выполнять команду, а войти в оболочку, эквивалентно su -

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

Использование sudo - это рекомендованный способ выполнять команды от имени суперпользователя в Linux. Так вы не забудете с чем имеете дело и меньше всего рискуете повредить систему. Но остался еще один нерешенный вопрос - как быть с графическими утилитами? Ведь команда sudo их не запускает, а запускать графическую оболочку от имени root небезопасно. Это мы и рассмотрим далее.

Графически приложения от имени суперпользователя

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

Просто наберите gksu или kdesu, а затем нужную команду:

Эта команда запустит файловый менеджер KDE с правами суперпользователя. В Gnome это будет выглядеть вот так:

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

Выводы

Вот и все. Теперь вы знаете как получить права суперпользователя в Linux, знаете как использовать команду sudo и в чем разница sudo или su. Теперь программы, требующие дополнительных привилегий в системе, не вызовут у вас проблем. Если остались вопросы, пишите в комментариях!

Как можно поднять свои привилегии до системных в мире Windows. Как оказалось, вариантов для этого более чем достаточно. Что выбрать, зависит как от ситуации, так и от твоих предпочтений. Однако, как ты понимаешь, расширять свои полномочия приходится не только для окошек, но и для пингвинов. Какие здесь есть возможности? Ну что ж, давай посмотрим…

Prefase

Как ты помнишь (и как должен помнить каждый адекватный администратор), работать в линуксе под рутом категорически не рекомендуется. В идеальном мире ты должен использовать его только для конфигурирования сервера, установки и обновления ПО и прочих чисто административных задач. Вся беда в том, что мы живем в обычном мире, который очень далек от идеального. Поэтому такая ситуация все же иногда бывает. Правда, в большинстве случаев чисто из-за халатности, ибо так уж исторически сложилось, что пользователям линукса приходилось разбираться в том, как работает их операционная система. А хоть немного разбираясь в системе и ее механизмах безопасности, под рутом уже сидеть не будешь. Поэтому сегодня, в отличие от Windows, где мы говорили о получении системных привилегий из-под админа, будем рассматривать только варианты повышения привилегий от непривилегированного пользователя до рута. Итак, приступим.

Эксплойты

Все способы получения прав суперпользователя в Linux можно условно разделить на две категории. Первая - это как раз таки использование эксплойтов. В отличие от Windows, c ее механизмом автоматической установки обновлений, приверженцам пингвина приходится по большей части самостоятельно следить за выходом заплаток и их установкой. В связи с этим шанс встретить среди Linux-машин не пропатченную до конца систему гораздо выше. Какие преимущества данного метода можно выделить? Для начала - большинство эксплойтов используют уязвимости в ядре ОС, что позволяет получить максимальные привилегии. Найти код подходящего эксплойта не так сложно, и ты наверняка знаешь пару ресурсов. Плюс ко всему, чтобы воспользоваться сплоитом, подчас не требуется разбираться во всех тонкостях используемой уязвимости - достаточно просто правильно скомпилировать его и запустить (иногда, правда, приходится его немного кастомизировать, но довольно часто все будет работать и без подгонки напильником). В общем виде алгоритм действий выглядит следующим образом:

  1. Определить версию ядра и дистрибутива.
  2. Получить список доступных инструментов для сборки сплоита.
  3. Доставить сплоит на целевую машину.
  4. Скомпилировать (при необходимости) и запустить.
  5. Наслаждаться полученным root’ом.

Ну а теперь о каждом шаге более детально.

Идентификация

Судя по плану, сначала надо узнать, куда мы вообще попали, что за дистр используем и какова версия ядра. Версию ядра можно вытянуть с помощью всем известной команды uname -a или ее аналогов. Для того же, чтобы получить информацию об используемом дистрибутиве, надо глянуть в файлик *-release , лежащий в каталоге etc (в зависимости от дистра он может называться по-разному: lsb-release в Ubuntu, redhat-release в Red Hat / CentOS и так далее):
cat /etc/*-release

Зная дистрибутив и версию ядра, можно заняться вторым этапом - поиском подходящей «отмычки».

Поиск эксплойта

Как только вся необходимая информация окажется на руках, настанет время искать подходящий эксплойт. Первое, что приходит на ум, - это exploit-db.com, но есть и альтернативы: 1337day , SecuriTeam , ExploitSearch , Metasploit , securityreason , seclists . В конце концов, есть гугл, он точно знает о сплоитах больше всех. Забегая немного вперед, скажу: иногда по какой-либо причине «отмычка» может не работать или же ее надо немного адаптировать под определенные условия или свои нужды, то есть пройтись по ней напильником. В таком случае не помешает выудить о ней дополнительную информацию, которую можно почерпнуть на одном из следующих ресурсов:
www.cvedetails.com
packetstormsecurity.org
cve.mitre.org

Итак, допустим, ты нашел подходящий эксплойт, который дарует тебе пропуск в мир рута. Осталось только как-то переправить его на машину.

Доставка на дом

Для того чтобы доставить сплоит на место, существует достаточно много способов, от всем известных cURL/wget, Netcat, FTP, SCP/SFTP, SMB до использования DNS TXT записей. Чтобы выяснить, какие из данных инструментов у нас представлены, выполняем:

Find / -name wget find / -name nc* find / -name netcat* find / -name tftp* find / -name ftp

Допустим, у нас нашелся Netcat. Для передачи файла с его помощью на принимающей стороне запускаем:
nc -l -p 1234 > out.file

То есть слушаем порт 1234. На отправляющей выполняем следующее:
nc -w 3 1234 < out.file

Если передача происходит с *nixна *nix-систему, то есть там и там есть стандартные утилиты, то для ускорения процесса передачи можно воспользоваться сжатием. В таком случае команды будут выглядеть так:

Nc -l -p 1234 | uncompress -c | tar xvfp - // для получения tar cfp - /some/dir | compress -c | nc -w 3 1234 // для отправки

Остальные варианты еще проще, так что не станем рассматривать использование wget, FTP и прочих общеизвестных методов.

Прятки

Хорошо, как доставить, разобрались. Но как при этом не спалиться? Если твой сплоит обнаружат, будь уверен, что лазейку быстро прикроют. Так что размещать его, компилировать и запускать надо из какого-то неприметного места. В линуксе директории, начинающиеся с точки (например, .secret_folder), являются скрытыми. Поэтому логично было бы их использовать для сокрытия своей активности. Например, поместить в них код эксплойта: /tmp/.nothingthere/exploit.c . Правда, в таком случае надо сначала убедиться, что tmp смонтирована без опции noexec и из нее можно будет запустить собранный сплоит (для этого воспользуйся командой mount).

Сборка и запуск сплоита

Как только мы доставили и разместили сплоит, его надо будет собрать/настроить. Как правило, сплоиты пишутся на С либо на одном из скриптовых языков Python/Perl/PHP. Постоянные читатели ][ знают, что оставлять на своем сервере компилятор - не самое лучшее решение, поэтому обычно его выпиливают. Если на твой вопрос о версии компилятора gcc -v bash ругнется gcc: command not found , значит, тебе «повезло» и придется идти в обход. То есть либо искать сплоит на питоне, перле или чем-то еще, либо компилить его на виртуальной машине с аналогичной ОС и версией ядра. После чего переместить полученный исполняемый файл на целевой хост (правда, стопроцентной работы этот способ не гарантирует, сплоит может упасть и обрушить систему, так что поаккуратнее тут). Однако, как показывает практика, интерпретатор для одного из упомянутых языков все же должен присутствовать в системе. Так что не следует сразу опускать руки, вместо этого проверяем все варианты:

Find / -name perl* find / -name python* find / -name gcc* find / -name cc

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

Противодействие сплоитам

Какие-то новаторские рецепты тут придумать сложно. Все и так давно известно. Надо просто вовремя устанавливать заплатки. Это первое. Второе - ограничить места, откуда можно запускать на исполнение файлы (папку tmp уж точно следует лишить данной возможности). Ну и применить какое-нибудь защитное решение, например grsecurity .

Права, файлы, пути и конфиги

Вторая категория, которую можно выделить в поднятии привилегий, - это способы, не связанные с использованием эксплойтов, а основанные на поиске файлов с некорректно выставленными правами. Здесь, как и в случае с Windows, есть свои хитрости, но в основном это все та же работа по сбору и анализу данных. Обычно первым делом ищутся файлы, которые доступны всем на чтение и запись:
find / -perm 2 ! -type l -ls

Таких может оказаться достаточно большое число, и среди них можно найти что-нибудь интересное: конфигурационные файлы, исходники сайтов/приложений, скрипты, запускаемые init’ом или cron’ом. В принципе, ситуация, когда файл доступен всем на чтение и запись, - это нормальное явление. Проблемы возникают, когда пользователи/администраторы/скрипты начинают бездумно менять разрешения. Поэтому, когда ты изменяешь разрешения, старайся избегать использования chmod 777 . Ну и проводи периодический аудит, чтобы важные файлы не оказались доступны всем подряд.

Setuid + setgid

Как гласит документация, setuid и setgid являются флагами прав доступа, которые позволяют запускать исполняемые файлы с правами владельца или группы исполняемого файла (обычно root’а). Такие исполняемые файлы, запущенные с повышенными привилегиями, могут получать доступ к более привилегированной информации. Например, в случае установки setuid на команду ls ты получишь возможность просматривать содержимое директорий, доступ в которые тебе изначально был запрещен. А в случае vim - править конфигурационные файлы, в которые до этого не имел права заглядывать.

Соответственно, если в приложениях с установленным setuid/setgid-флагом, присутствуют такие уязвимости, как buffer overflow или command injection, то атакующий может выполнить произвольный код с повышенными привилегиями. Поэтому следующим вариантом обычно ищут исполняемые файлы с данными флагами.
sudo find / -xdev \(-perm 4000\) -type f -print0 -exec ls -s {} \;

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

Обычно существует три варианта дальнейшего использования таких исполняемых файлов. Первый - попытаться поднять привилегии, опираясь на функционал, предоставляемый этим приложением (вернее, придумать свой способ необычного использования этого функционала). Второй вариант - найти публичный сплоит или провести самостоятельный фаззинг с целью выявления багов. Третий - command injection. Универсального рецепта нет, все зависит от ситуации.

SUDO

Команда sudo (substitute user and do), что дословно означает «подменить пользователя и выполнить», позволяет делегировать те или иные привилегированные ресурсы пользователям с ведением протокола работы. То есть предоставляет пользователям возможность выполнять команды от имени root’а (либо других юзеров), используя свой собственный пароль, а не пароль рута. Правила для принятия решений о предоставлении доступа находятся в файле /etc/sudoers . Подробнее о формате этого файла и задании правил ты можешь посмотреть в официальном мануале или Википедии. Я лишь скажу, что этот файл также необходимо тщательно проверять. Потому как часто бывает, что некоторые приложения при установке его изменяют, и притом не в лучшую сторону. В результате чего у пользователей появляется возможность поднять свои привилегии (пост на Offensive security, повествующий о таком случае).

PATH

Как и на винде, в линуксе некорректно настроенные пути также помогут поднять свои привилегии. Обычно такое случается с переменной окружения PATH (используй printenv для ее просмотра). Посмотрел? Отлично, а теперь скажи: что, если переменная окружения PATH будет начинаться с. (.:/bin:/usr/sbin ....)? Обычно так делают пользователи, которые не хотят набирать два лишних символа, то есть хотят вызывать команду так: $ program вместо $ ./program . Добавление. в PATH означает возможность выполнять файлы/скрипты из рабочей директории. Добавить ее можно следующим образом:

PATH=.:${PATH} export PATH

А теперь представим ситуацию, что у нас есть два пользователя: Джо (атакующий) и Боб. Джо знает, что у Боба есть sudo-привилегии на изменение паролей пользователей, в том числе и рута. Кроме того, Боб ленив и добавил. в переменную окружения PATH . Хитрый Джо пишет программу, которая будет менять пароль рута, называет ее ls и кладет в папку, куда любит заглядывать Боб. Теперь, когда последний зайдет в папку и захочет посмотреть ее содержимое, выполнится программа, которую написал Джо, и пароль рута будет изменен. Поэтому всегда проверяем переменные окружения на наличие интересных вещей, а для себя делаем следующие выводы:

  1. Никогда не используем. в переменной PATH .
  2. Если точка там все-таки присутствует, размещаем следующую строку в.bashrc или.profile:
    PATH= echo $PATH | sed -e "s/::/:/g; s/:.:/:/g; s/:.$//; s/^://"

Инструменты

Для автоматизации поиска слабых мест можно воспользоваться следующими тулзами:

1. LinEnum - bash-скрипт, который сделает всю грязную работу за тебя, выполняя все проверки, описанные в данном cheat sheet’e . Всего в его арсенале около 65 различных проверок, начиная от получения информации о версии ядра и заканчивая поиском потенциально интересных SUID/GUID-файлов. Кроме того, скрипту можно передать ключевое слово, которое он будет искать во всех конфигурационных и лог-файлах. Запускается проверка следующим образом: ./LinEnum.sh -k keyword -r report -e /tmp/ -t . После того как сканирование завершится, тебе будет представлен довольно подробный отчет, наиболее интересные места которого будут подсвечены желтым цветом.
2. LinuxPrivChecker - Python-скрипт, который также пригодится в поиске потенциальных вариантов для повышения привилегий. В общем-то, он выполняет все те же стандартные вещи: проверку привилегий, получение информации о системе… Но основная его фишка в том, что по завершении проверки он предложит тебе список эксплойтов, которые, по его мнению, помогут поднять привилегии. Такой вот молодец:).
3. unix-privesc-check - данный скрипт позволяет искать варианты для прокачки привилегий не только в Linux, но также и в Solaris, HPUX, FreeBSD. Он старается обнаружить ошибки конфигурации, которые позволили бы непривилегированному пользователю подняться в системе.
4. g0tmi1k’s Blog - а это блог, в котором хорошо описаны все те проверки, что выполняются тремя названными инструментами. Так что настоятельно рекомендую заглянуть туда и познакомиться, чтобы представлять, как работают эти инструменты «изнутри».



LinuxPrivChecker содержит большой список эксплойтов, который постоянно пополняется с Exploit Database

Afterword

Как ты убедился, в мире Linux с поднятием привилегий все тоже достаточно обыденно. Секрет успеха прост: для того, чтобы добиться своей цели, надо быть терпеливым и знать, где искать и что искать. Куда смотреть, ты теперь знаешь, какие утилиты задействовать для автоматизации - тоже, так что теперь тебе под силу покорить не только win-, но и nix-систему. Дерзай!

1. Использование команды: su

Многие команды могут быть запущены только суперпользователем, поэтому мы должны знать, как становится им (root-ом). Чтобы сделать это, мы можем использовать команду: su (смена пользователя). Команда su принимает следующие форматы:

но чаще всего мы будем использовать su для того, чтобы стать пользователем root :

Su - root

если имя пользователя в строке не указано, то автоматически предпологается пользователь root, поэтому команду можно сократить:

но обе команды ведут себя различно. "su " дает текущему пользователю личность, тогда, как "su - " дает текущему пользователю личность вместе с окружением, которое можно было бы получить, зарегистрировавшись в качестве.

Зачастую пользователи используют "su" для перехода в root. Попробовав запустить команду (например - ifconfig), вы получите: "command not found" error.

Su Password: ifconfig bash: ifconfig: command not found

Причина заключается в том, что обычные пользователи системы и root пользователь имеют различные переменные окружения PATH (вы можете посмотреть PATH пользователя при помощи "echo $PATH). После ввода команды Linux, оболочка будет искать пользовательский PATH, чтобы попытаться найти команду для запуска. Она начинает поиск в каждой директории указанной в PATH, пока цель не будет найдена.

Команды обычных пользователей обычно расположены в /usr/local/bin, /usr/bin и /bin. А команды пользователя root распологаются в основном в /usr/local/sbin, /usr/sbin, /sbin и корневой PATH это отражает. Поэтому, когда вы становитесь суперпользователем при помощи "su -", то вы также принимаете и новый путь PATH к основным командам. А используя только "su", сохраняется пользовательский путь PATH по умолчанию, следовательно, при попытке выполнить программу расположенную в /usr/local/sbin, /usr/sbin, /sbin выдаст результат: "command not found" error. Для более детального объяснения, смотрите справочную страницу (man bash), особенно раздел login shells.

Таким образом, вы или должны указывать полный путь к команде (пример - /sbin/ifconfig) при использовании "su", либо использовать "su -", когда становитесь root-ом.

2. Использование Sudo

Вам не нужно быть суперпользователем каждый раз, когда вы хотите запустить некоторые конкретные административные функции. Благодаря Sudo , вы можете запустить некоторые или все команды как под root-ом. Когда Sudo установлен (пакет: Sudo), вы можете настроить его при помощи команды "visudo" под root-ом. В основном он редактирует (Vim по умолчанию) /etc/sudoers, но это не рекомендуется делать вручную.

Alex ALL=(ALL)ALL

Alex - имя пользователя. Сохраните (нажать escape, затем ввести wq), и все готово. Войдите как alex, и запустите например:

$sudo yum update

Sudo запросит пароль. Это пароль alex-а, а не пользователя root. Так что будте осторожны, когда вы даете права пользователя с Sudo.

Но Sudo может сделать не только это, а гораздо больше. Мы можем позволить пользователю или группе пользователей запускать только одну команду или группу команд. Давайте вернемся к нашему sudoers файлу. Начнем с alex и alisa, членов группы administrator. Если мы хотим, чтобы все пользователи из группы"administrator" были в состоянии запустить каждую команду в качестве суперпользователя, мы должны изменить наш пример:

%admin ALL=(ALL)ALL

Alex так же может выполнить суперпользовательскую команду, и alisa получила право запускать Sudo, с теми же правами и со своим паролем. Если alex и alisa не члены одной группы, мы можем определить псевдоним пользователя в файле sudoers:

User_Alias ADMINS = alisa,alex

Здесь мы определили алиас под названием ADMINS, с членами alisa и alex.

Тем не менее, мы не хотим, чтобы alex и alisa могли запускать с правами суперпользователя любую програму. Мы хотим, чтобы они могли запускать только "updatedb". Давайте определим команду псевдоним:

Cmnd_Alias LOCATE = /usr/sbin/updatedb

Но этого мало! Мы должны сказать Sudo, что пользователи, определенные как ADMINS, могут запускать команды заданные в LOCATE. Чтобы сделать это, мы заменим строки с "%admin" на эти:

ADMINS ALL = LOCATE

Это означает, что пользователи входящие в алиас ADMINS могут запускать все команды в алиасе LOCATE.

На этот раз, /etc/sudoers выглядит следующим образом:

User_Alias ADMINS = alisa, alex Cmnd_Alias LOCATE = /usr/bin/updatedb ADMINS ALL = LOCATE

В результате alex и alisa могут запускать updatedb, как root, введя свой пароль.

Если последнюю строчку в файле изменить:

ADMINS ALL = NOPASSWD:LOCATE

тогда alex и alisa смогут выполнить "sudo updatedb" без ввода пароля.

Можно добавить другие команды в командный алиас и более алиасов в правило. Например мы можем создать алиас NETWORKING содержащий некоторые сетевые команды типа: ifconfig, route или iwconfig:

Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhcclient, /usr/bin/net, sbin/iptables, /usr/bin/rfcom, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

Давайте все это добавим в наш /etc/sudoers файл (с помощью visudo!). А также предоставим нашей ADMINS групе права на выполнение программ и из алиаса NETWORKING:

User_Alias ADMINS = alice, bob Cmnd_Alias LOCATE = /usr/bin/updatedb Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net,/sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool ADMINS ALL = LOCATE, NETWORKING

Маленькая проба: войдите в систему как alisa (или alex), и наберите:

$ping -c 10 -i localhost

Ответ должен вернуться быстро:

PING localhost.localdomain (127.0.0.1) 56(84) bytes of data. ping: cannot flood; minimal interval, allowed for user, is 200ms

Теперь, тоже-самое но с Sudo:

$sudo ping -c 10 -i 0 localhost PING localhost.localdomain (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.049 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 time=0.034 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=3 ttl=64 time=0.021 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=4 ttl=64 time=0.030 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=5 ttl=64 time=0.017 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=6 ttl=64 time=0.016 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=7 ttl=64 time=0.016 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=8 ttl=64 time=0.016 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=9 ttl=64 time=0.016 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=10 ttl=64 time=0.016 ms --- localhost.localdomain ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 1ms rtt min/avg/max/mdev = 0.016/0.023/0.049/0.010 ms, ipg/ewma 0.187/0.028 ms

Sudo часто используется для предоставления определенным пользователям частичного доступа к привелигированным командам, чтобы они могли выполнять ограниченные административные функции. Одно из удобств Sudo в том, что все команды записываются в /var/log/secure. Приведенный выше пример будет описан строчкой в журнале:

Apr 18 11:23:17 localhost sudo: alex: TTY=pts/0 ; PWD=/home/alex ; USER=root ; COMMAND=/bin/ping -c 10 -i 0 localhost

Вот и все. Теперь никогда не забуду, когда использовал Sudo: "с большой властью приходит большая ответственность".

2.1 Sudo shell

Если у вас настроено достаточно прав в sudoers, вы также можете открыть root-ую оболочку shell используя:

В последних версиях только на CentOS 5, для запуска shell под root, используется sudo -s. Будьте очень осторожны, так как это может менять или создавать новые файлы в домашней директории Root, а установку вести в домашний каталог вызвавшего пользователя.

3. consolehelper

Consolehelper представляет собой оболочку для запуска GUI приложений. Когда он начинает работать, он проверяет конфигурацию PAM для требуемого применения. Это означает, что мы можем проводить аутентификацию пользователя с помощью всех установленных модулей PAM. Основной метод состоит в том, чтобы запросить пароль, но если мы имеем надлежащее оборудование. мы можем аутентифицировать с помощью смарткарты, жетонов, отпечатков пальцев и т.д. Конфигурация PAM выходит за рамки этого документа (см. PAM Руководство администратора), поэтому мы рассмотрим этап настройки consolehelper, необходимый для запуска приложений под root-ом и запросом пароля root.

В качестве примера, давайте настроим /usr/bin/xterm для запуска в качестве root-ого.

Ln -s /usr/sbin/consolehelper /usr/bin/xterm-root

Теперь для конфигурирования PAM - создайте файл /etc/pam.d/xterm-root:

#%PAM-1.0 auth include config-util account include config-util session include config-util

Наконец, настройте consolehelper на запуск /usr/bin/xterm под root-ом, командой "xterm-root". Создайте файл /etc/security/console.apps/xterm-root:

USER=root PROGRAM=/usr/bin/xterm

Вот и все. Запускайте "xterm-root" (из командной строки или ярлыком.desktop file), введите пароль и в путь. Если вы получили сообщение об ошибке: "Xlib: connecttion to ":0.0" refused by server", запустите сначала "xhost local:root".

Во многих руководствах по linux (и не только по linux) в вопросах безопасности регулярно появляются рекомендации выполнять все неадминистративные действия под пользователем, не имеющим прав администратора / суперпользователя. Проще говоря, все рекомендуют не работать постоянно под пользователем root и прибегать к работе под root только в необходимых случаях.
На самом деле, во многих ситуациях возникает необходимость запускать процессы под пользователем, который не только не имеет прав root, но и не может повысить свои права до root. Никак, никаким образом. Такая необходимость возникает (создавать таких пользователей имеет смысл) для сервисов, выполняющихся на сервере. Например, Apache, Asterisk, и так далее. То есть чтобы тот, кто может получить права такого пользователя, не только не получил бы прав root, но даже (вдруг) узнав пароль root, не смог бы зайти под этим паролем (повысить свои привилегии).

В более старых версиях linux по умолчанию был выставлен следующий режим: пользователи, относящиеся к группе wheel, могут запускать команду su, а все остальные - нет. То есть запускать su могут все, но для пользователей не из группы wheel команда su даже с правильным паролем root будет выдавать ошибку.
В современных версиях linux, к примеру, CentOS и Debian, по умолчанию такая возможность отключена, т.е. все пользователи могут повысить свои права (зная пароль root). В данной статье мы покажем как вернуть режим, который был раньше - чтобы только пользователи из группы wheel могли "поднимать" свои привилегии.

С чего начать

В первую очередь, надо обезопасить себя. То есть обязательно внесите того пользователя, под которым Вы работаете, в группу wheel . Ну а если в системе работает несколько пользователей, под которыми необходимо время от времени повышать привилегии до root, то каждый из этих пользователей должен быть внесен в группу wheel!
Обратите внимание, это важно сделать до того, как Вы измените настройки linux, иначе (если к примеру, Вы подключаетесь к серверу по SSH, по SSH доступ под рутом закрыт) зайдя под обычным пользователем по SSH, Вы не сможете повышать свои привилегии до рута!

Создать группу wheel

Возможно, что в Вашей версии linux по умолчанию нет группы wheel. Тогда ее необходимо создать. Для этого существует следующая команда:
addgroup wheel
Не бойтесь вводить эту команду: если группа wheel существует, будет выдано сообщение, что такая группа уже есть. Если же такой группы нет, она будет создана

Как внести пользователя в группу wheel

Для этого существует команда:
usermod -a -G wheel имя-пользователя
например:
usermod -a -G wheel username

Эта команда добавляет пользователя username в группу wheel. Если при этом пользователь состоит в одной или нескольких других группах, членство во всех группах сохраняется, просто пользователь добавляется в еще одну (дополнительную) группу.

Теперь проверьте, что все выполнено правильно. Для этого существует команда:
id имя-пользователя
например:
id username

Будет отображен ID пользователя, имя пользователя, а также ID и имя каждой группы, к которой пользователь принадлежит. Убедитесь, что все необходимые пользователи добавлены в группу wheel.

Запуск su только пользователями из группы wheel

Откройте в Вашем текстовом редакторе файл: /etc/pam.d/su
В этом файле найдите строку, подобную следующей:
auth required pam_wheel.so
или
auth required pam_wheel.so use_uid
По умолчанию эта строка начинается со знака "#", это энак комментария. Уберите знак комментария из начала этой строки и сохраните файл.

Всё! Теперь только пользователи из группы wheel могут выполнять команду su и повышать свои привилегии до root. Не забудьте это проверить!