Sysadminium
В этой статье научимся устанавливать, настраивать и использовать утилиту sudo для выполнения административных действий в Linux.
Настройка и использование sudo в Linux
В прошлых статьях этого курса мы говорили про разницу между Ubuntu и Debian в том, что по умолчанию в:
- Ubuntu – нельзя переключиться на пользователя root, зато установлена утилита sudo и административные действия можно выполнять используя эту утилиту таким образом:
- Debian – root пользователь активен, и для выполнения административных действий нужно на него переключиться, а утилита sudo не установлена:
Пришло время поближе познакомиться с утилитой sudo в Linux. В Ubuntu она уже установлена а в Debian её нужно установить таким образом:
Основным конфигурационным файлом для этой утилиты является файл /etc/sudoers, посмотрим на него:
В самом верху говориться о том, что редактировать вручную этот файл не нужно, для редактирования нужно использовать утилиту visudo. Рассмотрим остальные не закомментированные строки:
- Defaults env_reset – сбрасывает все локальные переменные пользователя в оболочке sudo. Это повышает безопасность работы sudo в linux. Так как оболочка использует только стандартные системные переменные. А те переменные, которые создал пользователь, использоваться не будут.
- Defaults mail_badpass – говорит системе отправлять уведомления о неудачных попытках ввода пароля sudo для настроенного пользователя mailto. По умолчанию это учетная запись root. То есть, если вы настроите почтовую систему для root пользователя, то будете на почту получать оповещения о неудачных попытках ввода пароля для sudo.
- Defaults secure_path=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin” – здесь перечислены пути к каталогам, в которых будут искаться программы при выполнении команд с помощью sudo. То есть, вы вводите команду adduser, и файл программы adduser ищется в этих каталогах. А находится он здесь /usr/sbin/adduser.
- root ALL=(ALL:ALL) ALL – в этой строке разберём по порядку каждое слово:
- root – правило для пользователя root;
- ALL = – применяется ко всем хостам;
- (ALL:ALL) – root может выполнять команды от лица всех пользователей и групп;
- ALL – правило работает для всех команд.
Даём права на sudo включая пользователя в группу sudo
И так, по умолчанию, выполнять все команды с помощью sudo могут пользователи группы sudo. Получается, нам остаётся только поместить своего пользователя в эту группу:
Чтобы изменения применились нужно перезайти под пользователем alex. Проверим работу sudo:
Как видите, система нас предупредила что с помощью sudo мы выполняем команды от имени администратора и нужно быть осторожными. Такое предупреждение даётся пользователю при первом запуске sudo, а в дальнейшем вы не увидите его.
Работая с sudo мы вводим пароль от своего пользователя (alex), а не от root. В примере выше я просто создал и удалил пользователя user3, чтобы продемонстрировать выполнение административных действий.
Даём права на sudo редактируя конфигурационный файл
Дать пользователю права на sudo можно не только включив его в группу sudo. Также вы можете отредактировать конфигурационный файл /etc/sudoers с помощью специальной утилиты visudo:
После чего вы начнете редактировать конфигурационный файл. Например, добавим следующую строку:
У нас должна получиться такая настройка:

Рядом с root пользователем создаём правило для пользователя alex. Чтобы сохранить файл и выйти из редактора нажмите Ctrl+x, а затем “y“.
Утилита visudo работает в режиме nano. Но в отличие от редактирования напрямую с помощью nano, утилита visudo открывает копию файла /etc/sudoers и перед сохранение файла проверяет его на корректность.
Теперь удалим пользователя alex из группы sudo:
Перезайдем в систему под alex, чтобы применились изменения:
И проверим, не потеряли ли мы права на sudo:
Как видим права остались!
Тонкая настройка прав
У меня в системе остались пользователи user1 и user2. Дадим им право обновлять систему, но другие административные действия они не должны выполнять.
И так, выполните команду sudo visudo , чтобы начать редактирование конфигурационного файла.
Объедините пользователей одним псевдонимом GR_APT:
В системах Debian и Ubuntu обновлять систему можно командами apt и apt-get (обновление системы мы будем изучать позже в этом курсе). Обе команды нужно объединить в одну команду-псевдоним APDATE:
И осталось разрешить GR_APT выполнять команды APDATE:
Вот так должен выглядеть ваш файл после всех изменений:

