Будучи Linux администратором, я всегда использовал и sudo , и su . И системному администратору очень важно, чтобы вы знали разницу между ними. Для тех, кто не имеет общего представления о разнице между этими двумя или всегда путает их - вот список из 12 Q&A (вопросов и ответов), которые направлены, чтобы помочь вам разобраться в тонкостях sudo и su.

ПРИМЕЧАНИЕ - Эта статья является специфичной только для Ubuntu. Хотя некоторые сведения могут быть применимы к большинству популярных дистрибутивов.

Sudo vs Su

Эта серия вопросов и ответов должна прояснить некоторые особенности sudo vs su для многих пользователей Ubuntu.

Q1 . Как используются sudo и su? В чем разница между ними?

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

Вот пример:

$ apt-get install skype E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied) E: Unable to lock the administration directory (/var/lib/dpkg/), are you root? $ sudo apt-get install skype password for mylinuxbook: Reading package lists... Done Building dependency tree Reading state information... Done ... ...

Как вы видите, сначала я попытался установить Skype, используя команду apt-get , но я получил permission denied error . Тогда я использовал sudo вместе с такой же системой команд и системой пароля для пользователя mylinuxbook. После ввода правильного пароля, команда выполнена успешно.

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

Вот пример:

$ su mylinuxbook Password: mylinuxbook@mylinuxbook-Inspiron-1525:~$

В приведенном выше примере, я использовал su для переключения на учетную запись пользователя mylinuxbook и после ввода пароля для mylinuxbook, я смог сделать это.

Вот еще один пример:

$ su Password: su: Authentication failure

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

Q2 . Что делать, если я не хочу настраивать пароль администратора в моей Ubuntu, но все же ​​хочу переключиться на суперпользователя?

Ответ. В этом случае вы можете попробовать команду "sudo su ". Вот пример:

$ sudo su password for mylinuxbook: root@mylinuxbook-Inspiron-1525:/home/mylinuxbook#

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

Q3. Что делать, если я хочу использовать su для перехода к другим учетным записям пользователей, но не хочу помнить каждого и каждый пароль пользователя?

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

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

Ответ. Ну, это н есовсем то, чтобы любой нормальный пользователь может сделать sudo и выполнять команды, которые требуют привилегий суперпользователя. Вы, как пользователь, должны быть sudoer тоже. Это означает, что вы должны иметь привилегии для использования sudo. Если вы являетесь действительным sudoer, система запрашивает пароль только для того чтобы убедиться, что вы понимаете, что вы делаете некоторые работы, которые требуют привилегий суперпользователя, и вы должны все перепроверить, прежде чем на самом деле сделать это.

Теперь возникает вопрос о sudoers. Как стать пользователем sudoer ? Пользователь может стать sudoer, если его добавили в группу sudo. Вот пример:

$ sudo adduser sudo

Просто замените фактическим именем пользователя для учетной записи. Обратите внимание, что ранее (до Ubuntu 12.04) группа должна была называться admin , но сейчас это не обязательно.

Вы можете использовать команду "group ", чтобы проверить все группы, в которых есть этот пользователь. Вот пример:

$ groups mylinuxbook mylinuxbook: mylinuxbook adm cdrom sudo dip plugdev lpadmin sambashare

Таким образом, вы видите, что пользователь "mylinuxbook " входит в состав всех этих групп, включая группы sudo, и, следовательно, sudoer.

Q5. Я заметил, что как только я использовал sudo, у меня длительное время сохраняются кореневые права, хотя через некоторое время все приходит в норму. Что это?

Ответ . Ubuntu помнит пароль для sudo около 15 минут. Это означает, что как только вы использовали sudo для выполнения команды, система не будет запрашивать пароль, если вы запускаете другие команды, которые требуют привилегий суперпользователя для запуска. Хотя вам придется использовать "sudo " перед каждой командой.

Q6. Какие преимущества sudo над su?

Ответ. Sudo имеет много преимуществ по сравнению с su.

Вот список:

  • Sudo гарантирует, что привилегии существуют для конкретной команды (или в течение определенного периода времени), а не для всей сессии, поскольку это может привести к случайному злоупотребление привилегиями суперпользователя.
  • Вы можете использовать sudo, чтобы ограничить права пользователя. Это полезно, когда вы не хотите, чтобы пользователь имел контроль над всеми правами суперпользователя, работая с suda.
  • Существует лог журнала (auth.log), который поддерживается для каждого sudoer. Этот файл содержит информацию о командах, которые были выполнены с использованием sudo, время их выполнения. Это помогает администратору отслеживать даже доверенных пользователей (sudoers).
  • Самое главное преимущество в том, что для входа в suda требуется собственный пароль пользователя, а не пароль суперпользователя. Это помогает сохранять личный корневой пароль, и нет необходимости менять его даже тогда, когда пользователь (sudoer) уходит.
  • Q7. Любой пользователь может выполнять операции sudo?

    Ответ. Нет, только доверенные пользователи или sudoers могут выполнять операции sudo. Вот официальная страница , которая описывает, как и что может делать пользователь-sudoer.

    Q8. Я интересуюсь su. Как я могу настроить использование su таким образом, чтобы достичь функциональность, аналогичную suda?

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

    Вот пример:

    $ su -c "apt-get install skype" Password:

    Просто введите пароль, и только эта команда будет работать с привилегиями суперпользователя. Хотя это так же, как sudo, но с той лишь разницей, что вам нужно ввести пароль суперпользователя вместо пароля текущего пользователя.

    Q9. Я работаю с sudо. Как я могу настроить использование sudo таким образом, чтобы достичь своей функциональности аналогичное su?

    Ответ. Для достижения функциональности su через sudo, попробуйте опцию -i команды sudo.

    Вот пример:

    $ sudo -i password for mylinuxbook: root@mylinuxbook-Inspiron-1525:~#

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

    Q10. Кореневой пароль моей учетной записи еще не активирован. Могу ли я использовать sudo, чтобы активировать пароль суперпользователя?

    Ответ. Для активации пароля для суперпользователя, вы можете использовать команду passwd следующим образом:

    $ sudo passwd root

    Эта команда требует права суперпользователя, так что вам придется использовать sudo.

    Q12. Могу ли я использовать sudo, чтобы предоставить особые права пользователям?

    Ответ. Конфигурационный файл для sudo - /etc/sudoers . Его нельзя редактировать вручную с помощью редактора. Для этой цели рекомендуется использовать команду visudo .

    Вот точная команда:

    $sudo visudo

    и вот что вы получите:

    Эта команда откроет временный файл /etc/sudoers.tmp в нано редакторе для редактирования. Visudo убеждается, что нет никакого конфликта, когда несколько экземпляров одного файла получается отредактировать.

    Чтобы понять, как предоставить ограниченные права, понять дизайн этого файла конфигурации, .

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

    $ sudo su

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

    $ sudo passwd

    чтобы в дальнейшем использовать su обычным образом. И даже, при желании, авторизоваться root’ом при регистрации в системе.

    Впрочем, и тут команда sudo предусматривает “идеологически правильный” метод, и даже не один. Это — опции -s и -i , пролонгирующие, хотя и несколько по разному, действие команды sudo на неопределённый срок, вплоть до завершения «вторичного сеанса» командой exit .

    Опция -s , открывая вторичный сеанс root’а, сохраняет все переменные окружения первоначального пользователя. Однако, если к ней добавить опцию -H , то переменные эти будут заново считаны из профильных файлов домашнего каталога администратора, то есть /root, как при запуске интерактивного экземпляра шелла. Однако каталог, бывший текущим в момент ввода команды, при этом не изменится, как не изменится и вид приглашения командной строки.

    Опция же -i полностью воспроизводит root-окружение, запуская его командную оболочку как регистрационную (login shell). Разумеется, при этом и текущий каталог меняется на /root, а приглашение командной строки приобретает вид, описанный в соответствующей переменной профильного файла администраторского шелла (в bash — PS1).

    На практике разница между обеими формами обретения перманентных прав администратора не велика, особенно в bash . Но в zsh соответствующими настройками профильных файлов при желании можно добиться существенно разного окружения в каждом из этих случаев. Правда, насколько это нужно пользователю — большой вопрос. А вот то, что при использовании опций -H нахождение в перманентно административном режиме никак внешне не впроявляется, чревато ошибками. И делает в большинстве случаев применение опции -i предпочтительным.

    К слову сказать, возможности sudo не ограничиваются запуском команд от лица администратора: задав опцию -u username , их можно выполнить и от лица того пользователя, чей логин задан в качестве её значения. Это может быть полезным при просмотре или копировании dot-файлов и dot-каталогов другого пользователя, часто открытых для чтения и изменения только их хозяину.

    К слову сказать, команду sudo можно запустить так, чтобы она запрашивала пароль пользователя, от имени которого будет выполняться команда (например, администратора), а не того, кто требует его полномочий. Для этого существует опция -targetpw . А чтобы сделать требование root’ового пароля постоянным, достаточно определить, например, псевдоним типа

    Alias sudo -targetpw

    Требование ввода root’ового пароля при запуске sudo — поведение её по умолчанию в некоторых дистрибутивах, например, как говорят, в Suse.

    Команда sudo имеет еще немало опций — выше я привёл только те, которые мне приходилось использовать. Остальные легко посмотреть в man sudo . Из не перечисленных упомяну ещё опцию -b , предписывающую запускать «подсудную» команду в фоновом режиме. Она может быть полезна при выполнении долговременных действий, например, при копировании образов USB на флэшку командой dd.

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

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

    Если говорить о семействе Ubuntu, в котором механизм этот был впервые задействован «из коробки» - то «из коробки» же ответ на первый вопрос будет отрицательным, на второй — положительным. А вообще это зависит от настроек программы sudo , которые описываются в файле /etc/sudoers . И в нем можно задать правила, допускающие к исполнению определенных команд только отдельных пользователей. В обобщенном виде это выглядит так:

    Username host = command

    Здесь, как нетрудно догадаться, username — имя пользователя, для которого устанавливается данное правило, host — имя машины, с которой он может к этому правилу прибегнуть, command — конкретная команда, использование которой разрешается данному пользователю с данной машины. Команда должна быть дана с указанием полного абсолютного пути (то есть /sbin/fdisk , а не fdisk). Поле описания команд может включать несколько значений, разделенных запятыми, например:

    Username ALL = /sbin/fdisk,/bin/mount

    В Ubuntu’идах по умолчанию правила доступа пользователей к административным привилегиям описываются так:

    # User privilege specification root ALL=(ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL

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

    В более иных дистрибутивах, не использующих sudo «из коробки», потребуется редактирование её конфигурационного файла — того самого /etc/sudoers , о котором упоминалось выше.

    Файл /etc/sudoers — обычный текстовый, и, соответственно, его можно редактировать в любом текстовом редакторе (или, скажем, средствами ed или sed). Однако при этом существует определенный риск что-нибудь напортачить (за счет обычных опечаток), вплоть до того, что полностью закрыть самому себе доступ к привилегиям суперпользователя. Конечно, ситуации эти поправимы — например, через перезагрузку в однопользовательском режиме. Однако, лучше в них не попадать. И потому более надежным средством модификации /etc/sudoers будет использование специально предназначенной для того утилиты — visudo .

    Утилита visudo не делает ничего сверхъестественного — она просто открывает /etc/sudoers в текстовом редакторе, описываемом переменной EDITOR суперпользователя (если таковая не определена, им будет опять же классический vi — отсюда и название) и позволяет его отредактировать обычным образом, после чего выйти из редактора с сохранением результатов штатными его средствами. Однако перед этим результат редактирования проверяется на корректность. И если обнаруживается нарушение синтаксиса, принятого для /etc/sudoers , выдается соответствующее предупреждение. После которого можно вернуться к редактированию, отказаться от сделанных изменений или все-таки принять их (разумеется, под личную ответственность).

    Утилита visudo не гарантирует стопроцентного успеха редактирования. Так как проверяет только соответствие синтаксиса, но не “правильность самих правил”. То есть если ошибка будет допущена в указании пути к нужной для данного правила команде — эта команда через sudo не сработает.

    Впрочем, на деле это выглядит обычно гораздо проще и совсем не страшно. Так, в Fedora 11 мне в образцово-показательном конфиге /etc/sudoers пришлось лишь раскомментирвоать строку

    %wheel ALL=(ALL) ALL

    чтобы дать пользователю из указанной группы (а себя я туда включил заблаговременно, как было описано в ) все права, коими наделён администратор. Заодно можно было бы предоставить себе по блату и возможность использовать sudo без пароля. Для этого потребовалось бы снять комментарий со строки

    # %wheel ALL=(ALL) NOPASSWD: ALL

    Но я ограничился лишь тем, что сделал действие пароля более долгоиграющим, вписав (изначально отсутствующую строку

    Defaults timestamp_timeout=10

    где значение таймаута указано в минутах. Кстати, если изменить его на ноль —

    Defaults timestamp_timeout=0

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

    Можно, напротив, отключить тайаут на действие sudo , ввдея для него отрицательное значение:

    Defaults timestamp_timeout=-1

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

    Более пристальное вглядывание в файл /etc/sudoers легко подскажет возможности дать определённым пользователям или группам только ограниченный набор прав. Впрочем, тут уже начинаются тонкости всамделишнего администрирования. Я же просто лишил своего двойника-экспериментатора доступа к любым административным действиям, дабы пресечь все его поползновения на этом поприще. Впрочем, даже это не всегда позволяет мне с ним справляться — подобно тому, как Тимур Шаов не в силах совладать со своим лирическим героем.

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

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

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

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

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

    После первой публикации этой заметки мне было задано несколько вопросов. Из ответов получилось сделать мини-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 $
    Q: sudo -i длиннее, чем su - , а разницы между ними вроде как и никакой, зачем печатать больше?
    A: У sudo есть несколько преимуществ, ради которых стоит потрудиться набрать несколько лишних символов:

    • по умолчанию 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, если он был дополнительно настроен.
    Q: я единственный пользователь своей системы и привык к su, зачем мне sudo?
    A: отвечу вопросом на вопрос: если есть правильный sudo, зачем использовать устаревший su?

    Иногда для решения какой-либо задачи необходимо открыть терминал и выполнить команды от суперпользователя (sudo или su), называемый также ROOT. Хотя некоторые из них можно осуществить с помощью графического интерфейса.

    Для чего в Unix системах нужен и используется Root, вы можете узнать из , а мы далее будем обсуждать, как применяется sudo или su в Linux системах.

    Предположим, что нужно выполнить нестандартную задачу, где графические инструменты нам не помогут. К тому же командная строка является очень гибким инструментом, здесь можно увидеть вывод команд и понять, что происходит не так как нужно. А самое главное, команды в терминале являются стандартными для всех дистрибутивов Linux.

    Итак, существует два основных способа получить права суперпользователя (Root) это - sudo или su

    Команда sudo используется в Debian - подобных системах или более популярных Ubuntu, «su» используется почти во всех остальных дистрибутивах Linux.

    Ввод sudo в операционной системе Ubuntu требует ввода пароля Root и далее после успешного ввода, дает права суперпользователя на время выполнения одной лишь команды. Перед всеми последующими командами, которые требуют прав Root в Debian - подобных системах, необходимо снова вводить «sudo». А в остальных дистрибутивах Linux, где используется команда «su», предоставляет полный доступ Root, после ввода пароля, пока вы не введете «logout» или не закроете терминал.

    В Debian - подобных (Ubuntu) системах есть одна хитрость, которая может предоставить полный доступ к Root, пока вы не закроете терминал. Это нужно в том случае если вы будете выполнять много команд от имени Root, и вам не придется перед каждой командой вводить «sudo». Для этого скомандуйте:

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

    Sudo du -sch /home/*

    После этого последовал бы пароль от Root:

    16K /home/lost+found 27G /home/pavel 34G /home/pavelubuntu 50G /home/pavelzen 110G итого

    Я знаю, что я являюсь пользователем каталога /home/pavelzen , но мне необходимо еще стать и владельцем каталога /home/pavelubuntu. Для этого мне вновь необходимо перед командой ввести «sudo».

    А для других систем: сначала я скомандовал бы

    пароль, а потом

    Du -sch /home/*

    Chown -R pavelzen: /home/pavelubuntu

    Вот так в системах Linux проявляются терминалы и суперпользователи.

    Разделение прав доступа – одна из наиболее важных парадигм безопасности, реализуемых в Linux и Unix-подобных операционных системах. Обычные пользователи работают с ограниченными правами; так сокращаются масштабы их влияния на их собственную среду и на операционную систему в целом.

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

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

    Примечание : Данное руководство было выполнено на сервере Ubuntu 12.04, однако большинство современных дистрибутивов Linux будут вести себя аналогичным образом.

    Для выполнения руководства нужно предварительно выполнить начальную настройку сервера:

    Войдите на сервер как не-root пользователь.

    Как получить права root

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

    Вход как root

    Проще всего, конечно, войти в систему как пользователь root.

    При подключении через SSH укажите IP-адрес или имя хоста:

    ssh root@IP_адрес_или_домен

    По запросу введите root-пароль.

    Команда su

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

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

    Примечание : Команда su – это сокращение от substitute user.

    Итак, чтобы получить root-права, просто введите:

    Система запросит пароль root-пользователя, после чего откроет доступ к сессии оболочки root-пользователя.

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

    Команда sudo

    Последний способ получения привилегий root – команда sudo.

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

    sudo command_to_execute

    Примечание : В отличие от su, команда sudo запрашивает не пароль root, а пароль пользователя, который вызывает команду.

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

    Что такое Visudo?

    Команда sudo настраивается при помощи файла /etc/sudoers.

    Важно! Никогда не редактируйте этот файл при помощи обычного текстового редактора! Для этого следует использовать visudo.

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

    Команда visudo открывает файл в обычном текстовом редакторе, но во время сохранения файла проверяет его синтаксис. Это позволяет избежать ошибок в конфигурации.

    Как правило, visudo открывает файл /etc/sudoers в редакторе vi. В системе Ubuntu visudo использует nano.

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

    sudo update-alternatives --config editor

    There are 3 choices for the alternative editor (providing /usr/bin/editor).
    Selection Path Priority Status
    ————————————————————
    * 0 /bin/nano 40 auto mode
    1 /bin/nano 40 manual mode
    2 /usr/bin/vim.basic 30 manual mode
    3 /usr/bin/vim.tiny 10 manual mode

    Выберите число, соответствующее текстовому редактору, который вы хотите использовать.

    В системе CentOS это значение можно изменить, добавив в ~/.bashrc строку:

    export EDITOR=/path/to/editor

    Чтобы обновить настройки, введите:

    Чтобы открыть /etc/sudoers, введите:

    Редактирование файла sudoers

    Итак, в выбранном вами текстовом редакторе на экране откроется файл sudoers.

    Ниже приведены параметры файла системы Ubuntu 12.04 (закомментированные строки опущены, а изменения, внесённые при начальной настройке сервера, сохранены).

    Примечание : Файл sudoers системы CentOS гораздо более объёмен; некоторые его параметры в этом руководстве не описаны.

    Defaults env_reset
    Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    root ALL=(ALL:ALL) ALL
    demo ALL=(ALL:ALL) ALL
    %admin ALL=(ALL) ALL
    %sudo ALL=(ALL:ALL) ALL

    Стандартные параметры

    Первая строка, Defaults env_reset, сбрасывает терминальную среду, чтобы удалить все пользовательские переменные. Эта мера безопасности используется для устранения потенциально вредного воздействия переменных среды из сессии sudo.

    Второй параметр, Defaults secure_path=…, задаёт путь (PATH, точки файловой системы, в которых ОС будет искать приложения) для операций sudo. Это предотвращает использование потенциально опасных пользовательских путей.

    Параметры настройки прав пользователей

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

    • demo ALL=(ALL:ALL) ALL
    • Первое поле задаёт имя пользователя, к которому нужно применить данное правило (в данном случае это demo).
    • Первое ALL значит, что правило будет применяться ко всем хостам.
    • Второе ALL значит, что указанный пользователь может запускать команды в сессии любого пользователя.
    • Третье ALL значит, что указанный пользователь может запускать команды в любой группе.
    • Последнее ALL указывает, что эти правила нужно применять ко всем командам.

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

    Параметры привилегий групп

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

    Имена групп начинаются с символа %.

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

    Пользовательские правила

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

    Создание алиасов

    Файл sudoers можно более удобно структурировать при помощи различных алиасов (англ. – alias).

    К примеру, можно создать три разные группы пользователей с совмещёнными правами:

    User_Alias GROUPONE = abby, brent, carl
    User_Alias GROUPTWO = brent, doris, eric,
    User_Alias GROUPTHREE = doris, felicia, grant

    Имена групп должны начинаться с большой буквы. После этого можно дать пользователям GROUPTWO право на изменение БД apt-get:

    GROUPTWO ALL = /usr/bin/apt-get update

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

    Затем можно разрешить пользователям группы GROUPTHREE выключать и перезапускать машину; для этого нужно создать алиас команды:

    Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
    GROUPTHREE ALL = POWER

    Алиас команды POWER содержит команды для отключения и перезапуска машины.

    Также можно создать алиас Run as, который заменяет часть правила, указывающую пользователя, в сессии которого нужно выполнить команду.

    Runas_Alias WEB = www-data, apache
    GROUPONE ALL = (WEB) ALL

    Теперь любой пользователь группы GROUPONE может выполнять команды в сессиях пользователей www-data или apache.

    Примечание : Помните, что созданные ранее правила имеют более высокий приоритет в случае конфликта правил.

    Блокировка правил

    Существует ряд способов контроля поведения и реакции sudo на вызов.

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

    GROUPONE ALL = NOPASSWD: /usr/bin/updatedb

    Команда NOPASSWD значит, что система не будет запрашивать пароль. Также существует команда PASSWD, которая отвечает за противоположное поведение и используется по умолчанию.

    NOPASSWD распространяется на всё правило, если команда PASSWD не отменяет его. Например, строка может выглядеть так:

    GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill

    Ещё одна удобная команда – NOEXEC, которая используется для предотвращения опасного поведения определенных программ. К примеру, некоторые команды, такие как less, могут вызывать другие команды:

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

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

    username ALL = NOEXEC: /usr/bin/less

    Дополнительные сведения

    В данном разделе собраны различные полезные советы по работе с sudo.

    Если вы указали пользователя или группу в параметре Run as, вы можете выполнять команды в сессии этого пользователя при помощи флагов -u и –g соответственно:

    sudo -u run_as_user command
    sudo -g run_as_group command

    По умолчанию sudo сохраняет учётные данные в одном терминале на некоторое время. Это означает, что в течение этого периода вам не придется вводить пароль снова.

    Если в целях безопасности вы хотите сбросить этот таймер, используйте команду:

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

    Эта команда выведет все права, указанные в файле /etc/sudoers для данного пользователя.

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

    Двойной восклицательный знак повторит последнюю команду.

    Заключение

    Теперь у вас есть базовые навыки работы с файлом sudoers и правами root.

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

    Tags: ,

    Эта статья также доступна на следующих языках: Тайский

    • Next

      Огромное Вам СПАСИБО за очень полезную информацию в статье. Очень понятно все изложено. Чувствуется, что проделана большая работа по анализу работы магазина eBay

      • Спасибо вам и другим постоянным читателям моего блога. Без вас у меня не было бы достаточной мотивации, чтобы посвящать много времени ведению этого сайта. У меня мозги так устроены: люблю копнуть вглубь, систематизировать разрозненные данные, пробовать то, что раньше до меня никто не делал, либо не смотрел под таким углом зрения. Жаль, что только нашим соотечественникам из-за кризиса в России отнюдь не до шоппинга на eBay. Покупают на Алиэкспрессе из Китая, так как там в разы дешевле товары (часто в ущерб качеству). Но онлайн-аукционы eBay, Amazon, ETSY легко дадут китайцам фору по ассортименту брендовых вещей, винтажных вещей, ручной работы и разных этнических товаров.

        • Next

          В ваших статьях ценно именно ваше личное отношение и анализ темы. Вы этот блог не бросайте, я сюда часто заглядываю. Нас таких много должно быть. Мне на эл. почту пришло недавно предложение о том, что научат торговать на Амазоне и eBay. И я вспомнила про ваши подробные статьи об этих торг. площ. Перечитала все заново и сделала вывод, что курсы- это лохотрон. Сама на eBay еще ничего не покупала. Я не из России , а из Казахстана (г. Алматы). Но нам тоже лишних трат пока не надо. Желаю вам удачи и берегите себя в азиатских краях.

    • Еще приятно, что попытки eBay по руссификации интерфейса для пользователей из России и стран СНГ, начали приносить плоды. Ведь подавляющая часть граждан стран бывшего СССР не сильна познаниями иностранных языков. Английский язык знают не более 5% населения. Среди молодежи — побольше. Поэтому хотя бы интерфейс на русском языке — это большая помощь для онлайн-шоппинга на этой торговой площадке. Ебей не пошел по пути китайского собрата Алиэкспресс, где совершается машинный (очень корявый и непонятный, местами вызывающий смех) перевод описания товаров. Надеюсь, что на более продвинутом этапе развития искусственного интеллекта станет реальностью качественный машинный перевод с любого языка на любой за считанные доли секунды. Пока имеем вот что (профиль одного из продавцов на ебей с русским интерфейсом, но англоязычным описанием):
      https://uploads.disquscdn.com/images/7a52c9a89108b922159a4fad35de0ab0bee0c8804b9731f56d8a1dc659655d60.png