Повышаем пользовательские привилегии в Linux

Из этой статьи, Вы узнаете как создать пользователя с правами root-а и как назначить привилегии root существующему пользователю, задав ID пользователя и группы.

Prefase

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

Пользователи и группы

Стоит отметить, что в Linux присутствует поддержка ACL (Access Control List) для файлов и папок. Этот инструмент позволяет лучше справляться с темой статьи в некоторых ситуациях. Но подобный функционал не используется по умолчанию и необходим лишь в определённых случаях. Здесь же речь будет идти о стандарте POSIX, не затрагивая ACL.

У каждого файла в качестве владельцев есть один пользователь(user) и одна группа(group). С помощью команды ls -l можно узнать кому принадлежат файлы в текущей дериктории. Права доступа стандарта POSIX позволяют контролировать чтение (read), запись (write) и исполнение (execute) для конткретного пользователя, группы и всех остальных (other). Используя эти три параметра для трёх типов пользователей можно просто и понятно разграничить “кто и что может делать” в файловой системе.

Изображение №1 показывает, как может выглядеть вывод файла командой ls -l. Первое поле обычно содержит “d” или ““, оно указывает на папку (directory) или файл. Для файлов биты прав доступа имеют прямой смысл. Если установлен бит чтения (r), то можно получить его содержимое. Если установлен бит записи (w) — записать данные в этот файл. Бит исполнения (x) позволяет выполнить файл в коммандной оболочке. Он обычно устанавливается для скриптов и бинарных файлов программ.

Изображение №1. Пример вывод команды ls -l

Для папок используется схожий принцип. Чтение (r) даёт возможность посмотреть какие файлы или папки находятся в директории. Запись (w) — создать или удалить файл или папку. Исполнение (x) несёт менее очевидный смысл. Если бит установлен, то можно перейти в эту директорию. То есть комманда cd для перехода внутрь папки будет работать только тогда, когда есть права доступа на исполнения для неё.

Настройка пользовательских и групповых прав доступа с помощью chmod

Павел Соловьёв Full Stack Developer #администрирование 29 августа, 2014 343 Основы

Вообще, когда мы говорим о каталогах или файлах, нас интересует три набора прав:

  • Пользовательские — касающиеся владельца файла
  • Групповые — права, касающиеся участников одной группы
  • Все остальные — разрешения для тех, кто не подходит к первым двум группам

Соответственно, каждый пользователь имеет своё уникальное имя и, как правило, принадлежит к одной или нескольким группам. Более того в одну группу может входить несколько пользователей.

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

Я расскажу, как использовать chmod — команда, предназначенная для управления разрешениями (правами доступа) для работы с директориями и файлами.

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

chmod -ключи права путь/к/директории/файлу Ключи

Команда chmod -R будет рекурсивно применена ко всем вложенным файлам и каталогам.

Изменение разрешений

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

  • u — пользователь
  • g — группа
  • o — все остальные

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

  • + — добавит права (знак плюс)
  • — — удалит права (знак минус)

Сами же права задаются вот так:

  • r — чтение
  • w — запись
  • x — выполнение

Применим все это, чтобы настроить права доступа для Apache.

Основные моменты

  • Apache запущен под пользователем и группой www-data
  • Корень сервера располагается по адресу /var/www
Читайте также:  WiFite – Проводим тестирование на проникновение Wi-Fi сети

Первое

Изменим владельца корневого каталога сервера:

sudo chown -R www-data:www-data /var/www

Добавить пользователя к группе www-data можно следующей командой:

sudo usermod -a -G www-data username

Удалить пользователя из группы www-data можно командой:

sudo gpasswd -d username www-data Второе

Необходимо задать соответствующие права пользователям и группам. Сначала мы полностью закроем доступ, а потом разрешим только то, что необходимо.

Для начала закроем доступ к корневому каталогу для всех кроме его владельца, а именно — www-data. Мы используем ключ -go, чтобы изменения затронули группу и всех остальных пользователей, — означает удаление прав, а rwx означает, что мы запрещаем им читать, писать и запускать файлы из этого каталога.

sudo chmod go-rwx /var/www

Чтобы проверить какие права установлены на директорию выполните в командной строке: ls -la /var/www

Затем разрешим пользователям группы www-data и всем остальным просматривать корневой каталог. Команда работает не рекурсивно. Опять таки мы используем +, чтобы добавить права, а х отвечает за право выполнять файлы.

sudo chmod go+x /var/www

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

sudo chgrp -R www-data /var/www

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

sudo chmod -R go-rwx /var/www

Теперь разрешим всем пользователям, входящим в одну группу, чтение и запись в каталоги:

sudo chmod -R g+rw /var/www

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

chmod -R g+rwx /var/www

Очень часто нам не требуется выполнять все эти шаги, и базовой настройки сервера вполне достаточно, но, зато на примере настройки прав для Apache мы рассмотрели возможности команды chmod.

apache права доступа

Об авторе Павел Соловьёв Комментарии Пока что нет комментариев, вы можете быть первым. Войти или Регистрация , чтобы оставлять комментарии.

Что такое «права на файлы и папки»?

У каждого файла и папки есть 3 атрибута (права) доступа:

  1. Право на чтение (обозначается буквой «r» от английского «read»).
  2. Право на редактирование и запись в файл (обозначается буквой «w» от английского «write»).
  3. Право на исполнение (запуск) скрипта (обозначается буквой «x» от английского «eXecute»). На виртуальном хостинге право на исполнение применимо только к папкам и CGI-скриптам. Для обычных файлов (HTML-страницы, картинки, PHP скрипты и т.п.) право на исполнение не будет применяться.

Для папок эти атрибуты означают:

Существует несколько способов записи прав доступа: буквенная и цифровая записи. Ниже приведены соответствия двух типов записи:

Цифровая запись Буквенная запись Права
«0» Ничего не разрешено
1 —x Исполнение
2 -w- Запись
3 -wx Запись и исполнение
4 r— Чтение
5 r-x Чтение и исполнение
6 rw- Чтение и запись
7 rwx Чтение, запись и исполнение

Категории пользователей

Для каждого файла (и папки) существует 3 категории пользователей:

  1. Владелец файла (папки).
  2. Группа пользователей, в которую входит владелец.
  3. Все остальные пользователи.

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

Если используется цифровая запись, первая цифра определяет права владельца, вторая — права группы, третья — права всех остальных пользователей.

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

Примеры прав доступа в цифровой и буквенной записях и пояснения к ним:

Цифровая Буквенная Владелец Группа Все остальные
755 rwxr-xr-x полный доступ чтение и исполнение чтение и исполнение
644 rw-r—r— запись и чтение только чтение только чтение
555 r-xr-xr-x чтение и исполнение чтение и исполнение чтение и исполнение

Какие права следует выставлять

Обычно корректными правами для папок являются «755», а для файлов — «644», но возможны исключения, о которых должен знать разработчик сайта. Также информацию по используемым атрибутам доступа можно найти в документации или на тематических форумах используемой вами CMS.

Использование команды в числовом виде

Права записываются одной строкой сразу для трёх типов пользователей:

  • владельца файла (u);
  • других пользователей, входящих в группу владельца (g);
  • всех прочих пользователей (o);

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

Пример: в числовом виде, установить права rwx-rx-rx:

chmod 755 filename

Пример — значение права «755»
владелец группа остальные
восьмеричное значение 7 5 5
символьная запись rwx r-x r-x
обозначение типа пользователя u g o

Таким образом, права «755» записываются в символьном виде как «rwxr-xr-x». При этом для понимания сути задания прав в Unix-системах полезно знать представление чисел в двоичной системе счисления.

Три варианта записи прав пользователя
двоичная восьмеричная символьная права на файл права на директорию
000 нет нет
001 1 —x выполнение чтение файлов и их свойств
010 2 -w- запись нет
011 3 -wx запись и выполнение всё, кроме чтения списка файлов
100 4 r— чтение чтение имён файлов
101 5 r-x чтение и выполнение доступ на чтение
110 6 rw- чтение и запись чтение имён файлов
111 7 rwx все права все права

Часть разрешений имеет смысл только в сочетании с другими. Из первых четырёх пунктов (не дающих права на чтение файла) для файлов обычно используется только «—», то есть полный запрет доступа к файлу данному типу пользователей. Для директорий из всего списка обычно применяются только 0, 5 и 7 — запрет, чтение и выполнение, и полный доступ.

Суммировав эти коды для трёх типов пользователей, можно получить числовую или символьную запись. Например, chmod 444 {имяфайла}: 400+40+4=444 — все имеют право только на чтение (идентично «r—r—r—»).

Помимо стандартных разрешений ‘rwx’, команда chmod осуществляет также управление битами SGID, SUID и T. Установленные атрибуты SUID или SGID позволяют запускать файл на выполнение с правами владельца файла или группы соответственно.

Для SUID вес — 4000, а для SGID — 2000. Данные атрибуты имеют смысл при установленном соответствующем бите исполнения и обозначаются при символьной записи буквой «s»: «rwsrwxrwx» и «rwxrwsrwx» соответственно.

Пример: chmod 4555 {имяфайла} — все имеют право на чтение и выполнение, но запускаться файл на исполнение будет с правами владельца.

Установка SGID для директории приведёт к установке принадлежности каждого нового создаваемого файла к той же группе, к которой принадлежит сама директория, а не к основной группе владельца, как это происходит по умолчанию. SUID для директории не имеет смысла[1].

t-бит используется только с директориями. Когда t-бит для директории не установлен, файл в данной директории может удалить любой пользователь, имеющий доступ на запись к данному файлу. Устанавливая t-бит на директорию, мы меняем это правило таким образом, что удалить файл может только владелец этого файла. Следуя приведённой выше кодировке, t-бит имеет вес 1000.

Примечание: Право на запись даёт пользователю возможность записывать или изменять файл, а право на запись для каталога — возможность создавать новые файлы или удалять файлы из этого каталога. Если на каталоге стоит возможность записи (w), то файл внутри этого каталога можно будет удалить, даже если право на запись для него не установлено. (В соответствии с концепцией файловой системы POSIX).

Популярные значения

400 (-r———) Владелец имеет право чтения; никто другой не имеет права выполнять никакие действия 644 (-rw-r—r—) Все пользователи имеют право чтения; владелец может редактировать 660 (-rw-rw—-) Владелец и группа могут читать и редактировать; остальные не имеют права выполнять никаких действий 664 (-rw-rw-r—) Все пользователи имеют право чтения; владелец и группа могут редактировать 666 (-rw-rw-rw-) Все пользователи могут читать и редактировать 700 (-rwx——) Владелец может читать, записывать и запускать на выполнение; никто другой не имеет права выполнять никакие действия 744 (-rwxr—r—) Каждый пользователь может читать, владелец имеет право редактировать и запускать на выполнение 755 (-rwxr-xr-x) Каждый пользователь имеет право читать и запускать на выполнение; владелец может редактировать 777 (-rwxrwxrwx) Каждый пользователь может читать, редактировать и запускать на выполнение 1555 (-r-xr-xr-t) Каждый пользователь имеет право читать и запускать на выполнение; удалить файл может только владелец этого файла 2555 (-r-xr-sr-x) Каждый пользователь имеет право читать и запускать на выполнение с правами группы(user group) владельца файла 4555 (-r-sr-xr-x) Каждый пользователь имеет право читать и запускать на выполнение с правами владельца файла

Пример правильного использования Chmod

Правила доступа по умолчанию для каталогов 755, для файлов 644. Поэтому, в подавляющем большинстве случаев, вам понадобятся только эти права.

Ниже пример того, как в каталоге /var/www/ на все файлы рекурсивно поставить права 0644, а на все каталоги и подкаталоги 0755

cd /var/www/ find ./ -type f -exec chmod 0644 {} \; find ./ -type d -exec chmod 0755 {} \;

Первой командой переходим в нужную директорию, далее с помощью команды find ищем нужный тип: файлы -f (files) и каталоги -d (directories) — и запускаем chmod с нужными правами.

Разграничение прав пользователей в Ubuntu

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

Команда sudo является механизмом предоставления прав администратора, обычно доступных только для пользователя root, для обычных пользователей.

Разрешить sudo для определенных пользователей

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

usermod -a -G sudo

usermod -a -G sudo cloud

После добавления в группу sudo пользователь становится администратором. Администраторы в linux могут настраивать систему, им предоставлен доступ ко всем файлам в каталоге /dev, им предоставлены привилегии близкие к возможностям суперпользователя.

Примечание: в Ubuntu LTS и более поздних версиях существует привычная группа admin, которая поддерживается для совместимости с более ранними версиями ОС, а все администраторы добавляются в группу sudo.

Виртуальный сервер на базе Linux

Запрет вызова команд

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

Чтобы запретить выполнение определенных команд или утилит для всех кроме пользователя root, достаточно выполнить следующую команду:

sudo chmod o-x $(which )

sudo chmod o-x $(which ls)

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

После выполнения данной операции, все кроме root не смогут использовать команду ls:

ls bash: /bin/ls: Permission denied

Чтобы запретить user1 использовать определенную команду, необходимо создать группу group2 и добавить в нее всех, кроме user1:

sudo groupadd group2 sudo useradd -G group2

Затем изменить группу владельцев нужной команды на group2:

sudo chown :group2

sudo chown :group2 $(which ls)

И наконец, запретить всем, кроме группы и владельца исполнять файл:

sudo chmod 754 $(which )

sudo chmod 754 $(which ls)

Редактирование файла /etc/sudoers

Файл /etc/sudoers определяет какие пользователи могут запускать sudo команды, а также управляет особыми правилами, например, нужен ли пользователю пароль для определенных команд. Файл состоит из псевдонимов (переменных) и пользовательских спецификаций.

Чтобы открыть файл /etc/sudoers используйте утилиту visudo, она специально предназначена для редактирования этого файла и позволяет не допустить ошибок в синтаксисе:

Файл будет открыт в текстовом редакторе по-умолчанию.

Стандартное содержимое файла выглядит следующим образом:

Примечание: здесь параметр Defaults имеет несколько значений:

  1. env_reset — сбрасывает все пользовательские переменные;
  2. mail_badpass — сообщает системе отправлять уведомления о неудачных попытках ввода пароля sudo пользователю mailto. По умолчанию это учетная запись root.
  3. secure_path — пути, по которым операционная система будет искать файлы, используемые для операций sudo.

Рассмотрим подробнее строку:

%sudo ALL=(ALL:ALL) ALL

  1. %sudo — имя пользователя или группа, к которой нужно применить правило (имя группы указывается после символа %, имя пользователя без).
  2. Первое ALL означает, что правило применяется ко всем IP-адресам, второе ALL, что указанный пользователь может запускать команды в сессии любого пользователя, третье ALL означает, что указанный пользователь может запускать команды в любой группе. Последнее ALL указывает, что эти правила нужно применять ко всем командам.

Например, для настройки прав для команды apt-get можно использовать следующую строку:

%admin ALL=(ALL)NOPASSWD:/usr/bin/apt-get

  1. %admin — правило применяется для всех пользователей группы admin;
  2. ALL= — правило применяется ко всем IP-адресам;
  3. (ALL) — пользователь может запускать команды в сессии любого пользователя;
  4. NOPASSWD — пароль не требуется;
  5. :/usr/bin/apt-get — список команд, разделенный запятой.

Host alias — это псевдонимы для IP адресов с которых отправляются на выполнение команды. Псевдоним для хоста можно задать следующим образом:

Host_Alias CLOUD =

User alias — это псевдонимы имен пользователей или групп прямо внутри файла sudoers, а не в системе. Псевдоним можно задать следующим образом (для групп используйте %):

User_Alias PEOPLE = alice,bob

Cmnd alias — являются псевдонимами для имен команд прямо внутри файла sudoers, а не в системе. Псевдоним команды можно задать следующим образом:

Cmnd_Alias APT = /usr/bin/apt-get update,/usr/bin/apt-get upgrade

Источник

Права доступа

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

[X ] сам по себе не является правом доступа, но тем не менее, может использоваться вместо x . Он на самом деле полезен только в случае использования оператора ‘+’ в сочетании с опцией -R, для того чтобы предоставить группе или остальным пользователям права доступа к дереву каталога, не давая прав на исполнение обычных файлов (например текстовых), что случится при применении команды ‘chmod -R a+rx’. Таким образом вместо нее можно использовать ‘X’, и соответственно выполнить ‘chmod -R a+rX’.