Sudo i что значит
Перейти к содержимому

Sudo i что значит

  • автор:

root, sudo и #

root — суперпользователь системы. А если более точно, то это пользователь с идентификатором 0. Имя здесь не особо важно. Хотя по умолчанию это общее имя пользователя с нулевым идентификатором пользователя для всех unix-like операционных систем. Это пользователь обладает наивысшими привилегиями в ОС.

sudo — консольная команда выполняющая команду переданную ей как аргумент с правами суперпользователя (root). Графический аналог — gksu, kdesu.

# — символ подсказки в консоли, который явно указывает, что команда будет выполнена под учетной записью root (в отличии от символа $, который говорит что команда будет выполнена от имени обычного пользователя).

Когда нужно работать под пользователем root?

Ответ — прост: НИКОГДА.
Более того, в дистрибутивах на основе Debain (к коим относится и Ubuntu) работа под пользователем root заблокирована — интерактивно залогиниться в консоль или GUI под ним нельзя.

Все это однако не означает что никаких административных действий выполнить в такой системе нельзя. Для исполнения административных команд используется команда sudo (или её графический аналог gksu).

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

Несмотря на то, что sudo исполняет только одну команду, использовать эту команду удобно и просто. Первый раз, при выполнении команды через sudo будет запрошен пароль текущего пользователя. Это выглядит несколько странно на первый взгляд, ведь пользователь уже залогинился и ввел свой пароль (или логин был автоматическим). Однако дополнительный запрос пароля служит привлечением внимания пользователя, что он запрашивает исполнение команды с повышенными привилегиями.
Вводить пароль на каждую команду sudo — не потребуется — единожды введенным пароль для sudo действует в течении определенного времени и только если между командами с sudo будет большой интервал во времени, пароль будет запрошен вновь.
Доступ к команде sudo не бесконтролен: пользоваться ей могут только пользователи, включенные в группу admin.

sudo -i : переводит пользователя в сессию под root-ом. Это аналог команды su 1) , за тем исключением, что пароль требуется пользователя, а не root-а. Выход из сессии — exit.

sudo -s : переводит пользователя в сессию под root-ом, но при этом текущий каталог не меняется /root 2) а остается тем же что был до вызова команды. Выход из сессии — exit.

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

Разница между sudo -s и sudo -i

Разница в переменных окружения почти отсутствует. В чём на практике разница между sudo -i и sudo -s?

Valdor ★★
03.07.15 21:21:23 MSK
anonymous
( 03.07.15 21:28:25 MSK )

В случае sudo -s просто вызывается оболочка, указанная в переменной окружения $SHELL.

В случае sudo -i вызывается оболочка, указанная в /etc/passwd для целевого пользователя, причём вызывается как $SHELL -i . Из этого следует, что она прочтёт и исполнит ещё и profile-файлы ( /etc/profile , ~/.bash_profile в случае bash) вдобавок к rc-файлам.

intelfx ★★★★★
( 03.07.15 21:29:43 MSK )
Последнее исправление: intelfx 03.07.15 21:31:33 MSK (всего исправлений: 2)

sudo -i это почти как su -l, то есть полноценный логин.

sudo -s — просто повышение прав. типа как UAC в винде.

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

Знакомство с sudo

Чтобы произвести сколь-нибудь значимые изменения в настройках операционной системы своего сервера, администратор должен обладать доступом к этой самой системе с соответствующими правами. Это относится ко всем операционным системам. В Linux учётная запись, которая может всё, это – root. Эту учётную запись ещё называют суперпользователь. И для администрирования Linux-системы необходимо либо использовать учётную запись root’а, либо получить его полномочия при работе со своей учётной записью.

В первом случае администратор должен подключаться с паролем root’а напрямую или используя команду su . Во втором – пароль root’а не нужен. Для получения привилегий суперпользователя потребуется команда sudo .

Что такое sudo?

Sudo – это утилита для операционных систем семейства Linux, позволяющая пользователю запускать программы с привилегиями другой учётной записи, как правило, суперпользователя. В части запуска команд от имени root’а sudo является альтернативой утилите su . Правда, в отличие от su , которая запускает оболочку root’а и предоставляет суперполномочия всем дальнейшим инструкциям, sudo предоставляет только временное повышение привилегий. Таким образом, включая полномочия root’а только когда это действительно необходимо, применение команды sudo снижает вероятность того, что опечатка или ошибка в вызываемой команде причинит какой-нибудь вред системе.

Непривилегированная учётная запись должна иметь некоторые полномочия в системе для того, чтобы иметь возможность воспользоваться командой sudo . Если быть более точным, такой пользователь должен состоять в определённой группе безопасности. Для добавления пользователя в данную группу в Ubuntu/Debian применяется следующая команда:

# usermod -aG sudo your-user

Для CentOs такая команда имеет вид:

# usermod -a -G wheel your-user

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

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

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

