Линукс команды su sudo

Различия между командами sudo и su

В дистрибутивах Linux существует несколько способов получения привилегий суперпользователя или root. Два наиболее распространенных способа — использование команд sudo и su. Оба этих метода позволяют временно получить повышенные привилегии, но имеют некоторые важные различия в использовании и функциональности. Давайте рассмотрим эти различия более подробно.

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

SUDO (Substitute User and do)

sudo представляет собой команду, которая позволяет обычному пользователю выполнить команды с привилегиями суперпользователя или правами доступа любого другого пользователя. Она широко используется в системах Linux, чтобы ограничить доступ к привилегиям root только определенным пользователям. При использовании sudo, пользователю может быть разрешено выполнение команды суперпользователя после ввода своего собственного пароля, а не пароля root.

  • Более безопасно, так как ограничивает доступ к привилегиям root только необходимым командам и пользователям.
  • Позволяет аудитить и логировать действия пользователей с привилегиями суперпользователя.
  • Предоставляет более гибкую систему управления привилегиями, так как администраторы могут настраивать разрешения для конкретных команд и пользователей.

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

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

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

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

Для того, чтобы добавить пользователя в нее можно ввести команду:

Ввод и выполнение команды возможны либо от пользователя root, либо от пользователя уже состоящего в группе.

Посмотреть группы, в которых состоит ваш пользователь можно при помощи команды groups. Видим, что пользователь добавлен в группу sudo.

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

После ввода откроется файл sudoers для редактирования, в котороый нужно внести следующую строку:

После сохранения файла у пользователя, которого вы укажите появится возможность использовать команду sudo в терминале. Помните, что редактировать файл sudoers необходимо только при помощи команды visudo! Так как некорректные данные внесенные в него могут привести к неполадкам в работе дистрибутива. Я предпочитаю использовать первый способ добавления пользователя в sudoers.

Читайте также:  Remove users and groups in linux

Примечание: на дистрибутиве Debian отсутствует команда sudo после установки и попытка ее использования вызовет ошибку. Чтобы установить утилиту sudo (да, команды в Linux являются названиями одноименных утилит или программ) необходимо ввести в терминале команду apt install sudo, после чего произвести действия по добавлению пользователей в группу sudo.

Источник

su или sudo?

С давних времен многих смущает разнообразие вариантов обеспечения безопасности при выполнении операций с максимальными привилегиями. Например, в официальной документации Ubuntu в качестве команды редактирования рекомендуется использовать что-то вроде sudo nano , а в многочисленных любительских мануалах (в стиле «5 фокусов в командной строке, которые удивят вашу бабушку») для получения root’ового шелла предлагается писать sudo su — . Попробую объяснить, почему такое положение вещей кажется мне неправильным.

Исторически единственным универсальным способом выполнить команду от имени другого пользователя в Unix была программа su. Запущенная без параметров, она запрашивала пароль суперпользователя и в случае успеха просто подменяла текущее имя пользователя на root, оставляя почти все переменные окружения от старого пользователя (кроме PATH, USER и еще пары-тройки, см. man su от своего дистрибутива). Более корректно было запускать ее как su — — в таком случае оболочка получала также и правильный environment. С параметром -c можно было выполнить команду: su -c «vim /etc/fstab» .

При этом доверенным пользователям приходилось помнить пароль root’а и у всех пользователей, перечисленных в группе «wheel» (т.е. в группе, члены которой могли выполнить команду su и стать суперпользователем), был одинаковый неограниченный доступ ко всей системе, что являлось серьёзной проблемой безопасности.

Затем появилась команда sudo, и это был прорыв. Теперь администратор мог указывать список разрешенных команд для каждого пользователя (или группы пользователей), файлы, доступные для редактирования, специальные переменные окружения и многое другое (все это великолепие управляется из /etc/sudoers , см. man sudoers от своего дистрибутива). При запуске sudo спрашивает у пользователя его собственный пароль, а не пароль root. Полноценный шелл можно получить с помощью » sudo -i «

Читайте также:  Удаление таблицы разделов linux

Стоит особо упомянуть о специальной команде sudoedit , безопасно запускающей редактор, указанный в переменной окружения $EDITOR . При более традиционной схеме редактирование файлов производилось примерно так:

Запускаемый таким образом vi наследовал оболочку с неограниченными правами и через :! пользователь мог запускать любую команду (если, конечно, админ не позаботился об этом заранее) и открыть любой файл.

