Linux su или sudo

В чем разница между sudo и su

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

Пользователь Root

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

Su vs. Sudo

При выполнении команды su без дополнительных опций она переключает вас в сеанс суперпользователя (или root). Для этого вам необходимо знать пароль root. Это не все, что может делать команда su, на самом деле она может использоваться для переключения в любой пользовательский аккаунт. Наберите su bob, и вам будет предложено ввести пароль пользователя Bob, и оболочка переключится в его аккаунт.
После того, как вы сделаете все, что вам было нужно, вы можете ввести команду exit и снова переключиться в режим обычного пользователя с ограниченными правами.
Sudo запускает с правами root только одну команду. При выполнении команды sudo система запросит у ваш текущий пользовательский пароль, а затем запустит команду на выполнение от имени root. По умолчанию Ubuntu помнит введенный пароль 15 минут, и в течение этого времени при повторном использовании не будет запрашивать его.

Это ключевое различие между su и sudo. Su переключает вас в аккаунт root и требует пароля root. Sudo запускает с привилегиями root одну команду — она не переключает вас в аккаунт суперпользователя и не требует отдельного пароля root.

Ubuntu vs. другие дистрибутивы Linux

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

Использование по умолчанию sudo вместо su имеет некоторые преимущства. Пользователям Ubuntu необходимо помнить только один пароль, в то время как пользователям Fedora и других дистрибутивов требуется создавать отдельные аккаунты для root и обычного пользователя, каждый со своим паролем.
Еще одно преимущество — предотвращение нахождения пользователя постоянно в аккаунте root, или постоянно открытого терминала с сессией суперпользователя. Запуск меньшего числа команд от имени root повышает безопасность и предотвращает случайное внесение изменений в системные файлы.
Дистрибутивы на базе Ubuntu, включая Linux Mint, также используют по умолчанию sudo вместо su.

Несколько хитростей

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

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

В данном случае вы можете использовать свой пользовательский пароль.

Активация пользователя root в Ubuntu

Активировать аккаунт root в Ubuntu можно с помощью команды, позволяющей задать пароль для него (помните, что разработчики Ubuntu не рекомендуют делать это):

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

Читайте также:  Arduino uno linux dev ttyacm0

Добавление пользователей в файл Sudoers

Только пользователи с администраторскими аккаунтами могут использовать sudo в Ubuntu. Вы можете изменить тип аккаунта в настройках в разделе «User Accounts».

Акканту,созданному при установке системы, Ubuntu автоматически присваивает тип администратора.

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

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

Графические версии Su

Linux также поддерживает графические версии su, которые запрашивают у вас пароль в графическом окружении. Например, с помощью приведенной ниже команды вы можете получить графический запрос пароля и запустить файловый менеджер Nautilus с привилегиями root. Нажмите Alt-F2, чтобы запустить команду в графическом диалоговом окне без терминала.

Команда gksu также имеет несколько тузов в рукаве. Она запоминает текущие настройки вашего рабочего стола, поэтому графические программы при их запуске от имени другого пользователя не будут выглядеть неожиданно. Такие программы, как gksu являются предпочтительным способом запуска графических программ с привилегиями root.
Gksu использует su или 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 «

Стоит особо упомянуть о специальной команде 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.

Читайте также:  Windows домен все пользователи

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

Источник

su или sudo ?

А вот как с точки зрения безопасности сделано правильно ? В убунте, где для того, чтоб запустить команду от рута, надо сделать sudo команда и ввести свой пароль или su пароль рута, а дальше уже вводишь нужные команды

Re: su или sudo ?

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

единственная проблема — если у человека права sudo su а он далбаеп и поставил пароль 123. но тут уже надо думать кому в права даешь.

Re: su или sudo ?

в убунтах по дефолту sudo разрешен на все команды, мне интересно, зачем ето ?

Re: su или sudo ?

Компромис между юзабилити и секьюрити. С одной стороны тебе не надо париться с еще одним паролем, любое действие можно подтвердить своим же паролем. а с другой стороны вредоносный скрипт или не менее вредоносный сосед не сможет сделать rm -rf / пока ты отошел от моника.

Re: su или sudo ?

Ну если чел таки такой, описываемый святогором, то ему один хрен. Так ему, короче, разэтакому и надо.

Re: su или sudo ?

Использую sudo. В этом случае исключается вариант, в котором ты забываешь заблокировать экран, когда отходишь от компа, и кто-то коварный в этот момент делает rm -rf / из root-терминала, который ты забыл закрыть 🙂

>или su пароль рута, а дальше уже вводишь нужные команды

Нет. В ubuntu учетная запись root по умолчанию отключена.

Re: su или sudo ?

@Demon37: нет, отключить ее нельзя (ИМХО), просто там рандомный пароль. можно сделать sudo su; passwd и потом уже su юзать.

Re: su или sudo ?

дык пароль на судо просит 1 раз, потом просто пишешь sudo команда без пасса и все работает ( ето если все делать в одном терминале).

Re: su или sudo ?

> @Demon37: нет, отключить ее нельзя (ИМХО), просто там рандомный пароль. можно сделать sudo su; passwd и потом уже su юзать.

Там не рандомный пароль. По умолчанию в /etc/shadow вместо хэша пароля стоит ‘*’. Т.е. ни один пароль заведомо не подойдет.

Re: su или sudo ?

>Использую sudo. В этом случае исключается вариант, в котором ты забываешь заблокировать экран, когда отходишь от компа, и кто-то коварный в этот момент делает rm -rf / из root-терминала, который ты забыл закрыть 🙂

И в течение 15 мин любой может подойти и спокойно набрать sudo rm -rf / без ввода пароля 😉

Источник

Права пользователей в Linux. Команды sudo и su

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

Root обладает в указанной системе максимальными полномочиями, и она полностью подвластна ему, — любая его команда будет выполнена сразу. Поэтому работать таким доступом следует с осторожностью. Если вы арендуете виртуальный сервер Linux – используйте эту инструкцию. Чтобы не допустить ошибки необходимо изначально знать, как посмотреть права пользователя Linux.

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

Команда sudo

Sudo позволяет клиенту задать практически любую команду с доступами, разрешениями и привилегиями root. Применять ее очень просто:

Если вам необходимо изменить файл /etc/apt/sources.list:

sudo nano /etc/apt/sources.list

Если задать аналогичную команду, но без sudo (просто: nano /etc/apt/sources.list), текстовый редактор запустит файл, но сохранить внесенные изменения вы при этом не сможете, поскольку для завершения задачи не хватит полномочий.

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

sudo nano /etc/apt/sources.list
Password:

Нужно ввести пароль, применяемый для входа в систему, но он должен отличаться от пароля root.

Использовать sudo могут не все, а только профили, внесенные в файл /etc/sudoers. Администратору системы позволено редактировать этот файл с помощью visudo.

Читайте также:  Windows 10 shortcuts screen

На платформе Xelent виртуальные серверы (даже на базе Ubuntu) создаются с активной записью root. Следовательно, если вы хотите использовать sudo для обычного пользователя, то сначала нужно его создать, а затем добавить в /etc/sudoers. Далее рассмотрен весь процесс подробно — с момента создания на примере Ubuntu 18.04.
Первым делом добавим пользователя через adduser (рис. 1):

Команда добавит den и установит его пароль. Узнать права пользователя Linux с этим логином можно будет в любой момент.

Рис. 1. Создание пользователя в Ubuntu 18.04

В Ubuntu adduser не только добавляет в Linux права пользователя, но и создает пароль для него. В прочих дистрибутивах вам понадобится две команды — одна для создания новой пользовательской учетной записи, а вторая — для задания его пароля:

adduser den
passwd den

Затем den нужно добавить в файл /etc/sudoers для редактирования которого предназначена visudo. По умолчанию она использует текстовый редактор vi, который очень неудобен и понадобится еще одна статья, объясняющая как с ним работать. Гораздо проще установить переменную окружения EDITOR и задать более удобный текстовый редактор, например, nano.

Узнаем, где находится текстовый редактор nano:

which nano
/bin/nano

Установим переменную окружения:

Рис. 2. Установка переменной окружения EDITOR

После этого можно выполнить visudo и дать права пользователю Linux, отредактировав необходимый файл, добавив в него den. Добавьте в него строчку:

den ALL=(ALL:ALL) ALL

Данная строка объясняет, что den можно выполнять со всех (первый ALL) терминалов, работая как любой (второй ALL) все команды (третий ALL) с максимальными правами. Конечно, его можно и более ограничить, например:

den ALL= /sbin/poweroff

Эта запись означает, что вышло дать права пользователю Linux den и он может с любого терминала вводить команду завершения работы. Руководств по файлу sudoers в Интернете предостаточно, поэтому вы без проблем найдете дополнительные примеры ограничения прав через этот файл, чтобы настроить сервер так, как вам нужно.

Рис. 3. Редактирование /etc/sudoers

Для сохранения изменений нажмите сначала Ctrl + O, а затем Ctrl + X, чтобы выйти из редактора.

Теперь проверим, все ли у нас получилось. Превратимся в den:

Попытаемся с максимальными правами выполнить любую команду, например, ls:

Команда sudo запросит пароль den — введите его. Если бы мы допустили ошибку при настройке, sudo сообщила бы, что он не имеет права ее использовать. А поскольку она запросила пароль, мы все сделали правильно.

Рис. 4. Sudo в действии

Каждую команду, которая требует максимальных прав, вам придется выполнять через sudo. Порой нужно выполнить продолжительную настройку и вводить каждый раз sudo не хочется. В этом случае можно запустить командный интерпретатор bash через sudo и вы получите полноценную консоль root. Вот только не забудьте по окончанию настройки ввести exit:

Через sudo у вас не получится использовать перенаправление задач категории ввода/вывода, то есть команда вида sudo ls /etc > /root/somefile не сработает. Для этого требуется ввести sudo bash и использовать систему как обычно.

Каждая команда, которая была введена в систему непосредственно с помощью sudo, фиксируется в учетном журнале, находящемся по адресу /var/log/auth.log, и у вас сохранится история введенных задач с полномочиями root, а вот при работе под администратором root журнал вовсе не ведется. Кроме того, если пойдет не так, можно будет понять, что случилось, изучив данный журнал. Посмотрите на рис. 5. На нем видно, что den вводил ls через sudo.

Рис. 5. Журнал auth.log

Команда su

Su дает доступ к консоли с полными правами администратора root любому (даже если он изначально не был вписан в файл /etc/sudoers). Единственное условие — он должен иметь пароль root. Понятно, что в большинстве случаев ним будет сам root, — не станете же вы всем доверять свой пароль? Поэтому su предназначена, в первую очередь, для администратора системы, в Linux права пользователя у него не ограничены, а sudo — для остальных, им тоже иногда требуются права root (чтобы они меньше отвлекали администратора от своей работы).

Использовать su просто:
su

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

Чтобы закрыть сессию su нужно или ввести слово exit, или закрыть окно терминала.

С помощью su можно работать от имени любого пользователя. Ранее было показано, как мы с помощью su den смогли выполнять команды от имени пользователя den.

Источник

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