Sudo linux что это
Команда Sudo в Linux
Команда sudo позволяет запускать программы от имени другого пользователя, по умолчанию root. Если вы проводите много времени в командной строке, sudo — одна из команд, которую вы будете использовать довольно часто.
Использование sudo вместо входа в систему с правами root более безопасно, поскольку вы можете предоставлять ограниченные административные привилегии отдельным пользователям, не зная их пароля root.
Установка Sudo (команда sudo не найдена)
Пакет sudo предустановлен в большинстве дистрибутивов Linux.
Если sudo не установлен, вы можете легко установить его с помощью диспетчера пакетов вашего дистрибутива.
Установите Sudo в Ubuntu и Debian
Установите Sudo на CentOS и Fedora
Добавление пользователя в Sudoers
В Debian, Ubuntu и их производных членам группы sudo предоставляется доступ sudo:
Учетная запись пользователя root в Ubuntu по умолчанию отключена из соображений безопасности, и пользователям рекомендуется выполнять системные административные задачи с помощью sudo. Первоначальный пользователь, созданный установщиком Ubuntu, уже является членом группы sudo, поэтому, если вы используете Ubuntu, есть вероятность, что пользователь, с которым вы вошли в систему, уже получил права sudo.
Например, чтобы позволить пользователю linuxize запускать только команду mkdir как sudo, введите:
и добавьте следующую строку:
Вы также можете разрешить пользователям запускать команды sudo без ввода пароля :
Как использовать судо
Синтаксис команды sudo следующий:
Команда sudo имеет множество параметров, которые управляют ее поведением, но обычно она используется в самой простой форме, без каких-либо параметров.
Чтобы использовать sudo, просто добавьте к команде префикс sudo :
Где command — это команда, для которой вы хотите использовать sudo.
Sudo прочитает файл /etc/sudoers и проверит, есть ли у вызывающего пользователя sudo Assessment. При первом использовании sudo в сеансе вам будет предложено ввести пароль пользователя, и команда будет выполнена от имени пользователя root.
Например, чтобы перечислить все файлы в /root каталоге /, вы должны использовать:
Тайм-аут пароля
Установите тайм-аут по умолчанию, добавив строку ниже, где 10 — это время ожидания в минутах:
Если вы хотите изменить метку времени только для определенного пользователя, добавьте следующую строку, где user_name — это соответствующий пользователь.
Выполнить команду от имени пользователя, отличного от root
Существует ошибочное мнение, что sudo используется только для предоставления прав root обычному пользователю. Фактически, вы можете использовать sudo для запуска команды от имени любого пользователя.
В следующем примере мы используем sudo для запуска команды whoami от имени пользователя «richard»:
Команда whoami напечатает имя пользователя, запустившего команду:
Как перенаправить с помощью Sudo
Если вы попытаетесь перенаправить вывод команды в файл, для которого у вашего пользователя нет прав на запись, вы получите ошибку «Permission denied».
Выводы
Вы узнали, как использовать команду sudo и как создавать новых пользователей с привилегиями sudo.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии.
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Что такое sudo
Что означает sudo. Как запустить команду с sudo
Пожалуй самой часто используемой программой при системном администрировании (если вы работаете под обычным пользователем, а не под root), является sudo. Главное назначение sudo — это выполнить команду от имени другого пользователя, обычно от root. Смысл выполнения команды от root в том, что у него повышенные права доступа и, применяя sudo, обычный пользователь может выполнить те действия, на которые у него недостаточно прав.
Простейший и самый распространённый вариант запуска команд с sudo:
Если у КОМАНДЫ есть опции, аргументы, то для sudo не нужно делать какие-то дополнительные действия, например, помещать КОМАНДУ с опциями в кавычки или что-то ещё. Поставьте sudo и запускайте КОМАНДУ как обычно.
К примеру, я хочу выполнить:
Поскольку я работаю под обычным пользователем, то у меня нет прав доступа в директорию /root и я получаю ошибку:
Чтобы эта команда сработала, достаточно её записать после sudo:
Что использовать sudo или su?
У программы su похожее назначение: запустить команду с подстановкой ID другого пользователя и группы. То есть одинакового результата можно добиться используя как sudo, так и su.
Различия sudo и su в следующем:
1. При использовании su необходимо сообщать пароль root обычному пользователю (но это можно обойти — подробности в этом разделе чуть ниже). При использовании sudo пользователь вводит свой собственный пароль.
2. У обеих команд есть интерактивный режим, то есть можно как бы выполнить вход от имени другого пользователя. Также обе программы, sudo и su, позволяют выполнять команды без интерактивного режима. В su интерактивный режим запускается по умолчанию (если не указана команда для выполнения):
В sudo для входа в интерактивный шелл нужно использовать опцию -i:
Точнее говоря, всё немного сложнее, опция -i в sudo означает запустить оболочку входа в систему от имени указанного пользователя; также можно задать команду. Сравните:
Также обратите внимание, что при указании команды не запускается интерактивная оболочка.
3. Использование sudo требует настройки, а именно: 1) добавление пользователя в группу, имеющую право использовать эту программу; 2) установка разрешений (перечисление команд, которые может запускать пользователь с sudo и т. д. При некоторых настройках, если пользователь не упомянут в конфигурационных файлах sudo, то он не может ей пользоваться. Программа su не требует настройки для каждого пользователя.
4. Разное отношение с окружением выполнения: смена текущей рабочей директории при входе в интерактивный режим su, сохранение текущей рабочей директории при выполнении отдельных команд с sudo и su. Сравните переменную окружения $HOME в команде
со значением $HOME в команде:
5. Некоторые конструкции оболочки работают с sudo не так, как вы ожидаете. Смотрите в качестве примера статью «Как использовать echo вместе с sudo». С su такой проблемы нет.
Но если нужно выполнить несколько команд с повышенными привилегиями, то достаточно войти в интерактивную консоль su:
И затем перед командами уже ненужно ставить sudo.
Кстати, благодаря sudo можно войти в интерактивную сессию root’а не с паролем суперпользователя, а с паролем обычного пользователя, для этого нужно запустить такую команду:
Или использовать интерактивный режим самой sudo:
Как выполнить команду от имени другого пользователя
Запуск sudo:
означает выполнить КОМАНДУ от имени пользователя по умолчанию. Таким пользователем обычно является root, но, на самом деле, может быть настроен другой пользователь по умолчанию.
Если нужно выполнить команду от имени иного, не root пользователя, то используйте опцию -u:
Как создать пользователя с sudo
Рассмотрим как создать пользователя, имеющего права запускать команды с sudo.
Чтобы создать пользователя с sudo в Debian, Linux Mint, Ubuntu, Kali Linux и их производных выполните команду вида:
В Arch Linux, BlackArch и их производных для создания пользователя с sudo выполните команду вида:
Обратите внимание, что в Arch Linux группа, дающее право на выполнение команд sudo, называется wheel, а не, собственно, sudo. Также мы добавили пользователя сразу в две группы, а не в одну, имя второй группы video. Если вы создаёте пользователя на системе без графического окружения, например, на безголовом сервере, то добавлять в группу video не нужно.
В CentOS для создания пользователя с sudo выполните команду вида:
Теперь независимо от вашего дистрибутива, запустите одинаковую команду, чтобы установить пароль для нового пользователя:
Конфигурационный файл sudo
Программа sudo считывает конфигурацию из файла /etc/sudoers. Если в файле /etc/sudoers раскомментировать директиву
то дополнительно настройки будут считываться из всех файлов в директории /etc/sudoers.d.
Не рекомендуется напрямую править файл /etc/sudoers, рекомендуется использовать команду
которая откроет файл для редактирования. Кроме прочих функций, данная программа проверит синтаксис, и если в нём присутствует ошибка, то файл не будет сохранён.
При запуске visudo по умолчанию будет открыт файл /etc/sudoers. С помощью опции -f можно указать расположение файла в другом месте, например в /etc/sudoers.d.
Как разрешить пользователи выполнять только определённые команды с sudo
Необязательно каждому пользователю разрешать любые действия с sudo. Вы можете ограничить возможности пользователя выполнением только некоторых программ.
В файл /etc/sudoers нужно добавить строку вида:
В этой строке значения следующие:
Предположим, я хочу разрешить пользователю admin выполнять любые команды от имени любых пользователей, тогда мне нужно добавить строку:
Другой вариант, я хочу разрешить пользователю admin выполнять только команды /home/admin/backup.sh и /usr/bin/apt, и выполнять их он может только от root, тогда мне нужно добавить строку:
Обратите внимание, что если команд несколько, то они перечисляются через запятую без пробела.
По умолчанию включена настройка, которая разрешает всем членам группы sudo выполнять любые команды с sudo. Эта настройка заключена в строке:
В зависимости от дистрибутива, она же может быть записана так:
Чтобы в действительности ограничить права пользователя, нужно закомментировать эту строку, то есть поставить перед ней символ #:
Как узнать, какие sudo полномочия имеются у пользователя
Мы только что узнали, что у определённого пользователя могут быть ограниченные полномочия на выполнение команд с sudo. Как узнать, какие именно команды может выполнить пользователь или как проверить, сработали ли наши настройки в файле /etc/sudoers?
Для вывода всех разрешённых команд или для проверки определённой команды, используется опция -l. Но если не указать опцию -U с именем интересующего пользователя, то будут выведены данные для пользователя по умолчанию (root).
Пример проверки прав sudo для пользователя admin:
Строка «User admin may run the following commands on HackWare» означает «пользователь admin может запускать следующие команды на HackWare».
Также можно узнать, является ли та или иная команда заблокированной или разрешённой для выполнения пользователем с sudo следующим образом:
Если команда запрещена, то ничего не будет выведено:
Если команда разрешена, то будет выведен полный путь до файла:
Как настроить использование sudo без пароля
Данная настройка только для тех пользователей, кто действительно понимает зачем он это делает и какие риски безопасности это влечёт.
Чтобы отключить запрос пароля ПОЛЬЗОВАТЕЛЮ при вводе одной или нескольких КОМАНД с sudo:
Чтобы отключить запрос пароля ПОЛЬЗОВАТЕЛЮ при вводе любой команды с sudo:
Чтобы отключить запрос пароля всем пользователям при вводе одной или нескольких КОМАНД с sudo:
Чтобы отключить запрос пароля всем пользователям при вводе любой команды с sudo:
К примеру, чтобы разрешить пользователю admin выполнять команды /home/admin/backup.sh и /usr/bin/apt с sudo без необходимости ввода пароля, нужно добавить строку:
Это конец первой части. Во второй части мы рассмотрим другие интересные настройки и опции команды sudo.
Настройка sudo в Linux
Команда sudo играет очень важное значение для управления правами доступа в операционной системе Linux. Благодаря этой небольшой команде вы можете давать полномочия на выполнение тех или иных действий от имени администратора другим пользователям, при этом не давая им сам пароль суперпользователя. Также вам не нужно сидеть всегда под учетной записью суперпользователя чтобы иногда выполнять административные действия.
Казалось бы, такая небольшая команда, с минимумом возможностей и максимально простым использованием, но на самом деле она может намного больше. В этой статье мы рассмотрим как выполняется настройка sudo в linux для контроля доступа к функциям системы и возможностей пользователя.
Как работает sudo?
Перед тем, как переходить к настройке доступа к утилите sudo давайте рассмотрим как она работает. В Linux есть два способа получить права администратора. Вы можете переключиться на пользователя root с помощью команды su или можете передать в параметре нужную команду утилите sudo, которая выполнит ее с правами администратора. Причем второй способ предпочтительнее, потому что вы не забудете что используете права root и не наделаете ничего лишнего.
Имя команды означает substitute user do или super user do. Утилита позволяет запускать программы от имени другого пользователя, но чаще всего от имени корневого. Утилита была разработана еще в 1980 году Бобом Когшелом и Клиффом Спенсером. За это время сменилось много разработчиков и было добавлено много функций.
Работает sudo благодаря флагу доступа SUID. Если этот флаг установлен для программы, то она выполняется не от имени того пользователя который ее запустил, а от имени владельца, учитывая что файл sudo принадлежит, то утилита выполняется от имени root. Затем она читает свои настройки, запрашивает пароль пользователя и решает можно ли ему разрешать выполнение команд от имени администратора. Если да, то выполняется переданная в параметре команда.
Теперь, когда вы знаете теорию, давайте рассмотрим как настроить sudo в Linux.
Настройка sudo в Linux
Все настройки sudo находятся в файле /etc/sudoers. Здесь можно настроить очень много параметров, начиная от кому будет позволено выполнять команды от имени суперпользователя и заканчивая ограничением набора доступных команд.
Чтобы открыть файл для редактирования наберите такую команду от имени суперпользователя:
Вы также можете указать текстовый редактор, в котором вы хотите редактировать файл настройки:
Дальше мы рассмотрим самые интересные настройки, которые вы можете задать в этом файле. Но сначала давайте рассмотрим основной синтаксис файла. Он состоит из двух типов строк, это псевдонимы, которые позволяют создавать списки пользователей и флагов, а также сами правила, которые задают как будет вести себя команда sudo. Синтаксис алиасов выглядит вот так:
тип имя_алиаса = элемент1, элемент2, элемент3
Описание разрешений для пользователей имеет немного другой синтаксис:
пользователь хост = (другой_пользователь:группа) команды
Основные параметры
Отключаем введение при первом использовании:
Суперпользователь не может выполнять sudo:
Теперь если вы попытаетесь выполнить sudo sudo ничего не сработает:
Изменять домашнюю директорию для целевого пользователя, по умолчанию остается папка текущего пользователя в качестве домашней директории:
Сохранять список групп текущего пользователя:
Запрашивать пароль суперпользователя вместо пароля пользователя:
Дальше рассмотрим переменные, которым можно задать значения чтобы установить нужные настройки:
Количество минут, которое пройдет перед тем, как sudo будет спрашивать пароль снова, по умолчанию 5. Если установить значение в 0, то пароль будет спрашиваться всегда, независимо от того как давно вы использовали утилиту:
Следующий параметр задает количество минут, пока sudo будет ожидать повторного ввода пароля при неправильном вводе:
Вы можете изменить сообщение, которое будет выводится при запросе пароля:
Defaults passprompt=»Ваш пароль:»
Можно указать другого пользователя, не root, от которого будут выполняться все команды, для этого используйте:
Вы можете записывать в лог все попытки подключения к sudo:
Затем пробуем проверить работу лога:
sudo cat /var/log/sudo
Это были все самые интересные параметры настройки работы sudo, которые могут вам понадобиться, дальше мы рассмотрим как задать права доступа sudo для пользователей.
Настройка пользователей sudo
Мы уже рассматривали выше синтаксис настройки действий для пользователей, здесь все сложнее чем с псевдонимами, но разобраться можно. Например, разрешим любому пользователю использовать sudo, от любого хоста и выполнять любые команды:
%wheel ALL = (ALL) ALL
Означает то же самое, что и предыдущее, только здесь мы разрешаем использовать sudo не всем пользователям, а только тем, которые состоят в группе wheel.
%wheel ALL = (root) ALL
Тут мы уже ограничили возможный выбор пользователей только пользователем root. Также можно указать группу пользователя, от имени которого он может выполнять команды:
%wheel ALL = (root:admins) ALL
Это значит что можно выполнить команду от имени root или другого пользователя из группы admins. Еще мы можем указать команды, которые может выполнять пользователь. Например:
%wheel ALL = (root) /bin/mount, /bin/umount
Пользователь может выполнять только команды mount и umount от имени суперпользователя. Теперь сделаем еще интереснее, пользователь может выполнять mount и umount без пароля, а все остальные команды с паролем:
%wheel ALL = (root) ALL
%wheel ALL = (root) NOPASSWD: /bin/mount, /bin/umount
Также можно ограничивать пользователям по хостах, например, разрешаем использование sudo только из host1:
%wheel host1 = (root) ALL
Осталось еще рассмотреть как применять псевдонимы. Псевдонимы могут быть таких типов:
Например, создадим четыре псевдонима и применим их в нашем правиле:
User_Alias Users = user1,user2,user3
Runas_Alias Admins = root,admin
Host_Alias Hosts = host1,host2
Cmd_Alias Cmds = /bin/mount,/bin/umount
Далее применяем все это в правиле:
Users Hosts = (Admins) Cmds
Это значит, что пользователи из списка Users смогут выполнять команды Cmds от имени пользователей Amdins на хостах Hosts.
Еще осталось сказать несколько слов о флагах. Флаг NOPASSWD говорит, что не нужно запрашивать пароль при выполнении этого правила. Например, разрешить всем пользователям выполнять команду mount с sudo без пароля:
ALL ALL = (root) NOPASSWD: /bin/mount
Также можно запретить выполнять именно эту команду вообще с помощью флага NOEXEC:
ALL ALL = (root) NOEXEC /bin/mount
Вы можете проверить правильно ли была проведена настройка файла /etc/sudoers и посмотреть все созданные правила с помощью команды:
Здесь отображены все установленные флаги и настройки, а также полномочия данного пользователя.
Выводы
В этой статье мы рассмотрели как выполняется настройка sudo в linux. Как видите, несмотря на то, что это очень простая утилита, она скрывает очень много полезных настроек, которые можно использовать в своей системе. Если у вас остались вопросы, спрашивайте в комментариях!
Sudo (Русский)
sudo (англ. substitute user do, дословно «подменить пользователя и выполнить») позволяет системному администратору делегировать полномочия, чтобы дать некоторым пользователям (или группе пользователей) возможность запускать некоторые (или все) команды c правами суперпользователя или любого другого пользователя, обеспечивая контроль над командами и их аргументами.
Contents
Обоснование
Sudo может также использоваться для выполнения команд от имени других пользователей; кроме того, sudo логирует все команды и неудачные попытки доступа для аудита безопасности.
Установка
Чтобы начать использовать sudo как непривилегированный пользователь, его нужно настроить должным образом. Для этого прочтите раздел о настройке.
Использование
Например, для использования pacman:
Смотрите руководство по sudo для получения дополнительной информации.
Настройка
Просмотр текущих настроек
Использование visudo
Чтобы сделать nano редактором visudo в течение текущего shell сеанса, задайте и экспортируйте переменную EDITOR перед тем, как выполнять visudo.
Примеры настроек
Разрешить пользователю выполнять все команды от любого пользователя, но только на машине с определенным названием хоста:
Предоставить членам группы wheel доступ sudo:
Чтобы не спрашивать пароль у пользователя:
Разрешить выполнять только конкретные команды и только пользователю на определенном хосте:
Разрешить выполнять конкретно определённые команды только для пользователя на определенном хосте и без пароля:
Права доступа к файлам sudoers по умолчанию
Файл sudoers должен иметь владельца root и группу root (0). Права доступа всегда должны быть установлены как r—r—— (0440). Эти права установлены по умолчанию, однако если вы случайно измените их, они должны быть немедленно изменены обратно, иначе sudo не будет работать.
Время действия введённого пароля
Возможно, вы захотите изменить промежуток времени, в течение которого sudo действует без ввода пароля. Этого легко добиться добавив опцию timestamp_timeout в /etc/sudoers :
Например, чтобы установить тайм-аут на 20 минут:
Советы и рекомендации
Автодополнение по нажатию Tab в bash
Один тайм-аут на все сеансы терминала
Если вы не хотите вводить пароль снова каждый раз, когда открываете новый терминал, отключите tty_tickets:
Всегда показывать замечание о безопасности
По умолчанию, /etc/sudoers настроен так, что sudo выводит замечание о безопасности только при первом открытии сеанса:
или просто добавьте эту строку, если её нет.
Переменные окружения
Перенос псевдонимов
Если у вас установлено много псевдонимов, вы могли заметить, что они не переносятся в сеанс sudo. Однако, это легко исправить. Просто добавьте в ваш
/.bashrc или /etc/bash.bashrc строку:
Шутливые оскорбления
Вы можете сконфигурировать sudo так, чтобы при вводе неверного пароля он выводил шутливые оскорбления вместо стандартного сообщения «Sorry, try again». Найдите строку Defaults в /etc/sudoers и добавьте insults в список опции, разделяя их запятыми. Конечный результат может выглядеть так:
Пароль суперпользователя
Вы можете сконфигурировать sudo так, чтобы он спрашивал пароль суперпользователя вместо пароля текущего пользователя, добавив targetpw или rootpw в список опций Defaults в /etc/sudoers :
Чтобы не разглашать пароль root пользователям, вы можете запретить это определённым группам:
Отключение учетной записи root
Вы можете захотеть отключить возможность входа систему пользователя root. Без этого атакующие сначала должны будут угадать имя пользователя, сконфигурированного как sudoer, а также пароль этого пользователя. Смотрите для примера Secure Shell (Русский)#Отключение.
Пароль пользователя root можно заблокировать с помощью passwd :
Аналогичная команда разблокирует пароль пользователя root:
Также вы можете отредактировать /etc/shadow и заменить зашифрованный пароль root на «!»:
Тогда, чтобы задать новый пароль и тем самым разблокировать пользователя root:
Чтобы gksu использовал sudo по умолчанию, выполните:
kdesu
kdesu можно использовать в KDE для запуска графических программ с привилегиями суперпользователя. Вероятно, что kdesu по умолчанию будет пытаться использовать su, даже если аккаунт root отключен. К счастью, можно сказать kdesu использовать sudo вместо su. Создайте/отредактируйте файл
/.config/kdesurc для kf5 версии kdesu):
или используйте следующую команду (используйте kwriteconfig5 для kf5 версии kdesu):
Также вы можете установить kdesudo AUR из AUR, который поддерживает улучшенное автодополнение по Tab при вводе команды.
Еще один пример настройки
Отредактировать /etc/pam.d/su и /etc/pam.d/su-1 Потребовать, чтобы пользователь был в группе wheel, но никого в неё не добавлять.
Ограничить вход по SSH для группы ‘ssh’. В эту группу будет входить только «joe».
Добавить пользователей в другие группы.
Установить права на настройки так, чтобы devel мог редактировать их.
С такими настройками вам практически никогда не понадобится входить как суперпользователь.
«Joe» может подсоединиться к своему домашнему WiFi.
«Joe» не может использовать netctl от имени другого пользователя.
Но «joe» не может переключиться на суперпользователя.
Если «joe» хочет начать gnu-screen сессию как admin, он может сделать это следующим образом:
Настройка sudo с помощью вкладываемых в /etc/sudoers.d файлов
Решение проблем
Проблемы с TTY через SSH
Defaults опция requiretty всего лишь позволяет запускать sudo пользователям, если они имеют tty.
Показать привилегии пользователя
Вы можете узнать какими привилегиями обладает конкретный пользователь следующей командой:
Или узнать ваши собственные привилегии командой:
Наложение umask
Sudo накладывает на значение umask пользователя свою собственную (которая по умолчанию установлена в 0022). Это предотвращает sudo от создания файлов с более либеральными правами доступа, чем это позволяет umask пользователя. Несмотря на то, что это разумное значение по умолчанию, если не используется измененная umask, это может привести к ситуации, когда программа, запущенная через sudo может создавать файлы с правами доступа отличными от тех, которые создаются при запуске программы непосредственно суперпользователем. Для исправления таких ошибок sudo предоставляет возможность исправить umask, даже если желаемая umask более либеральна, чем установлено в umask пользователя. Добавив такие строки (используйте visudo ) вы измените поведение sudo по умолчанию:
Это установит sudo umask в umask суперпользователя по умолчанию (0022) и переопределит поведение по умолчанию, всегда используя указанную umask и независимо от umask пользователя.