sudoedit проверяет, можно ли этому пользователю изменять данный файл, затем копирует указанный файл во временный каталог, открывает его в редакторе (который наследует права пользователя, а не root’а), а после редактирования, если файл был изменён, с особыми предосторожностями копирует его обратно.

В Debian-based дистрибутивах пользователь root не имеет пароля, вместо этого все административные действия должны производиться через sudo или его графический аналог gksudo . Являясь полной заменой su , sudo должна бы быть единственной командой переключения между пользователями, однако, как было сказано вначале, в настоящий момент это не так и все зачем-то изобретают дикие последовательности из sudo, su, vi и черточек.

Поэтому предлагаю всем раз и навсегда запомнить:

что хотим сделать? правильно неправильно
выполнить команду от имени root sudo command su -c «command»
отредактировать файл от имени root sudoedit file su vim file
sudo vim file
получить оболочку root sudo -i su —
sudo su —

После первой публикации этой заметки мне было задано несколько вопросов. Из ответов получилось сделать мини-FAQ.

Q: как с помощью sudo сделать su -c «echo 1 > /etc/privileged_file» ? sudo echo 1 /etc/privileged_file ругается на «permission denied»
A: Это происходит потому, что только команда echo выполняется в повышенными правами, а результат перенаправляется в файл уже с правами обычного пользователя. Чтобы добавить что-нибудь в privileged_file, нужно выполнить такую команду:

$ echo 1| sudo tee -a privileged_file >/dev/null
$ sudo -i # echo 1 > privileged_file # exit $
  • по умолчанию sudo записывает всю пользовательскую активность в syslog-канал authpriv (как правило, результат кладется в файл /var/log/auth.log), а в su подобную фичу надо включать с помошью задания специального параметра в файле настроек, различающемся от дистрибутива к дистрибутиву ( SULOG_FILE в /etc/login.defs в Ubuntu Linux, /etc/login.conf и /etc/pam.d/su в FreeBSD и т.д.)
  • в случае с su администратор системы не может ограничить команды, выполняемые пользователями, а в sudo — может
  • если пользователь должен быть лишен права администрирования, в случае с su после удаления его из группы wheel он должен забыть пароль root’а; если используется sudo, достаточно вынести его из соответствующей группы (например, wheel или admin) и/или файла sudoers, если он был дополнительно настроен.
Читайте также:  Golang go build linux

Источник

SUDO и SU

Обе команды sudo и su позволяют в Linux выполнить команду от любого пользователя, в том числе от root . Но есть между ними одно принципиальное различие.

  • Для выполнения команды от имени другого пользователя с помощью su , вы должны указать пароль другого пользователя.
  • Для выполнения команды от имени другого пользователя с помощью sudo , вы должны указать свой пароль.

SU

Команда su появилась раньше. При запуске без параметров она запрашивает пароль суперпользователя, при успехе подменяет имя текущего пользователя на root , оставляя текущие переменные окружения (почти все). Для запуска со всеми переменными окружения root:

  • Можно забыть запустить su с нужными параметрами окружения.
  • Пользователь должен знать все пароли от нужных ему юзеров. При увольнении сотрудника необходимо менять все пароли, которые он знал.
  • root должен иметь пароль.
  • По умолчанию не логирует действия пользователя.
  • Невозможно определить кто именно запустил команду от имени другого пользователя.
  • Нельзя ограничить права root .

SUDO

Команда sudo появилась позже и значительно усилила безопасность системы. Теперь не нужно раздавать пароли направо и налево. Можно тонко настраивать права доступа. Теперь root вообще можт не иметь пароля.

Для запуска со всеми переменными окружения root:

  • Пользователь не должен знать чужие пароли, в том числе от root .
  • По умолчанию логирует действия пользователя.
  • Можно определить кто именно запустил команду от имени другого пользователя.
  • Можно тонко настроить права.
  • Можно запустить только одну команду с правами другого пользователя без переключения в чужую оболочку.

Послесловие

Правила хорошего тона: не мешайте в коде вместе sudo и su , лучше использовать sudo .

Если вы единственный администратор на сервере, то нет ничего зазорного в использовании su .

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

Команда sudo запоминает на 15 секунд (по умолчанию) введённый пароль, последующая команда этот пароль не запрашивает. Время сессии можно изменить.

Если вам понравилась статья, то ставьте 👍🏻 каналу. Пишите комментарии, задавайте вопросы, подписывайтесь.

Источник

Оцените статью
Adblock
detector