$ sudo command-you-want-to-run

Например, запуск команды для обновления списка доступных пакетов в Debian из-под учётной записи не имеющей полномочий root’а выглядит как:

$ sudo apt update

Может получиться так, что на вашем сервере утилита sudo отсутствует в дистрибутиве операционной системы.

Утилита sudo в системе не установлена

Поэтому, для установки пакета sudo , необходимо залогиниться в систему root’ом и запустить следующие команды:

# apt update # apt install sudo

Обновление списка пакетов

Установка sudo

Чтобы не набирать sudo в каждой команде, можно при помощи sudo авторизоваться под именем другой учётной записи. Для этого применяется опция -i :

$ sudo -i

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

$ sudo -i -u user2

Чтобы посмотреть текущие настройки sudo , используйте команду с опцией -l . Вывод будет содержать информацию по разрешённым к запуску командам. В данном случае нашему пользователю разрешено всё:

Вывод команды sudo -l

Конфигурация sudo содержится в файле /etc/sudoers . В этом файле можно изменить такие настройки как, например, какой учётной записи можно запускать команды от имени суперпользователя, или какие команды может выполнять пользователь, и так далее. Для внесения изменений в конфигурационный файл наберите следующую команду, подключившись к системе root’ом:

# visudo

Заключение

Вкратце, мы ознакомились с весьма полезной и популярной в Linux-системах утилитой sudo . Её функционал и возможности намного шире, чем то, что описано в данной статье. И если вам нужна более подробная информация по настройке и использованию команды, то добро пожаловать в другие разделы нашего справочника.

Sudo — Основы командной строки

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

  • Установка новых программ
  • Навигация по чужим директориям
  • Изменение прав доступа
  • Изменение содержимого в файлах, не принадлежащих текущему пользователю
  • Создание, редактирование и удаление файлов, когда не хватает прав текущего пользователя
  • Запуск программ, требующих повышенных привилегий

В этом уроке обсудим, как стать другим пользователем. Для этого зайдите в систему и воспользуйтесь утилитой su (сокращение от substitute user или switch user). Когда-то такой способ был основным, но сейчас он устарел и не рекомендуется к использованию. Подробнее об этом можно прочитать в статье «Su или sudo?» из дополнительных материалов.

Основной способ повышать привилегии в современных системах — утилита sudo (substitute user and do — дословно «подменить пользователя и выполнить»).

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

# Нет прав на выполнение touch /etc/myfile touch: cannot touch '/etc/myfile': Permission denied # С `sudo` все работает sudo touch /etc/myfile # Видно, что владелец файла — это суперпользователь `root` stat /etc/myfile File: '/etc/myfile' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: ca01h/51713d Inode: 2761 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) # Нет прав на удаление rm /etc/myfile rm: remove write-protected regular empty file '/etc/myfile'? y rm: cannot remove '/etc/myfile': Permission denied # Опять помогла утилита `sudo` sudo rm /etc/myfile 

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

Иногда нужно выполнить команду из-под пользователя, отличного от root . Тогда придется добавить флаг -u :

sudo -u nobody mkdir /tmp/test # Директория создана от имени пользователя nobody stat /tmp/test File: '/tmp/test' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: ca01h/51713d Inode: 4577 Links: 2 Access: (0755/drwxr-xr-x) Uid: (65534/ nobody) Gid: (65534/ nogroup) 

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

# Команда `sudo` запросит пароль текущего пользователя sudo -i # Проверяем, что сессия запущена от суперпользователя id uid=0(root) gid=0(root) groups=0(root) 

Главное — не забыть переключиться обратно после завершения необходимых манипуляций. Для этого наберите exit .

Подводные камни

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

Представим, что из-под sudo мы запустили команду, которая создает файлы и директории. В таком случае владельцем этих файлов становится суперпользователь. Все последующие обращения к этому файлу без sudo начнут выдавать ошибку «У вас нет прав доступа». Причем даже необязательно работать с этими файлами напрямую. Множество программ так или иначе обращаются к файловой системе для чтения конфигурационных и других файлов.

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

Общее правило может быть таким:

  • Все, что лежит в личных директориях пользователя, должно принадлежать этому пользователю
  • Все, что находится вне домашней директории пользователя и требует дополнительных прав, скорее должно запускаться с sudo , но бывают и исключения

Рассмотрим, как это работает на практике:

ls -la # Все содержимое домашней директории принадлежит одному пользователю # Сама директория пользователя принадлежит ему же # Родительская директория принадлежит суперпользователю drwxr-xr-x+ 117 mokevnin staff 3744 Feb 19 15:55 . drwxr-xr-x 5 root admin 160 Oct 12 19:15 .. -r-------- 1 mokevnin staff 7 Nov 21 2017 .CFUserTextEncoding -rw-r--r--@ 1 mokevnin staff 22532 Feb 8 00:04 .DS_Store 
Дополнительные материалы

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *