Системные администраторы в отличие от обычных пользователей являются членами отдельной группы пользователей. Которым доступен полный контроль над системой. Эта мера не является достаточной для обеспечения высокой безопасности системы. Однако она необходима. В Linux-системах существует механизм, который позволяет любому пользователю получить привилегии суперпользователя.
Но при соблюдении конкретных и строгих условий. Такая модель является (как показывает многолетняя практика) точно выверенным компромиссом. Между удобством и безопасностью во всех системах UNIX и Linux, который реализован в виде утилиты sudo.
Зачем разделять привилегии?
Учётная запись root в Linux является самой полновластной — ей доступны любые действия. С помощью которых можно как сломать систему, так и полностью её восстановить. Все остальные учётные записи не обладают такими полномочиями. И как-то навредить системе не могут, разве что сами себе в своих домашних каталогах.
Сложные сети с большим количеством серверов и разветвлённой периферией обслуживают большое количество пользователей. Вместе с тем и сами эти системы в силу своей сложности и масштабов нуждаются в обслуживании не одним, и довольно часто, даже не двумя системными администраторами. В таких случаях очень удобно использовать механизм, предоставляемый утилитой sudo для получения привилегий суперпользователя для любого пользователя на любом компьютере, тем более, что безопасность от этого не страдает. Если учётная запись root будет доступна нескольким системным администраторам, то, во-первых, администрирование системы будет крайне неудобным, во-вторых, невозможно будет отслеживать, кто именно производил те или иные действия по администрированию системы. Утилиты sudo легко решает эти проблемы.
Лучшая СИСТЕМА НАРУЧНИКОВ на нашем майнкрафт сервере
Как работает утилита sudo?
В Linux принято (и небезосновательно) как можно меньше работать в системе от суперпользователя. И это считается ещё и хорошим тоном. По сути, утилита sudo является универсальным инструментом для достижения этой цели. Позволяющая выполнять важные административные задачи максимально осознанно.
В обычном понимании команда sudo предоставляет временные разрешения на использование привилегий суперпользователя. По истечении определённого промежутка времени (который можно настраивать) эти разрешения отнимаются. Очевидно, что это сделано, чтобы каждый раз эти разрешения не запрашивать. А также чтобы система слишком долго не оставалась без присмотра и без защиты от необдуманных или намеренных вредительских действий.
Утилита sudo при своей работе читает файл /etc/sudoers, в котором хранятся список пользователей. Которым доступны суперпользовательские привилегии, а также список команд, которые им можно выполнять. Команда sudo в качестве параметра принимает строку, содержащую требуемую команду.
Сначала она определяет, является ли пользователь, запускающий команду членом группы sudoers (имеется соответствующая запись в /etc/sudoers). Далее проверяется, разрешена ли выполняемая команда и если да, то выводится приглашение ввести собственный пароль пользователя (не суперпользователя, он не должен быть известен). А далее производится выполнение команды уже от имени суперпользователя. Последующие команды (с утилитой sudo) в течение некоторого времени (обычно по-умолчанию 5 минут) можно выполнять без ввода пароля.
Также утилита sudo записывает в журнал некоторые действия, такие как: пользователи, выполнившие команды, компьютеры, на которых они выполнялись, сами выполненные команды, а также и каталоги, из которых выполнялись команды. Все эти данные могут регистрироваться и в файлах регистрации системы Syslog, либо в произвольно заданных файлах.
Файл /etc/sudoers
Содержимое файла /etc/sudoers может быть следующим:
# Define aliases for machines in CTRLS
пароль суперпользователя может быть известен минимальному кругу лиц;
у любого пользователя в системе можно отобрать привилегии, при этом не меняя пароля суперпользователя;
ведётся учёт всех пользователей, имеющих привилегии суперпользователя (root);
командная оболочка имеет защиту от несанкционированного доступа;
настройки доступа ко всей системе (или даже сети) хранятся в одном файле.
Есть у утилиты sudo и недостатки. Но все они проявляются только в случае недобросовестного обслуживания системы. Например, самым основным недостатком является то, что вся система защиты будет сломана, если будет взломана одна-единственная учётная запись суперпользователя. И напротив — при наличии «лазейки» в одной из привилегированных учётных записей. Под угрозой оказывается учётная запись root.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Похожие записи:
- настройка сервера для учёта интернет-трафика по netflow
- Как запустить программу в фоне, без привязки к терминалу
- Установка SSL сертификата на nginx
- Переменные окружения в Linux
Источник: itproffi.ru
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Что такое sudo
Что означает sudo. Как запустить команду с sudo
Пожалуй самой часто используемой программой при системном администрировании (если вы работаете под обычным пользователем, а не под root), является sudo. Главное назначение sudo — это выполнить команду от имени другого пользователя, обычно от root. Смысл выполнения команды от root в том, что у него повышенные права доступа и, применяя sudo, обычный пользователь может выполнить те действия, на которые у него недостаточно прав.
Простейший и самый распространённый вариант запуска команд с sudo:
sudo КОМАНДА
Если у КОМАНДЫ есть опции, аргументы, то для sudo не нужно делать какие-то дополнительные действия, например, помещать КОМАНДУ с опциями в кавычки или что-то ещё. Поставьте sudo и запускайте КОМАНДУ как обычно.
К примеру, я хочу выполнить:
ls -l /root
Поскольку я работаю под обычным пользователем, то у меня нет прав доступа в директорию /root и я получаю ошибку:
ls: невозможно открыть каталог ‘/root’: Отказано в доступе
Чтобы эта команда сработала, достаточно её записать после sudo:
sudo ls -l /root
Как установить sudo. Ошибка «-bash: sudo: command not found». Как создать пользователя с sudo
По умолчанию в Debian и некоторых других дистрибутивах может отсутствовать пакет sudo. О том, как выполнить установку sudo, если вы столкнулись с ошибкой «-bash: sudo: command not found», а также о том, как создавать пользователей с правом выполнять команды с sudo смотрите «Ошибка «-bash: sudo: command not found» — не найдена команда sudo (РЕШЕНО)».
Что использовать sudo или su?
У программы su похожее назначение: запустить команду с подстановкой ID другого пользователя и группы. То есть одинакового результата можно добиться используя как sudo, так и su.
Различия sudo и su в следующем:
1. При использовании su необходимо сообщать пароль root обычному пользователю (но это можно обойти — подробности в этом разделе чуть ниже). При использовании sudo пользователь вводит свой собственный пароль.
2. У обеих команд есть интерактивный режим, то есть можно как бы выполнить вход от имени другого пользователя. Также обе программы, sudo и su, позволяют выполнять команды без интерактивного режима. В su интерактивный режим запускается по умолчанию (если не указана команда для выполнения):
В sudo для входа в интерактивный шелл нужно использовать опцию -i:
sudo -i
Точнее говоря, всё немного сложнее, опция -i в sudo означает запустить оболочку входа в систему от имени указанного пользователя; также можно задать команду. Сравните:
sudo pwd /home/mial
sudo -i pwd /root
Также обратите внимание, что при указании команды не запускается интерактивная оболочка.
3. Использование sudo требует настройки, а именно: 1) добавление пользователя в группу, имеющую право использовать эту программу; 2) установка разрешений (перечисление команд, которые может запускать пользователь с sudo и т. д. При некоторых настройках, если пользователь не упомянут в конфигурационных файлах sudo, то он не может ей пользоваться. Программа su не требует настройки для каждого пользователя.
4. Разное отношение с окружением выполнения: смена текущей рабочей директории при входе в интерактивный режим su, сохранение текущей рабочей директории при выполнении отдельных команд с sudo и su. Сравните переменную окружения $HOME в команде
sudo echo $HOME /home/mial
со значением $HOME в команде:
su -c ‘echo $HOME’ /root
5. Некоторые конструкции оболочки работают с sudo не так, как вы ожидаете. Смотрите в качестве примера статью «Как использовать echo вместе с sudo». С su такой проблемы нет.
На самом деле, для подавляющего числа случаев использования этих программ, каких-то кардинальных различий между sudo и su нет, то есть вы можете выбрать любую из них для выполнения команды с повышенными привилегиями или от другого пользователя. Чаще используется sudo только по той причине, что её синтаксис короче: достаточно добавить sudo перед выполняемой командой, что касается su, то запуск одной команды требует конструкции su -c ‘КОМАНДА’.
Но если нужно выполнить несколько команд с повышенными привилегиями, то достаточно войти в интерактивную консоль su:
И затем перед командами уже ненужно ставить sudo.
Кстати, благодаря sudo можно войти в интерактивную сессию root’а не с паролем суперпользователя, а с паролем обычного пользователя, для этого нужно запустить такую команду:
sudo su —
Или использовать интерактивный режим самой sudo:
sudo -i
6. su не требует установки
Утилита su присутствует даже в минимальных установках Linux (в пакете util-linux, который является зависимостью для многих программ). Программа sudo может отсутствовать по умолчанию в некоторых дистрибутивах, например, в Debian.
Как выполнить команду от имени другого пользователя
Запуск sudo:
sudo КОМАНДА
означает выполнить КОМАНДУ от имени пользователя по умолчанию. Таким пользователем обычно является root, но, на самом деле, может быть настроен другой пользователь по умолчанию.
Если нужно выполнить команду от имени иного, не root пользователя, то используйте опцию -u:
sudo -u ПОЛЬЗОВАТЕЛЬ КОМАНДА
Как создать пользователя с sudo
Рассмотрим как создать пользователя, имеющего права запускать команды с sudo.
Чтобы создать пользователя с sudo в Debian, Linux Mint, Ubuntu, Kali Linux и их производных выполните команду вида:
useradd -m -G sudo -s /bin/bash -c «КОММЕНТАРИЙ» ПОЛЬЗОВАТЕЛЬ
- -m означает создать домашнюю директорию пользователя, если она не существует
- -G sudo означает добавить пользователя в группу sudo
- -s /bin/bash указывает оболочку входа пользователя
- -c «КОММЕНТАРИЙ» указывает комментарий, который будет хранится в файле аккаунта — можно пропустить эту опцию
- ПОЛЬЗОВАТЕЛЬ — это имя пользователя
useradd -m -G sudo -s /bin/bash -c «Administrative User» admin
В Arch Linux, BlackArch и их производных для создания пользователя с sudo выполните команду вида:
useradd -m -g users -G wheel,video -s /bin/bash -c «КОММЕНТАРИЙ» ПОЛЬЗОВАТЕЛЬ
Обратите внимание, что в Arch Linux группа, дающее право на выполнение команд sudo, называется wheel, а не, собственно, sudo. Также мы добавили пользователя сразу в две группы, а не в одну, имя второй группы video. Если вы создаёте пользователя на системе без графического окружения, например, на безголовом сервере, то добавлять в группу video не нужно.
В CentOS для создания пользователя с sudo выполните команду вида:
useradd -m -G wheel -s /bin/bash -c «КОММЕНТАРИЙ» ПОЛЬЗОВАТЕЛЬ
Теперь независимо от вашего дистрибутива, запустите одинаковую команду, чтобы установить пароль для нового пользователя:
passwd ПОЛЬЗОВАТЕЛЬ
Конфигурационный файл sudo
Программа sudo считывает конфигурацию из файла /etc/sudoers. Если в файле /etc/sudoers раскомментировать директиву
includedir /etc/sudoers.d
то дополнительно настройки будут считываться из всех файлов в директории /etc/sudoers.d.
Не рекомендуется напрямую править файл /etc/sudoers, рекомендуется использовать команду
visudo
которая откроет файл для редактирования. Кроме прочих функций, данная программа проверит синтаксис, и если в нём присутствует ошибка, то файл не будет сохранён.
При запуске visudo по умолчанию будет открыт файл /etc/sudoers. С помощью опции -f можно указать расположение файла в другом месте, например в /etc/sudoers.d.
Как разрешить пользователи выполнять только определённые команды с sudo
Необязательно каждому пользователю разрешать любые действия с sudo. Вы можете ограничить возможности пользователя выполнением только некоторых программ.
В файл /etc/sudoers нужно добавить строку вида:
Имя_пользователя Имя_машины=(Реальный_пользователь:Группа) команда
В этой строке значения следующие:
- Имя_пользователя: Это тот пользователь, кто инициировал выполнение команды с sudo
- Имя_машины: Это имя хоста, где будет действительна команда sudo. Полезно если у вас много хостовых машин.
- (Реальный_пользователь): Тот пользователь, от чьего имени будет выполнена команда.
- Группа: группа, к которой принадлежит пользователь.
- команда: команда или набор команд, разрешённых для запуска с sudo этому Пользователю.
Предположим, я хочу разрешить пользователю admin выполнять любые команды от имени любых пользователей, тогда мне нужно добавить строку:
admin ALL=(ALL:ALL) ALL
Другой вариант, я хочу разрешить пользователю admin выполнять только команды /home/admin/backup.sh и /usr/bin/apt, и выполнять их он может только от root, тогда мне нужно добавить строку:
admin ALL=(root:ALL) /home/admin/backup.sh,/usr/bin/apt
Обратите внимание, что если команд несколько, то они перечисляются через запятую без пробела.
По умолчанию включена настройка, которая разрешает всем членам группы sudo выполнять любые команды с sudo. Эта настройка заключена в строке:
%sudo ALL=(ALL:ALL) ALL
В зависимости от дистрибутива, она же может быть записана так:
%wheel ALL=(ALL) ALL # ИЛИ %wheel ALL=(ALL:ALL) ALL
Чтобы в действительности ограничить права пользователя, нужно закомментировать эту строку, то есть поставить перед ней символ #:
#%sudo ALL=(ALL:ALL) ALL
Как узнать, какие sudo полномочия имеются у пользователя
Мы только что узнали, что у определённого пользователя могут быть ограниченные полномочия на выполнение команд с sudo. Как узнать, какие именно команды может выполнить пользователь или как проверить, сработали ли наши настройки в файле /etc/sudoers?
Для вывода всех разрешённых команд или для проверки определённой команды, используется опция -l. Но если не указать опцию -U с именем интересующего пользователя, то будут выведены данные для пользователя по умолчанию (root).
Пример проверки прав sudo для пользователя admin:
sudo -l -U admin
Matching Defaults entries for admin on HackWare: env_reset, mail_badpass, secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin User admin may run the following commands on HackWare: (root : ALL) /home/admin/backup.sh, /usr/bin/apt
Строка «User admin may run the following commands on HackWare» означает «пользователь admin может запускать следующие команды на HackWare».
Также можно узнать, является ли та или иная команда заблокированной или разрешённой для выполнения пользователем с sudo следующим образом:
sudo -l -U ПОЛЬЗОВАТЕЛЬ КОМАНДА
Если команда запрещена, то ничего не будет выведено:
sudo -l -U admin rm
Если команда разрешена, то будет выведен полный путь до файла:
sudo -l -U admin apt /usr/bin/apt
Как настроить использование sudo без пароля
Данная настройка только для тех пользователей, кто действительно понимает зачем он это делает и какие риски безопасности это влечёт.
Чтобы отключить запрос пароля ПОЛЬЗОВАТЕЛЮ при вводе одной или нескольких КОМАНД с sudo:
ПОЛЬЗОВАТЕЛЬ ALL=(ALL:ALL) NOPASSWD: КОМАНДА1,КОМАНДА2,КОМАНДА3
Чтобы отключить запрос пароля ПОЛЬЗОВАТЕЛЮ при вводе любой команды с sudo:
ПОЛЬЗОВАТЕЛЬ ALL=(ALL:ALL) NOPASSWD: ALL
Чтобы отключить запрос пароля всем пользователям при вводе одной или нескольких КОМАНД с sudo:
%sudo ALL=(ALL:ALL) NOPASSWD: КОМАНДА1,КОМАНДА2,КОМАНДА3
Чтобы отключить запрос пароля всем пользователям при вводе любой команды с sudo:
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
К примеру, чтобы разрешить пользователю admin выполнять команды /home/admin/backup.sh и /usr/bin/apt с sudo без необходимости ввода пароля, нужно добавить строку:
admin ALL=(ALL:ALL) NOPASSWD: /home/admin/backup.sh,/usr/bin/apt
Это конец первой части. Во второй части мы рассмотрим другие интересные настройки и опции команды sudo.
Связанные статьи:
- Как пользоваться sudo (100%)
- SSH (ч.1): Что такое SSH. Утилиты SSH (52.1%)
- SSH (ч.2): Настройка сервера OpenSSH (52.1%)
- SSH (ч.3): Как подключиться к SSH. Настройка клиента OpenSSH (52.1%)
- SSH (ч.4): Создание и настройка ключей OpenSSH (52.1%)
- Полное руководство по mod_rewrite (часть 3): Флаги RewriteRule (RANDOM — 50%)
Источник: hackware.ru
SUDO и SU
Обе команды sudo и su позволяют в Linux выполнить команду от любого пользователя, в том числе от root . Но есть между ними одно принципиальное различие.
- Для выполнения команды от имени другого пользователя с помощью su , вы должны указать пароль другого пользователя.
- Для выполнения команды от имени другого пользователя с помощью sudo , вы должны указать свой пароль.
SU
Команда su появилась раньше. При запуске без параметров она запрашивает пароль суперпользователя, при успехе подменяет имя текущего пользователя на root , оставляя текущие переменные окружения (почти все). Для запуска со всеми переменными окружения root:
Недостатки su :
- Можно забыть запустить su с нужными параметрами окружения.
- Пользователь должен знать все пароли от нужных ему юзеров. При увольнении сотрудника необходимо менять все пароли, которые он знал.
- root должен иметь пароль.
- По умолчанию не логирует действия пользователя.
- Невозможно определить кто именно запустил команду от имени другого пользователя.
- Нельзя ограничить права root .
Достоинства su :
- Работает «из коробки», не требует обязательных настроек настроек.
SUDO
Команда sudo появилась позже и значительно усилила безопасность системы. Теперь не нужно раздавать пароли направо и налево. Можно тонко настраивать права доступа. Теперь root вообще можт не иметь пароля.
Для запуска со всеми переменными окружения root:
Недостатки sudo :
- Требует настройки.
- Писать дольше 🙂
Достоинства sudo :
- Пользователь не должен знать чужие пароли, в том числе от root .
- По умолчанию логирует действия пользователя.
- Можно определить кто именно запустил команду от имени другого пользователя.
- Можно тонко настроить права.
- Можно запустить только одну команду с правами другого пользователя без переключения в чужую оболочку.
Послесловие
Правила хорошего тона: не мешайте в коде вместе sudo и su , лучше использовать sudo .
Если вы единственный администратор на сервере, то нет ничего зазорного в использовании su .
В Debian дистрибутивах root не имеет пароля, все административные действия должны производиться с помощью sudo или его графический аналог gksudo .
Команда sudo запоминает на 15 секунд (по умолчанию) введённый пароль, последующая команда этот пароль не запрашивает. Время сессии можно изменить.
Если вам понравилась статья, то ставьте каналу. Пишите комментарии, задавайте вопросы, подписывайтесь.
Источник: dzen.ru