Настройка персонализированных правил
Мы познакомились с общим синтаксисом файла, а теперь попробуем создать новые правила.
Создание псевдонимов
Файл можно организовать более эффективно, группируя элементы с помощью разнообразных псевдонимов.
Например, мы можем создать три разных группы пользователей с некоторыми общими участниками:
/etc/sudoers
Имена групп должны начинаться с заглавной буквы. Затем мы можем дать участникам группы разрешение на обновление базы данных , создав следующее правило:
/etc/sudoers
Если мы не укажем пользователя или группу для запуска, команда по умолчанию использует пользователя root.
Мы можем дать членам группы разрешение на выключение и перезагрузку системы, создав псевдоним команды и используя его в правиле для :
/etc/sudoers
Мы создадим псевдоним команды с именем , который будет содержать команды выключения и перезагрузки системы. Затем мы дадим членам группы разрешение на выполнение этих команд.
Также мы можем создать псевдонимы запуска от имени, которые могут заменять часть правила, где указывается, от имени какого пользователя следует выполнить команду:
/etc/sudoers
Это позволит любому участнику группы выполнять команды от имени пользователя или пользователя .
Необходимо помнить, что в случае конфликта правил более поздние правила имеют приоритет перед более ранними.
Фиксация правил
Есть ряд способов, которые позволяют более точно контролировать реакцию на вызов.
Команда , связанная с пакетом , относительно безобидна при ее выполнении в системе с одним пользователем. Если мы хотим разрешить пользователям выполнять ее с привилегиями root без ввода пароля, мы можем создать правило следующего вида:
/etc/sudoers
— это свойство, означающее, что пароль не запрашивается. У него есть сопутствующее свойство , которое используется по умолчанию и требует ввода пароля. Данное свойство актуальной для остальной части строки, если его действие не переопределяется дублирующим тегом в этой же строке.
Например, мы можем использовать следующую строку:
/etc/sudoers
Также полезно свойство , которое можно использовать для предотвращения опасного поведения некоторых программ.
Например, некоторые программы, такие как , могут активировать другие команды, вводя их через свой интерфейс:
При этом все команды пользователя выполняются с теми же разрешениями, что и команда , что может быть довольно опасно.
Чтобы ограничить такое поведение, мы можем использовать следующую строку:
/etc/sudoers
Как работает sudo?
Перед тем, как переходить к настройке доступа к утилите sudo давайте рассмотрим как она работает. В Linux есть два способа получить права администратора. Вы можете переключиться на пользователя root с помощью команды su или можете передать в параметре нужную команду утилите sudo, которая выполнит ее с правами администратора. Причем второй способ предпочтительнее, потому что вы не забудете что используете права root и не наделаете ничего лишнего.
Имя команды означает substitute user do или super user do. Утилита позволяет запускать программы от имени другого пользователя, но чаще всего от имени корневого. Утилита была разработана еще в 1980 году Бобом Когшелом и Клиффом Спенсером. За это время сменилось много разработчиков и было добавлено много функций.
Работает sudo благодаря флагу доступа SUID. Если этот флаг установлен для программы, то она выполняется не от имени того пользователя который ее запустил, а от имени владельца, учитывая что файл sudo принадлежит, то утилита выполняется от имени root. Затем она читает свои настройки, запрашивает пароль пользователя и решает можно ли ему разрешать выполнение команд от имени администратора. Если да, то выполняется переданная в параметре команда.
Теперь, когда вы знаете теорию, давайте рассмотрим как настроить sudo в Linux.
Как использовать редактор Nano?
В первую очередь нужно сказать, что nano – это консольный текстовый редактор, а это значит что его принято выполнять именно из терминала. Для этого применяется такой синтаксис:
$ nano опции /адрес/файла/файл
Использовать опции командной строки не обязательно достаточно только указать имя файла, но в некоторых случаях опции могут быть очень полезны. Рассмотрим их подробнее:
- +номер – указать строку в файле, с которой нужно начинать редактирование;
- -B – создавать резервную копию для файла при сохранении;
- -С – папка для резервной копии;
- -D – выводить текст жирным;
- -E – конвертировать табуляции в пробелы;
- -F – включить поддержку редактирования нескольких файлов;
- -H – сохранять историю поиска и замены;
- -I – не читать конфигурацию из файлов nanorc;
- -P – запоминать и восстанавливать позицию курсора во время последнего редактирования;
- -T – размер табуляции в пробелах;
- -m – включить поддержку мыши;
- -v – режим только для чтения, вы не можете сохранить файл.
Мы рассмотрели только самые главные опции программы, естественно, что на самом деле их намного больше, но для начала этих будет вполне достаточно. Дальше мы рассмотрим как работать с самой программой ее внешний вид и сочетания клавиш.
Чтобы открыть какой-либо файл, достаточно передать его в параметрах команде nano. Если такого файла не существует, будет создан новый. Например:
Главное окно программы выглядит очень просто, в верхней строке находится версия редактора и имя файла, а также уведомление был ли файл изменен. Дальше идет сам текст, а в самом низу опять имя файла и основные сочетания клавиш, которые вы можете использовать для работы с программой.
Для перемещения по тексту вы можете использовать мышку, стрелки на клавиатуре или специальные сочетания клавиш. В программе нет никакого меню, а все действия выполняются именно с помощью горячих клавиш. Возможно, некоторые из них будет не просто запомнить с первого раза,но после нескольких раз практики все получится. Тем более, что все самое необходимое отображается внизу экрана. Для активации того или иного действия достаточно нажать Ctrl и указанную букву. Клавиша Shift нигде не используется.
Основные комбинации клавиш
А теперь рассмотрим подробнее какие сочетания клавиш предлагает текстовый редактор nano linux. Чтобы открыть более подробную информацию о сочетаниях клавиш нажмите Ctrl+G:
Когда завершите работу с редактором и сохраните изменения нажмите Ctrl+X для выхода, если файл не был сохранен, программа предложит это сделать:
Перед тем как закрывать программу, нужно сохранить изменения в файл на диске. Для этого используйте сочетание Ctrl+O. Если вы запустили nano без параметров, вам нужно будет ввести имя файла.
Вы можете вставить содержимое другого файла на позицию курсора, для этого нажмите Ctrl+R и введите имя целевого файла:
Чтобы отменить последнее действие нажмите Alt+U. А повторить последнее действие еще раз вы можете с помощью Alt+E. Для поиска по строке или регулярному выражению нажмите Ctrl+W, вы можете использовать стандартные регулярные выражения синтаксиса perl:
С помощью сочетания клавиш Alt+R вы можете использовать поиск и замену:
Мы рассмотрели основные комбинации клавиш, которые используются для управления функциями редактора. Возможно, они покажутся вам сложными, но для начала достаточно знать только Ctrl+O и Ctrl+X, все остальное придет потом.
Сочетания клавиш для навигации
Давайте теперь рассмотрим горячие клавиши для быстрого перемещения по тексту в редакторе nano. Конечно, вы всегда можете использовать уже привычные клавиши PageUP, PageDown, Home, End и клавиши со стрелками, но это не совсем удобно учитывая, что у nano есть свои сочетания. Хотя они не настолько практичны как у Vim, но вы все же можете их использовать.
Для перемещения курсора вперед или назад нажимайте Ctrl+F и Ctrl+B, а для перемещения вверх/вниз по одной строке применяйте Ctrl+P и Ctrl+N.
Для перемещения в начало строки используйте Ctrl+A, а в конец – Ctrl+E. Также существуют сочетания для перемещения по страницах, Ctrl+V перемещает на страницу вниз, а Ctrl+Y – на страницу вверх.
Но это еще не все. Вы можете перемещаться по словам с помощью Ctrl+Пробел и Alt+Пробел, а также нажать Ctrl+_ и ввести номер нужной строки, а через запятую даже символ.
Чтобы посмотреть где сейчас находится курсор, нажмите Ctrl+C.
Следующие 9 символов обозначают права доступа.
Данные 9 символов состоят из трех групп:
- Первая группа из трех символов обозначает права доступа владельца файла или директории (u — user).
- Вторая группа из трех символов обозначает права доступа на файл или директорию для системной группы (g — group).
- Третья группа из трех символов обозначает права доступа на файл или директорию для всех остальных (o — other).
У этих трёх групп одинаковая комбинация символов, то есть:
Что же они обозначают?
Очень легко запомнить:
r | read, то есть, право доступа на чтение файла или директории. |
w | write, то есть, право на изменение и удаление файла или директории. |
x | eXecute, то есть, право на запуск файла как программы или вход в директорию. |
Всегда располагаются в таком порядке:
Если вместо какого-то символа идёт тире (минус), к примеру:
то это значит, что отсутствуют права на изменение и удаление файла или директории.
Или так:
то это обозначает, что отсутствуют права на изменение и запуск файла или директории. Доступен только просмотр.
Таким образом, из нашего примера:
это сообщение обозначает, что является директорией, у владельца и у группы есть полные права доступа — на чтение, изменение, удаление, запуск (вход внутрь каталога), у всех остальных есть только права на чтение и запуск(вход внутрь каталога).
Как видите, ничего сложного нет.
Определение владельца и группы файла или директории.
Но у Вас может возникнуть закономерный вопрос о том, а как же узнать, кто именно является владельцем файла и какая группа?
Те же самые команды из первого пункта:
Как видно на скриншоте:
- в третей колонке идет имя владельца файла;
- в четвертой колонке идет название группы.
Следовательно, если пользователь не владелец файла, но входит в группу, то у него будут права на файл или директорию этой самой группы.
Изменение файловой системы в локальном хранилище.
Если вы столкнулись с этой проблемой только при попытке загрузить файлы, размер которых превышает 4 ГБ в локальном хранилище, вы явно видите 0x800700DF из-за ограничения, вызванного вашей файловой системой.
Скорее всего, вы пытаетесь загрузить файл на диск с файловой системой FAT32, которая поддерживает файлы размером не более 4 ГБ, в отличие от NTFS, которая поддерживает файлы размером до 16 ТБ.
Если этот сценарий применим, решение очевидное — вам необходимо перейти на NTFS, чтобы облегчить передачу файлов большего размера.
Это может быть немного хлопотно, если у вас есть только одна петиция, в которой также содержится ваша ОС — в этом случае вам нужно будет заранее создать резервную копию своих данных, прежде чем изменять файловую систему и переустанавливать ОС.
Но если вы получаете эту ошибку при попытке загрузки в автономный раздел, который не включает вашу ОС, вы можете просто отформатировать диск в другую файловую систему. Вот краткое пошаговое руководство, как это сделать:
Важно: эта операция эффективно удалит все данные, которые вы в данный момент храните в разделе. Поэтому, если у вас есть какие-либо важные данные, которые вы не можете потерять, заранее сделайте резервную копию своих данных, прежде чем приступить к шагам, описанным ниже
- Откройте проводник и найдите диск, с которым у вас возникли проблемы.
- Затем щелкните его правой кнопкой мыши и выберите «Формат…» в только что появившемся контекстном меню.Форматирование проблемного диска в другую файловую систему
- В меню «Форматировать локальный диск» установите для Файловой системы значение NTFS, а в качестве размера единицы размещения — Размер выделения по умолчанию.Форматирование в NTFS
- Затем дайте имя новому формату тома, прежде чем снимать флажок «Быстрое форматирование» и нажимать «Пуск».
- Подтвердив последовательность форматирования для новой файловой системы, терпеливо подождите, пока NTFS не будет применена. В зависимости от размера тома эта операция может занять несколько часов.
- После успешного перехода на новую файловую систему перезагрузите компьютер, затем повторите операцию, которая ранее вызывала ошибку 0x800700df, чтобы проверить, устранена ли проблема.
Ошибка отказано в доступе Linux
Наиболее часто такая ошибка встречается, в таких случаях:
- Вы пытаетесь выполнить команду в терминале;
- Вы пытаетесь примонтировать внешний носитель с помощью файлового менеджера;
- Вы пытаетесь запустить системный сервис и находите такую ошибку в логе.
В операционной системе Linux действует сложная система полномочий. Настройки доступа для каждого файла настраиваются тремя параметрами — чтение, запись и выполнение. Эти параметры устанавливаются для трех категорий — владелец файла, группа файла и все остальные пользователи.
Если вы попытаетесь получить доступ, например, открыть для чтения файл, к которому вам доступ не разрешен, то вы получите такую ошибку. А учитывая что все устройства, сокеты, и другие системные объекты — это тоже файлы, то вы будете получать такую ошибку всегда, когда попытаетесь сделать то, что вам не позволено. Самый простой способ обойти такой запрет — это выполнять нужную команду от имени суперпользователя.
Многие программы проверяют после запуска от какого пользователя они запущены и говорят, что их нужно запускать от имени суперпользователя, но так ведут себя не все. Например, команда ls вернет ошибку отказано в доступе linux если вы попытаетесь посмотреть содержимое каталога суперпользователя:
Но эта же команда нормально отработает нормально при использовании команды sudo:
Другой случай, это если вы обнаруживаете проблему в логах какого-либо системного сервиса, например, веб-сервера Apache. Казалось бы, должно было быть все верно, потому что запуск и так выполняется от имени суперпользователя.
Но нет, сервисы не только запускаются от имени суперпользователя, но потом, для увеличения безопасности они меняют пользователя на обычного, не привелигированного. Например, Apache работает от имени пользователя apache или www-data. Уже от имени этого пользователя программа пытается получить доступ к файловой системе.
Если нужная папка не доступна этому пользователю для чтения то вы получите ошибку access denied linux. Обычно, в логе программа сообщает какая папка или файл нужен когда происходит ошибка.
Вам просто нужно поменять на него права с помощью утилиты chmod или изменить владельца chown. Причем, нужно чтобы ко всем подкаталогам на пути к целевому каталогу был доступ у программы. Например, нельзя так чтобы права на чтение /home/ не было, а на /home/user/ было. Так не пройдет.
Права разрешающие чтение и запись владельцу и только чтение для группы и остальных вставляются командой:
Или для смены прав для всех файлов в каталоге и самого каталога:
Или вы можете изменить владельца, обычно, это более безопасная и распространенная практика:
Имя пользователя, от имени которого работает сервис вы можете посмотреть с помощью команды:
После того как вы установите правильные права, ошибка отказано в доступе linux больше не будет встречаться.
Настройка
Использование visudo
Файл настроек всегда следует редактировать с помощью команды . блокирует файл , сохраняет изменения во временный файл и проверяет, что файл грамматически корректен, перед тем как скопировать его в .
Важно:
Крайне важно, чтобы файл был без синтаксических ошибок! Любая ошибка делает sudo неработоспособным
Всегда редактируйте его только с помощью для предотвращения ошибок.
Из : Обратите внимание, что это дыра в безопасности, поскольку позволяет пользователю запускать любую программу, какую он захочет, просто прописав её в VISUAL или EDITOR.. visudo использует в качестве текстового редактора по умолчанию
В core репозитории sudo скомпилирована с по умолчанию и использует переменные и
не используется, если задана переменная .
visudo использует в качестве текстового редактора по умолчанию. В core репозитории sudo скомпилирована с по умолчанию и использует переменные и . не используется, если задана переменная .
Чтобы сделать nano редактором visudo в течение текущего shell сеанса, задайте и экспортируйте переменную перед тем, как выполнять visudo.
Он будет использован, если вы не определили другой редактор, установив переменные окружения или (используемые в таком порядке) в качестве желаемого редактора, например . Выполните команду с правами суперпользователя:
# EDITOR=nano visudo
Для изменения редактора на постоянной основе для текущего пользователя, прочтите . Для того, чтобы установить выбранный редактор на постоянной основе для всей системы, но только для , добавьте следующее в (предположим, что вы предпочитаете в качестве редактора):
# Сброс окружения Defaults env_reset # Установка nano в качестве редактора по умолчанию и запрет visudo использовать EDITOR/VISUAL. Defaults editor=/usr/bin/nano, !env_editor
Примеры настроек
Настройка sudo осуществляется добавлением записей в файл . Чтобы дать пользователю привилегии суперпользователя, когда он вводит перед командой, добавьте следующую строку:
имя_пользователя ALL=(ALL) ALL
Разрешить пользователю выполнять все команды от любого пользователя, но только на машине с определенным названием хоста:
имя_пользователя название_хоста=(ALL) ALL
Предоставить членам группы доступ sudo:
%wheel ALL=(ALL) ALL
Чтобы не спрашивать пароль у пользователя:
Defaults:имя_пользователя !authenticate
Разрешить выполнять только конкретные команды и только пользователю на определенном хосте:
имя_пользователя название_хоста=/usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu
Примечание: Наиболее общие опции должны идти в начале файла, а наиболее частные — наоборот, в конце файла, так как более нижние строки переопределяют более верхние. В частности, добавляемая строка должна быть после строки , если ваш пользователь находится в этой группе.
Разрешить выполнять конкретно определённые команды только для пользователя на определенном хосте и без пароля:
имя_пользователя название_хоста= NOPASSWD: /usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu
Права доступа к файлам sudoers по умолчанию
Файл должен иметь владельца root и группу root (0). Права доступа всегда должны быть установлены как (0440). Эти права установлены по умолчанию, однако если вы случайно измените их, они должны быть немедленно изменены обратно, иначе sudo не будет работать.
# chown -c root:root /etc/sudoers # chmod -c 0440 /etc/sudoers
Время действия введённого пароля
Возможно, вы захотите изменить промежуток времени, в течение которого sudo действует без ввода пароля. Этого легко добиться добавив опцию в :
Defaults:имя_пользователя timestamp_timeout=время_в_минутах
Например, чтобы установить тайм-аут на 20 минут:
Defaults:имя_пользователя timestamp_timeout=20
Совет: Если вы хотите чтобы sudo всегда требовал ввод пароля, установите равным 0. Чтобы срок действия пароля никогда не истекал, установите любое отрицательное значение.
Включение службы веб-клиента (если применимо)
Если вы столкнулись с этой проблемой при попытке загрузить большой файл в SharePoint или аналогичную облачную службу, и ранее вы убедились, что размер файла не превышает максимальный размер файла, разрешенный FileSizeLimitInBytes, следующее, что вам следует выяснить, это то, если служба необходимая для выполнения этой операции включена.
Основной службой, используемой для обмена данными между вашим локальным хранилищем и SharePoint (или другим программным обеспечением, использующим WebDAV), является веб-клиент.
Несколько затронутых пользователей, с которыми мы ранее сталкивались с кодом 0x800700DF, сообщили, что проблема исчезла быстро после того, как они открыли экран «Службы» и убедились, что службе WebClient разрешено запускаться и настроена так, чтобы ее можно было вызывать в действие, когда это необходимо.
Следуйте приведенным ниже инструкциям, чтобы убедиться, что служба веб-клиента включена для разрешения ошибки 0x800700DF:
- Нажмите клавишу Windows + R, чтобы открыть диалоговое окно «Выполнить». Затем, когда вам будет предложено текстовое поле «Выполнить», введите «service.msc» и нажмите клавишу «Ввод», чтобы открыть экран «Службы» в Windows 10. В UAC (запрос учетной записи пользователя) нажмите «Да», чтобы предоставить доступ администратора.Открытие экрана услуг
- На экране «Службы» перейдите в правую часть экрана и найдите имя службы WebClient.
- Увидев его, щелкните его правой кнопкой мыши и выберите «Свойства» в появившемся контекстном меню.Доступ к меню свойств
- Находясь на экране «Свойства» службы WebClient, перейдите на вкладку «Общие» и измените тип запуска на «Вручную», затем нажмите кнопку «Пуск», чтобы принудительно включить службу, если она в настоящее время отключена.Включение службы веб-клиента
- Убедившись, что служба веб-клиента включена, повторите действие, которое ранее вызывало ошибку 0x800700DF, и посмотрите, устранена ли проблема.
Если проблема все еще не устранена, перейдите к следующему потенциальному исправлению ниже.
Вводная информация
Для начала давайте создадим пользователей над которым будем ставить эксперименты (подробно про создание пользователей можно почитать тут – Пользователи в Linux — добавление, изменение, удаление):
useradd hc -m -G wheel passwd hc
1 2 |
useradd hc-m-Gwheel passwd hc |
Сразу поместим нашего пользователя hc в группу wheel. Традиционно, в эту группу помещаются пользователи, которые будут иметь административный доступ. Это повелось еще с тех пор, когда основным инструментом для делегирования прав была команда
. Если интересуют подробности – поищите сами.
useradd user1 -m passwd user1
1 2 |
useradd user1-m passwd user1 |
Второй пользователь нужен нам для разнообразия.
Файл конфигурации /etc/sudoers и visudo
Все настройки хранятся в файле
. Файл этот не совсем обычный, даже под рутом просто так его отредактировать не получиться, т.к. запись в файл запрещена. Для работы с этим файлом есть специальная утилита
. Смысл такого ограничения вот в чем. Любая ошибка делает
неработоспособным, стоит ошибиться или описаться и получаете кучу проблем. Вы можете совсем лишиться доступа к административным функциям и придется пользоваться recovery mode для восстановления доступа. Это если у вас есть физический доступ к серверу. А если это VPS?
Что бы такое не происходило
при запуске блокирует файл
и для редактирования открывает копию. При сохранении происходит проверка синтаксиса и если допущена ошибка – выдаст об этом предупреждение.
visudo: >>> /etc/sudoers: syntax error near line 28 <<< What now?
1 2 |
visudo>>>etcsudoerssyntax error near line28<<< What now? |
В ответ введите:
– откроет снова файл для исправления ошибки;
– не сохранять изменения;
– сохранит файл не смотря на ошибки (так лучше не делать);
ВАЖНО! В некоторых “инструкция” которые можно найти предлагают делать следующее – сначала root разрешает запись в файл
, что то типа:
chmod +w /etc/sudoers
1 | chmod+wetcsudoers |
потом просто редактируем файл и снимаем запись
. Ни когда так не делайте! Чаше всего так советуют из нежелания пользоваться редактором vi, который запускается по умолчанию через
. Если вам не нравиться
, его можно спокойно заменить на любой другой. Для этого в консоли выполните, например:
EDITOR=nano visudo
1 | EDITOR=nano visudo |
В этом случае запуститься редактор nano вместо vi.
Меняем редактор visudo
Если же хотите, назначить редактор на постоянную основу, переопределите значение EDITOR. Я обычно это делаю через пользовательский конфиг оболочки – для bash это
. Добавьте в файл следующую строку:
export EDITOR=nano
1 | export EDITOR=nano |
Зайдите в сессию заново, выполните для проверки:
# env | grep EDIT EDITOR=nano
1 2 |
root@hc~# env | grep EDIT EDITOR=nano |
Если не хотите менять системный редактор, а задать только для visudo, добавьте в sudoers след. строки:
# Сбрасываем переменных окружения окружения Defaults env_reset # Устанавливаем nano редактором по умолчанию и запрещаем использовать EDITOR/VISUAL из окружения Defaults editor=/usr/bin/nano, !env_editor
1 2 3 4 |
# Сбрасываем переменных окружения окружения Defaults env_reset # Устанавливаем nano редактором по умолчанию и запрещаем использовать EDITOR/VISUAL из окружения Defaults editor=usrbinnano,!env_editor |
Использование
Давайте теперь рассмотрим использование sudo на конкретных примерах.
Активируем запись log-файла для sudo
Добавляем в конфигурационный файл след. строку:
Defaults logfile=/var/log/sudo.log
1 | Defaults logfile=varlogsudo.log |
Теперь в этот файл будет писаться информация случаях некорректного использования
.
Разрешим пользователям группы wheel полный административный доступ.
Откройте конфигурационный файл и найдите строку:
# %wheel ALL=(ALL) ALL
1 | # %wheel ALL=(ALL) ALL |
уберите символ
, чтобы раскомментировать строку и сохраните файл. Если вдруг такой строки вы не нашли, то просто добавьте ее.
Для проверки зайдите на сервер пользователем hc и выполните
~% sudo -s password for hc: /home/hc#
1 2 3 |
hc@hc~%sudo-s sudopassword forhc root@hchomehc# |
Введя еще раз пароль от пользователя hc вы получите доступ к консоли с правами root.
Для сравнения залогиньтесь как user1 – получите что-то похожее:
~% sudo -s password for user1: user1 is not in the sudoers file. This incident will be reported.
1 2 3 |
user1@hc~%sudo-s sudopassword foruser1 user1 isnotinthe sudoers file.Thisincident will be reported. |
Посмотрим log-файл
, увидим информацию, что user1 пытался использовать sudo, не имея на это прав:
Jul 28 16:00:55 : user1 : user NOT in sudoers ; TTY=pts/2 ; PWD=/home/user1 ; USER=root ; COMMAND=/bin/bash
1 2 |
Jul28160055user1user NOTinsudoers;TTY=pts2;PWD=homeuser1; USER=root;COMMAND=binbash |
Убираем запрос пароля при запуске команд через sudo
Для той же группы wheel:
%wheel ALL=(ALL) NOPASSWD: ALL
1 | %wheel ALL=(ALL)NOPASSWDALL |
А ТЕПЕРЬ ВНИМАНИЕ! Ни когда не даем пользователю полного доступа, как в предыдущем примере и тем более, без ввода пароля, как описано в этом! Всегда давайте ровно столько, сколько надо!
Примеры безопасного делегирования прав
Разрешим user1 пользоваться yum (для Debian/Ubuntu заменить yum на apt-get), добавим строчку:
%user1 ALL=/usr/bin/yum
1 | %user1 ALL=usrbinyum |
Теперь user1 может выполнить:
sudo yum install ineedthisprogram
1 | sudo yum install ineedthisprogram |
и установить ту программу которая ему нужна. Если же выполнить без добавления sudo:
yum install htop Loaded plugins: fastestmirror You need to be root to perform this command.
1 2 3 |
yum install htop Loaded pluginsfastestmirror You need tobe root toperform thiscommand. |
Создадим группу yumusers и добавим туда user1:
# groupadd yumusers # usermod user1 -aG yumusers
1 2 |
# groupadd yumusers # usermod user1 -aG yumusers |
Изменим строчку в
следующим образом:
%yumusers ALL=/usr/bin/yum
1 | %yumusers ALL=usrbinyum |
Теперь все пользователи этой группы смогут пользоваться yum, а нового пользователя достаточно добавить в группу, не прописывая в конфиг.
Формат записей выделения прав
Давайте поподробнее разберем, что же значат все эти ALL. Структура строки следующая:
=()
1 | пользователь|группахост=(кемможетстать)чтоможетсделать |
Т.е. запись:
%user1 ALL=(root) /usr/bin/yum, /user/bin/mount
1 | %user1 ALL=(root)usrbinyum,userbinmount |
означает – пользователь user1, на любом хосте, может от имени root запустить yum и mount, т.е. установить программу или примонтировать раздел.
Алиасы в sudo
В реальности, вряд ли вы ограничитесь только одной командой для одного пользователя. Скорее всего вам будет нужно выдать целый список доступов. Можно конечно каждый раз перечислять все через запятую, а можно и задать алиас. Что он из себя представляет:
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
1 | Cmnd_Alias NETWORKING=sbinroute,sbinifconfig,binping,sbindhclient,usrbinnet,sbiniptables,usrbinrfcomm,usrbinwvdial,sbiniwconfig,sbinmii-tool |
и теперь вы можете написать:
%user1 ALL=(root) Cmnd_Alias
1 | %user1 ALL=(root)Cmnd_Alias |
В
уже созданы несколько алиасов на наиболее распространенные группы команд, их достаточно раскомментировать и можно использовать.
Основные параметры
Алиас Defaults позволяет задать стандартные параметры для работы утилиты, их мы и рассмотрим в этом разделе. Начинается такой алиас со слова Defaults, дальше идет имя флага. Если перед именем есть символ !, это значит, что флаг нужно включить, в обратном случае выключить:
Отключаем введение при первом использовании:
Суперпользователь не может выполнять sudo:
Теперь если вы попытаетесь выполнить sudo sudo ничего не сработает:
Изменять домашнюю директорию для целевого пользователя, по умолчанию остается папка текущего пользователя в качестве домашней директории:
Сохранять список групп текущего пользователя:
Запрашивать пароль суперпользователя вместо пароля пользователя:
Дальше рассмотрим переменные, которым можно задать значения чтобы установить нужные настройки:
Задать количество попыток ввода пароля перед тем, как sudo прекратит работу, по умолчанию — 3:
Количество минут, которое пройдет перед тем, как sudo будет спрашивать пароль снова, по умолчанию 5. Если установить значение в 0, то пароль будет спрашиваться всегда, независимо от того как давно вы использовали утилиту:
Следующий параметр задает количество минут, пока sudo будет ожидать повторного ввода пароля при неправильном вводе:
Вы можете изменить сообщение, которое будет выводится при запросе пароля:
Можно указать другого пользователя, не root, от которого будут выполняться все команды, для этого используйте:
Вы можете записывать в лог все попытки подключения к sudo:
Затем пробуем проверить работу лога:
Это были все самые интересные параметры настройки работы sudo, которые могут вам понадобиться, дальше мы рассмотрим как задать права доступа sudo для пользователей.
Настройка пользователей sudo
Мы уже рассматривали выше синтаксис настройки действий для пользователей, здесь все сложнее чем с псевдонимами, но разобраться можно. Например, разрешим любому пользователю использовать sudo, от любого хоста и выполнять любые команды:
Такая команда очень небезопасна, она разрешает всем и все. Первое ALL — разрешить всем пользователям, второе ALL — для всех хостов, третье ALL — разрешить вход под любым пользователем и четвертое — разрешить выполнять любою команду. Но куда более часто используется другая конструкция:
Означает то же самое, что и предыдущее, только здесь мы разрешаем использовать sudo не всем пользователям, а только тем, которые состоят в группе wheel.
Тут мы уже ограничили возможный выбор пользователей только пользователем root. Также можно указать группу пользователя, от имени которого он может выполнять команды:
Это значит что можно выполнить команду от имени root или другого пользователя из группы admins. Еще мы можем указать команды, которые может выполнять пользователь. Например:
Пользователь может выполнять только команды mount и umount от имени суперпользователя. Теперь сделаем еще интереснее, пользователь может выполнять mount и umount без пароля, а все остальные команды с паролем:
Также можно ограничивать пользователям по хостах, например, разрешаем использование sudo только из host1:
Осталось еще рассмотреть как применять псевдонимы. Псевдонимы могут быть таких типов:
- User_Alias — псевдоним пользователей, которые будут использовать sudo;
- Runas_Alias — псевдоним пользователей, от имени которых будут выполняться команды;
- Host_Alias — псевдоним хоста;
- Cmnd_Alias — псевдоним команд;
Например, создадим четыре псевдонима и применим их в нашем правиле:
Далее применяем все это в правиле:
Это значит, что пользователи из списка Users смогут выполнять команды Cmds от имени пользователей Amdins на хостах Hosts.
Еще осталось сказать несколько слов о флагах. Флаг NOPASSWD говорит, что не нужно запрашивать пароль при выполнении этого правила. Например, разрешить всем пользователям выполнять команду mount с sudo без пароля:
Также можно запретить выполнять именно эту команду вообще с помощью флага NOEXEC:
Вы можете проверить правильно ли была проведена настройка файла /etc/sudoers и посмотреть все созданные правила с помощью команды:
Здесь отображены все установленные флаги и настройки, а также полномочия данного пользователя.