Разрешаем некоторым пользователям обновлять систему с помощью sudo
Проверим! Переключимся на пользователя user1 и попробуем выполнить обновление с помощью команды sudo apt update :
А теперь попробуем переключиться на root пользователя выполнив su:
Как видим, выполнять команду su пользователю user1 используя sudo нельзя.
Создать нового пользователя тоже не получится:
Получается мы дали пользователям user1 и user2 право использовать утилиту sudo, но только для команд apt и apt-get, чтобы обновлять Linux систему.
А ещё, редактируя конфигурационный файл /etc/sudoers, вы можете позволить пользователю выполнять команды под sudo без запроса своего пароля. Для этого перед разрешённой командой нужно указать NOPASSWD: :
Дополнительные опции утилиты sudo
По умолчанию, утилита sudo выполняет команды от пользователя root, но с помощью опций -u или -g можно выполнить команду от имени другого пользователя или группы, например:
Как видите, вначале мы выполнили команду от имени пользователя user1, а затем от имени группы user1. Во втором случае, пользователь у нас остался alex, а первичная группа стала user1.
Ещё одной полезной опцией является опция -i. Она позволяет, как бы, переключиться на пользователя. При этом нужно указать пользователя с помощью опции -u, без этого мы переключимся на root пользователя:
unixforum.org
Решено: Запуск программ с правами Администратора (Debian Lenny, KDE 4.1)
Модератор: Bizdelnick
Решено: Запуск программ с правами Администратора
Сообщение -AR- » 30.11.2008 15:45
Возникла проблема, которую никак не могу решить. Порой необходимо запускать приложения с привилегиями рута, как правило это выплнятся из консоли (можно ещё подправить меню KDE, но это муторно каждый раз проделывать).
Система Debian Lenny, KDE 4.1.3 (kde4.debian.net), для работы с консолью использую Konsole и Yakuake
Re: Решено: Запуск программ с правами Администратора
Re: Решено: Запуск программ с правами Администратора
Сообщение Nikky » 30.11.2008 15:58
Re: Решено: Запуск программ с правами Администратора
Сообщение -AR- » 30.11.2008 15:58
Такой команды нет в системе. Ближайший похожий пакет kdesudo 2.4-1.1 , но он для KDE3, а намешивать в системе библиотеки от разных сред я не планирую.
Использование sudo выдаёт ту же ошибку.
Всё, проблема решилась добавлением строки %user ALL=(ALL) NOPASSWD: ALL в файл /etc/sudoers
Re: Решено: Запуск программ с правами Администратора
У меня та же проблема возникла после обновления до KDE 4.5.1,притом я использую sudo
изменение etc/sudoers не помогло,как и поиск в google
Re: Решено: Запуск программ с правами Администратора
Re: Решено: Запуск программ с правами Администратора
из-под обычного юзера тот же результат
прочитал man sux ничего не понял))Re: Решено: Запуск программ с правами Администратора
Re: Решено: Запуск программ с правами Администратора
Re: Решено: Запуск программ с правами Администратора
Re: Решено: Запуск программ с правами Администратора
Ну, kdesu (как и su) запускают приложение от имени root. Поэтому настройки тоже этого пользователя. Можете настроить kdesu systemsettings — так же как и своего пользователя.
Можно настроиьт запуск через sudo — отредактировать sudoers — из-под root:
Re: Решено: Запуск программ с правами Администратора
Re: Решено: Запуск программ с правами Администратора
Re: Решено: Запуск программ с правами Администратора
Re: Решено: Запуск программ с правами Администратора
После ребута возникла вот такая трабла:
/etc/sudoers у меня имеет следующий вид:
Объясните,что нужно в нем изменить,опций,о которых говорилось выше,я не нахожу.
Re: Решено: Запуск программ с правами Администратора
Re: Решено: Запуск программ с правами Администратора
Re: Решено: Запуск программ с правами Администратора
ivanbashlakov
1. пользователь, от имени которого вы выполняли команду, тончо владеет x-сессией?
2. вы точно не использовали параметр -u <какой-то другой пользователь> при вызове sudo?
3. от имени того же пользователя, от которого пытаетесь выполнить sudo <команда>, выполните:
$ xauth list $DISPLAY
$ sudo sh -c ‘xauth list $DISPLAY’
и сравните вывод этих команд.NickLion
а в чём глубинный смысл указывать targetpw?Re: Решено: Запуск программ с правами Администратора
Re: Решено: Запуск программ с правами Администратора
я немножко о другом спрашивал — запущена ли x-сессия этим пользователем. может, вы, не логинясь в графике, из виртуального терминала (в просторечии — консоль) пытаетесь x-клиентов запускать. мало ли…
как видим, cookie разные. это говорит о том, что берутся они из разных файлов xauthority.
ищутся они в следующей последовательности (man xauth):
содержимое $XAUTHORITY
файл .Xauthority в домашнем каталогея бы предложил для начала закомментировать все три строки, изгаляющиеся над переменными окружения:
Defaults !always_set_home
Defaults env_reset
Defaults env_keep = "…
и посмотреть, передаётся ли переменная $HOME:
$ sudo sh -c ‘echo $HOME’
если выдаст домашний каталог вашего пользователя (а не root-а), тогда, по идее, и cookie должны быть идентичными (так как будут браться из одного и того же файла). проверьте уже приведёнными выше командами.
а если cookie совпадут, должны и x-клиенты запуститься. например:
$ sudo xeyesКак запустить команду от имени системного администратора (root)
Мне нужно запустить команду с правами администратора. Кто-то сказал, что я должен запустить команду от имени пользователя root. Как мне это сделать?
Основные две возможности командной строки:
- Используйте su и введите пароль root при появлении запроса.
- Поставьте sudo перед командой и введите свой пароль при появлении запроса.
Выполнение команды оболочки от имени пользователя root
sudo (предпочтительно, когда не работает графический дисплей)
Это предпочтительный метод на большинстве систем, включая Ubuntu, Linux Mint, (возможно) Debian и другие. Если вы не знаете отдельный пароль пользователя root, используйте этот метод.
Судо требует, чтобы вы набрали свой собственный пароль. (Цель состоит в том, чтобы ограничить ущерб, если вы оставите клавиатуру без присмотра и разблокировки, а также убедиться, что вы действительно хотите выполнить эту команду, а это не было, например, опечаткой.) Она часто настроена так, чтобы не запрашивать несколько раз минут, чтобы вы могли запустить несколько sudo команд подряд.
Если вам нужно запустить несколько команд от имени пользователя root, добавьте к каждой из них префикс sudo . Иногда удобнее запускать интерактивную оболочку от имени пользователя root. Вы можете использовать sudo -i для этого:
Вместо sudo -i , вы можете использовать sudo -s . Разница заключается в том, что -i вновь я nitializes среды к вменяемым по умолчанию, в то время как -s использует файлы конфигурации лучше или хуже.
Для получения дополнительной информации посетите веб-сайт sudo или введите man sudo в своей системе. Судо очень настраивается; например, его можно настроить так, чтобы определенный пользователь мог выполнять только определенные команды от имени пользователя root. Прочтите справочную sudoers страницу для получения дополнительной информации; используйте sudo visudo для редактирования файла sudoers.
Команда su существует в большинстве unix-подобных систем. Он позволяет запускать команду от имени другого пользователя, если вы знаете пароль этого пользователя. При запуске без указания пользователя su по умолчанию будет использоваться корневая учетная запись.
Команда для запуска должна быть передана с использованием -c опции. Обратите внимание, что вам нужны кавычки, чтобы команда не анализировалась вашей оболочкой, а передавалась в целевую корневую оболочку su .
Для запуска нескольких команд от имени пользователя root удобнее запускать интерактивную оболочку.
В некоторых системах вы должны быть в группе номер 0 (вызываемой wheel ), чтобы использовать su . (Смысл в том, чтобы ограничить ущерб, если кто-то случайно утвердил пароль root.)
Вход в систему как root
Если установлен пароль root, и вы им владеете, вы можете просто набрать root в приглашении для входа и ввести пароль root. Будьте очень осторожны и избегайте запуска сложных приложений от имени пользователя root, поскольку они могут делать то, что вы не собирались. Вход в систему с правами суперпользователя в основном полезен в чрезвычайных ситуациях, таких как сбои диска или когда вы заблокировали свою учетную запись.
Однопользовательский режим
Однопользовательский режим или уровень выполнения 1 также дает вам привилегии root. Это предназначено, прежде всего, для ситуаций аварийного технического обслуживания, когда загрузка на многопользовательском уровне выполнения невозможна. Вы можете загрузиться в однопользовательском режиме, передав single или emergency в командной строке ядра. Обратите внимание, что загрузка в однопользовательском режиме отличается от обычной загрузки системы и входа в систему от имени пользователя root. Скорее, система только запустит службы, определенные для уровня выполнения 1. Как правило, это наименьшее количество служб, необходимых для использования работоспособной системы.
Вы также можете получить в однопользовательский режим с помощью команды telinit: telinit 1 ; однако эта команда требует, чтобы вы уже получили права root с помощью другого метода для запуска.
Во многих системах загрузка в однопользовательском режиме предоставит пользователю доступ к корневой оболочке без запроса пароля. В частности, systemd системы на основе будут запрашивать пароль root при загрузке таким образом.
Другие программы
Calife
Calife позволяет запускать команды от имени другого пользователя, вводя собственный пароль, если он авторизован. Это похоже на гораздо более распространенное sudo (см. Выше). Calife более легкий, чем sudo, но также менее настраиваемый.
Op позволяет запускать команды от имени другого пользователя, включая пользователя root. Это не полномасштабный инструмент для выполнения произвольных команд: печатаемые с op последующим мнемонические сконфигурированной системным администратором , чтобы выполнить конкретную команду.
Супер
Super позволяет запускать команды от имени другого пользователя, включая пользователя root. Команда должна быть разрешена системным администратором.
Запуск графической команды от имени пользователя root
PolicyKit (предпочтительно при использовании GNOME)
Просто добавьте префикс к желаемой команде pkexec . Имейте в виду, что хотя это работает в большинстве случаев, оно не работает универсально.
Смотрите man pkexec для получения дополнительной информации.
KdeSu, KdeSudo (предпочтительно при использовании KDE)
kdesu и kdesudo являются графическими интерфейсами для su и sudo соответственно. Они позволяют запускать программы X Window от имени root без каких-либо хлопот. Они являются частью KDE . Тип
и введите пароль пользователя root или введите
и введите свой пароль (если разрешено запускать sudo ). Если вы включите опцию «сохранить пароль» в KdeSu, вам придется вводить пароль root только один раз за сеанс входа в систему.
Другие программы
Ktsuss (« оставь su простым, глупым») — это графическая версия su.
Beesu — это графический интерфейс команды su, которая заменила Gksu в операционных системах на базе Red Hat. Он был разработан в основном для RHEL и Fedora.
Устаревшие методы
gksu и gksudo являются графическими интерфейсами для su и sudo соответственно. Они позволяют запускать программы X Window от имени root без каких-либо хлопот. Они являются частью Gnome . Тип
и введите пароль пользователя root или введите
и введите свой пароль (если разрешено запускать sudo ).
gksu и gksudo устарели. Они были заменены PolicyKit в GNOME, и многие дистрибутивы (такие как Ubuntu) больше не устанавливают их по умолчанию. Вы не должны зависеть от их доступности или правильной работы.
Вручную с помощью одного из методов на основе оболочки
Используйте один из методов в разделе «Запуск команды оболочки в качестве корневого раздела». Вам нужно будет убедиться, что ни DISPLAY переменная среды, ни XAUTHORITY среда не будут сброшены при переходе к root. Это может потребовать дополнительной настройки тех методов, которые выходят за рамки этого вопроса.
В целом, это плохая идея, в основном потому, что графические приложения будут читать и записывать файлы конфигурации как root, и когда вы попытаетесь использовать эти приложения снова как обычный пользователь, эти приложения не будут иметь разрешения на чтение своих собственных конфигураций.
Редактирование файла как root
В любом случае вам будет предложено ввести root пароль. Для получения дополнительной информации см. Страницу руководства .
Поскольку вопрос не был специфичен для Linux, вот как вы достигаете той же цели в Solaris 9+ (или Trusted Solaris 8):
Solaris, начиная с версии 9, включает в себя набор инструментов, ласково именуемых RBAC или Role Based Access Control.
Суть RBAC заключается в том, что посредством предоставления авторизаций и прав пользователям и / или ролям или предоставления ролей пользователям вы можете создавать невероятно детализированные модели для того, кто может выполнять, с какими привилегиями.
По сути, вы идентифицируете авторизацию в / etc / security / auth_attr, а затем предоставляете их пользователям или ролям в / etc / user_attr.
Вы определяете профили в / etc / security / prof_attr. Затем вы связываете команды с этими профилями в / etc / security / exec_attr с последующим назначением этих профилей пользователям в файле / etc / user_attr.
После того, как все это сделано, вы фактически запускаете pfexec <command> команду с привилегиями или полномочиями, предоставленными этому пользователю для этой команды.
Приятной особенностью RBAC является то, что нет никаких дополнительных привилегий, предоставляемых самой команде или пользователю, только комбинации user + command. Так что это безопаснее, чем делать бинарные + или просто использовать sudo, чтобы пользователь мог выполнять практически все что угодно. (Я знаю, что вы можете заблокировать sudo, но по моему опыту большинство людей этого не делают)
Еще одним преимуществом RBAC является то, что вы можете сделать root учетной записью роли и назначить эту роль пользователям, которые могут стать пользователем root с помощью команды ‘su’ и пароля root. Пользователь root также сможет войти в однопользовательский режим, что лучше (на мой взгляд), чем модель Linux, где вы можете отключить пароль root passwd -d root или заблокировать учетную запись root passwd -l root , оба из которых делают вход в систему как root довольно тяжело когда что-то идет не так.
У Бена Роквуда есть отличный пост в блоге о RBAC, который можно прочитать в разделе Использование RBAC в (Open) Solaris .