Sudo su команда в linux

Обновлено: 08.07.2024

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

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

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

Недостатки su :

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

Достоинства su :

  • Работает "из коробки", не требует обязательных настроек настроек.

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

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

Недостатки sudo :

Достоинства sudo :

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

Послесловие

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

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

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

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

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

С командами su и sudo сталкивается каждый пользователь Linux. При этом, поскольку они имеют схожий синтаксис и выполняют практически одну и ту же задачу, многие новички не понимают, в каких случаях следует использовать ту или иную команду. На этом уроке мы узнаем, чем отличается su от sudo.

su против sudo

root или суперпользователь — это специальный аккаунт и группа пользователей в Unix-подобных системах с идентификатором, владелец которого имеет право на выполнение всех без исключения операций.

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

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

Команда su

Если использовать данную команду без [имя_пользователя] , то она переключит вас на учетную запись суперпользователя (root).

Примечание: В большинстве случаев, команда su (с дефисом и без) используется только для переключения на суперпользователя (root), хотя она может переключить вас и на другого ( [имя_пользователя] ) пользователя.



Как работает команда su?

Чтобы вызвать оболочку другого пользователя с окружением и рабочим каталогом текущего пользователя, используйте команду su (без дефиса). Например, если вы хотите работать от имени пользователя ravesli, выполните:

Затем введите пароль для учетной записи ravesli и нажмите Enter.

Оболочка должна измениться, и теперь у вас есть доступ к указанной учетной записи. Однако пользовательское окружение осталось старым:



Как работает команда su –?

Чтобы перейти к другому пользователю и при этом изменить и пользовательское окружение, используйте команду su - :


Примечание: Еще один способ, позволяющий получить доступ к аккаунту другого пользователя вместе с полным объемом переменных его пользовательского окружения, это задействовать команду su -l (или --login ) [имя_пользователя] .

Команда sudo

Например, все исполняемые и административные задачи требуют наличия максимальных разрешений (root). В таких случаях рекомендуется использовать sudo:

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

Добавление пользователя в группу sudoers

Чтобы пользователь мог выполнить команду, для которой требуется sudo, ему необходимо быть частью группы sudoers. Для добавления пользователя в группу sudoers, выполните следующую команду (от имени root или учетной записи, которая может применять sudo):

usermod -aG sudo [имя_пользователя]

Например, чтобы добавить в группу sudoers учетную запись ravesli, вы должны ввести:

sudo usermod -aG sudo ravesli

Чтобы просмотреть список учетных записей, принадлежащих группе sudoers, выполните:

sudo getent group sudo

Вывод отобразит учетную запись, добавленную на предыдущем шаге:


Еще один способ добавления пользователя в группу sudoers — это воспользоваться командой visudo, которая помогает отредактировать файл /etc/sudoers. Для этого выполните вход в учетную запись root (команда su - ), после чего вызовите visudo и добавьте в файл следующую строку, заменив user на нужное вам имя пользователя, которому вы хотите дать доступ к sudo:

user ALL=(ALL:ALL) ALL


Нажмите Ctrl+X, а затем Y, чтобы сохранить файл. Вы также можете добавить пользователя в группу, указанную в файле /etc/sudoers. Пользователи групп, указанных в данном файле, автоматически получат привилегии sudo.

su и sudo в разных дистрибутивах Linux

su — это традиционный (более старый) способ переключения на учетную запись root (и получение повышенных прав) в Linux.

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

При установке, например, дистрибутива Linux Mint, вы автоматически создаете пользователя, помеченного как член группы sudoers. При этом настройки учетной записи root не предполагается. Чтобы включить пользователя root, вам необходимо активировать его вручную.

С другой стороны, другие дистрибутивы Linux, такие как Fedora, при установке создают обе учетные записи: обычного пользователя и суперпользователя (root).

Включение учетной записи root


Чтобы активировать пользователя root, выполните команду passwd :

sudo passwd root

Затем установите пароль и нажмите Enter. В результате система должна уведомить вас, что пароль пользователя root был успешно обновлен:


Убеждаемся, что пользователь root активирован, переключившись на него с помощью команды su - :



Заключение

Не забывайте использовать sudo всякий раз, когда это возможно. Благодаря этому вы снизите риск привести вашу систему в нерабочее состояние, а также повысите её защищенность от различных угроз безопасности.

Утилита su (сокращение от замены или переключения пользователя) позволяет запускать команды с привилегиями другого пользователя, по умолчанию пользователя root.

В этом руководстве мы объясним, как использовать команду su .

Как использовать команду su

Общий синтаксис команды su следующий:

При вызове без каких-либо параметров по умолчанию su запускает интерактивную оболочку от имени пользователя root:

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

Переменные среды сеанса ( SHELL ) и home ( HOME ) устанавливаются из замещающей записи пользователя /etc/passwd , и текущий каталог не изменяется.

Чтобы подтвердить изменение пользователя, используйте команду whoami :

Команда выведет имя пользователя, запустившего текущий сеанс оболочки:

Если вы хотите запустить другую оболочку вместо той, которая определена в файле passwd , используйте параметр -s , --shell . Например, чтобы переключиться на root и запустить оболочку zsh , вы должны ввести:

Чтобы сохранить всю среду ( HOME , SHELL , USER и LOGNAME ) вызывающего пользователя, вызовите команду с параметром -p , --preserve-environment .

Когда - опция используется, -p игнорируется.

Если вы хотите запустить команду от имени замещающего пользователя без запуска интерактивной оболочки, используйте параметр -c , --command . Например, чтобы вызвать команду ps от имени пользователя root, вы должны ввести:

Чтобы переключиться на другую учетную запись пользователя, передайте имя пользователя в качестве аргумента su . Например, чтобы переключиться на пользователя tyrion вы должны ввести:

Судо против Су

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

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

Если пользователю предоставлена sudo Assessment, команда su вызывается от имени пользователя root. Запуск sudo su - и последующий ввод пароля пользователя имеет тот же эффект, что и запуск su - и ввод пароля root.

При использовании с параметром -i sudo запускает интерактивную оболочку входа в систему со средой пользователя root:

sudo -i в основном аналогичен запуску su - .

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

С помощью sudo вы также можете разрешить пользователям запускать только определенные программы с привилегиями root.

Выводы

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

С давних времен многих смущает разнообразие вариантов обеспечения безопасности при выполнении операций с максимальными привилегиями. Например, в официальной документации 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 "

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


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

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

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

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

Читайте также: