Linux почему sudo спрашивает пароль текущего пользователя а не root

Обновлено: 02.07.2024

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

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

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

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

Что такое sudo

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

Где используется sudo

sudo используется всегда, когда вы запускаете что-то из меню Администрирования системы. Например, при запуске Synaptic вас попросят ввести свой пароль. Synaptic - это программа управления установленным ПО, поэтому для её запуска нужны права администратора, которые вы и получаете через sudo вводя свой пароль.

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

Запуск графических программ с правами администратора

Для запуска графических программ с правами администратора можно воспользоваться диалогом запуска программ, вызываемым по умолчанию сочетанием клавиш Alt + F2 .

Допустим, нам необходимо запустить файловый менеджер Nautilus с правами администратора, чтобы через графический интерфейс как-то изменить содержимое системных папок. Для этого необходимо ввести в диалог запуска приложений команду

Вместо gksudo можно подставить gksu , кроме того, пользователи KDE должны вместо gksudo писать kdesu . У вас попросят ввести свой пароль, и, если вы обладаете нужными правами, Nautilus запуститься от имени администратора. Запуск любого графического ПО можно производить с правами администратора, просто написав в диалоге запуска

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

Запуск программ с правами администратора в терминале

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

У вас попросят ввести ваш пароль. Будьте внимательны, пароль при вводе никак не отображается, это нормально и сделано в целях безопасности, просто вводите до конца и нажимайте Enter . После ввода пароля указанная команда исполнится от имени root.

Система какое-то время помнит введённый пароль (сохраняет открытой sudo-сессию). Поэтому при последующих выполнениях sudo ввод пароля может не потребоваться. Для гарантированного прекращения сессии sudo наберите в терминале

Кроме того, часто встречаются ошибки, связанные с каналами в Linux. При исполнении команды

с правами root исполнится только cat , поэтому файл result.txt может не записаться. Нужно либо писать sudo перед каждой командой, либо временно переходить под суперпользователя.

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

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

Для выхода обратно в режим обычного пользователя наберите exit или просто нажмите Ctrl + D .

Использование традиционного root аккаунта и команды su

Разблокировка учетной записи root приводит неоправданным рискам (работая постоянно под рутом вы имеете 100500 способов «отстрелить себе ногу»), а также упрощает получение доступа к вашему компьютеру злоумышленником.

Ubuntu 11.04 и младше

Для входа под root достаточно задать ему пароль:

Потом на экране входа нажмите Другой… и введите логин (root) и пароль, который вы задали.

Ubuntu 11.10 и старше

Начиная с версии 11.10 был установлен менеджер входа lightdm, и дело со входом под root обстоит немного сложнее.

1. Устанавливаем root пароль. Введите в терминал:

2. Включаем пункт «Введите логин». Введите в терминал:

В конце файла допишите:

3. Перезагружаем lightdm. Введите в терминал:

Все, на экране входа появится пункт «Логин». В поле логин вводим «root», в поле пароль - пароль, который мы задали на первом этапе.

Для обратной блокировки учетной записи root вам потребуется откатить изменения в настройках lightdm, а также заблокировать учетную запись root командой в терминале:

Настройка sudo и прав доступа на выполнение различных команд

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

По умолчанию, в нём написано, что все члены группы admin имеют полный доступ к sudo , о чём говорит строчка

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

Разрешение пользователю выполнять команду без ввода пароля

И в конец файла дописать строку

Внимание! Вышеописанные действия не отменяют необходимости ввода команды sudo перед вашей командой

Создание синонимов (alias`ов)

Для того, чтобы не только не вводить пароль для sudo, но и вообще не вводить sudo, сделайте следующее: откройте файл .bashrc, находящейся в вашем домашнем каталоге

и добавьте в конец файла строки

Время действия введённого пароля

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

Здесь sudo для пользователя foo действует без необходимости ввода пароля в течение 20 минут. Если вы хотите, чтобы sudo всегда требовал ввода пароля, сделайте timestamp_timeout равным 0.

sudo не спрашивает пароль

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

Однако, в некоторых случаях sudo внезапно перестаёт требовать пароль само по себе. Если сделать visudo , то можно увидеть примерно такую строку, которую пользователь вроде бы не добавлял:

Скорее всего, эта катастрофичная строка была добавлена при установке программы типа Connect Manager от МТС или Мегафона. В таком случае, её нужно поменять на строку, разрешающую с правами root запускать только этот Connect Manager, примерно так:

Не могу ввести пароль в sudo
Я устанавливаю одно приложение и для этого нужны права root. Я ввожу команду его установки. sudo.

Разница между sudo su и sudo su - в Убунту 14.04
Здравствуйте, Я всегда пользовался либо sudo, либо sudo su. А сегодня я узнал об опции sudo su.

Пароль пользователя при использовании команды sudo.
Проблема вот в чем. хочу запустить команду "sudo . " и терминал запрашивает пароль..но пароль.

Добавить удалит пользователя и сменить пароль
Привет! Нужно пример или хотя б функции через которие ето можно реализовать!Спасибо.

всё правильно делаешь.
чтобы от имени админа команду выполнить - sudo <команда>
пароль спрашивает твой, потому, что нужно подтвердить, что это ты, а не кто-то пользуется компьютером, пока ты отошел.
ну и почему твой пароль, а не админский - "админ" доверил тебе некоторые (в случае с убунтой - ВСЕ) права, добавив тебя в sudoers (man sudoers)

mokojumbot, не, там конфиги все по дефолту. Просто я не совсем догоняю механизм. А что, выходит пустой пароль успешно "ввести" невозможно? Я просто жму ввод, и в итоге он отвечает, что 3 попытки неправильного ввода закончились.

Ещё я попробовал исполнить от имени админа параметром -u, но он почему-то всё равно спросил пароль текущего пользователя:

Как такое сделать, ведь команда в графической среде "открыть как администратор" как-то работает? В Убунту по умолчанию пользователь root отключен и в системе только 1 пользователь (если не считать гостевого доступа на некоторых дистрах). Для того, чтобы была возможность выполнения административных задач предусмотрен механизм sudo — временное повышение привилегий пользователя. Поэтому единственный пользователь все время работает как обычный, но если ему вдруг понадобилось выполнить административную задачу, то он это может сделать, т.к. включен в группу sudo (в некоторых реализациях wheel). Marinero, значит, если добавить его в группу sudo(wheel), тогда начнёт спрашивать админский? Нет, поняли неправильно. Добавление/нахождение в группе sudo(wheel) позволяет выполнять действия с админскими привилегиями используя механизм sudo (т.е. sudo команда). Пароль всегда спрашивает того пользователя от имени кого sudo вызывается (по умолчанию текущего, если Вы не указали другого через опции -u или -U). Такого понятия как админский пароль не существует, есть пароль пользователя, а какими правами этот пользователь обладает определяется его вхождением в те или иные группы. Можно выполнить команду от имени другого пользователя (не текущего), тогда при выполнении такой команды будет спрашиваться пароль именно этого другого пользователя Но почему он спрашивал пароль текущего, когда я использовал параметр -u, из-за группы? Или это сначала, а потом ещё и второй пароль надо вводить? Но почему он спрашивал пароль текущего, когда я использовал параметр -u, из-за группы? Пароль всегда спрашивает того пользователя от имени кого sudo вызывается

Ключ -u означает, что КОМАНДА будет выполняться не от рута (что по умолчанию), а от указанного пользователя.

Можно настроить sudo, чтобы вовсе не спрашивал пароль.

а ЧЕЙ еще пароль у вас спрашивать? только ваш (текущего юзера). В нормальной многопользовательской системе у каждого юзера СВОЙ пароль, и даже если админ разрешит какому-нибудь "васе" выполнять с помощью судо админские команды, то чтож ему что теперь, "васе" еще и свой пароль рассказывать? вы свой пароль всему офису рассказываете обычно? вам (обычному юзеру) разрешили выполнять админские действия, но подтверждать факт того, что это именно вы а не какой-то другой "вася" вы должны СВОИМ паролем (который вам известен). а не паролем админа, который в нормальной ситуации вам неведом.

я для этого про man sudoers и упомянул
sudo не обязательно позволяет делать всё, что угодно.
админ может позволить выполнять только некоторые команды от имени рута, зачем же ему тогда свой пароль давать?

если уж так хочется вводить пароль того, КЕМ хочешь стать, можно и это в sudoers настроить.

Всем спасибо за ответы, многое прояснилось. Ещё узнал о команде su (к вопросу о реализации в "проводнике").

Сменить пароль пользователя через SSH, но новый не принимает
Пытаюсь зайти через SSH Ввожу логин : login Ввожу пароль : 89ed43cb4b814814e68a53cc9ae97088 .

Sudo пароль администратора
Доброго времени суток. Подскажите пожалуйста какой пароль администратора по умолчанию в судо на.

Добавить пользователя в sudo
Запуская на сервере (CENTOS 7.5) некоторый php скрипт с командой 'exec()' столкнулся с ошибкой .

Здравствуйте. Работает система. В текстовой консоли, например tty5, ввожу логин root и пароль этого пользователя. Получаю доступ к системе и имею возможность работать. Открываю другую. например tty2. вхожу в систему не root-пользователем, работаю. Затем пробую зайти, как root, используя su. Программа задумывается на несколько сек. и отказывает в доступе.


su требует пароля пользователя а не рута


И вы, deterok .

Для ТС, либо настройте работу sudo для нужного вам пользователя, либо добавьте этого пользователя в группу wheel, а затем вызывайте su и вводите пароль root.

Не, я думал он вводит так: su user1.

Он же будет просить пароль пользователя.

Плохо прочитал, действительно.

Ну тут тогда да, группа нужна.

deterok ★★★★★ ( 05.12.14 11:13:26 )
Последнее исправление: deterok 05.12.14 11:14:21 (всего исправлений: 1)

Ввёл себя в группу wheel:

Перелогиниться нужно. Покажите вывод команды id.


Теперь поясните идиоту почему при вводе в терминал su в минте без аргументов оно приняло пароль пользователя и переключило на рута?

]$ id uid=1032(bsm) gid=100(users) группы=10(wheel),100(users),132(oeo)

Я без понятия как там у вас в минте и что там наделано, но по стандарту при вызове

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

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

Возможно, у вас в Минте вообще стоит alias:

kostik87 ★★★★★ ( 05.12.14 11:39:48 )
Последнее исправление: kostik87 05.12.14 11:41:27 (всего исправлений: 2)


С /etc/pam.d все нормально? Там есть файлик su?

UPD. И еще проверь /etc/login.defs. Там можно запретить логин суперпользователем с определенных консолей. Ты ничего вообще не правил в тех местах?

Zubok ★★★★★ ( 05.12.14 13:57:37 )
Последнее исправление: Zubok 05.12.14 14:04:49 (всего исправлений: 1)


Теперь поясните идиоту почему при вводе в терминал su в минте без аргументов оно приняло пароль пользователя и переключило на рута?

Потому что в Минте при установке пароль root совпадает с паролем пользователя с UID=1000. Если ты, например, сменишь свой пароль с помощью passwd, он перестанет совпадать с паролем рута.

В /etc/pam.d имеется:


А что пишет в /var/log/secure? У тебя Fedora или производный?

Я вошол в систему своим логином и попробовал войти через su:


Я вошол в систему своим логином и попробовал войти через su:

su: pam_unix(su:auth): authentication failure; logname=bsm uid=1032 euid=1032 tty=tty4 ruser=bsm rhost= user=root

Короче, проверь права на /bin/su. У тебя, скорее всего, сбит suid.

У тебя должно быть (буковку s подчернкул)

Если этой буковки нет, то от root

Zubok ★★★★★ ( 05.12.14 19:25:18 )
Последнее исправление: Zubok 05.12.14 19:27:04 (всего исправлений: 1)


Ты должен зайти в терминал tty (ctrl+alt+F1)зайдя под login: root и введя пароль рута. И добавить себя в группу wheel таким образом

потом выйти из терминала (alt+F7) и запустить в консоль su и будет тебе счастье.


Он уже в группе wheel: su не распознаёт пароль root для не root-пользователя (комментарий) . В группе wheel надо присутсвовать, если в конфигурации включена опция по ограничению группы. В том же /etc/pam.d/su. У него нет ограничения. Любой пользователь может сделать su: su не распознаёт пароль root для не root-пользователя (комментарий)

Zubok ★★★★★ ( 06.12.14 00:22:41 )
Последнее исправление: Zubok 06.12.14 00:26:41 (всего исправлений: 1)

Установил права доступа для su:


Вот интересно, как так получилось, что бит не выставлен. Вот выясни. Либо это политика дистрибутива (Fedora? CentOS?), что он не выставлен, то есть он там в пакете идет так. Но тогда при обновлении пакета бит опять вернется в исх. значение. Либо же это ты или предыдущие админы сделали.

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

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

В чём разница? Команда visudo проверяет синтаксис файла /etc/sudoers перед сохранением, что позволяет избежать ситуаций, когда вы сами себя лишили прав администратора и не можете их вернуть. В большинстве дистрибутивов visudo откроет /etc/sudoers через редактор vi, а вот в Ubuntu по умолчанию используется nano.

Найдите в открывшемся файле нужного пользователя или добавьте нового. Строка должна иметь следующий вид:

[имя_пользователя] ALL=(ALL:ALL) NOPASSWD: ALL

Подобное можно сотворить и с группой. В этом случае строка будет иметь вид:

%[имя_группы] ALL=(ALL:ALL) NOPASSWD: ALL

Приведем пример. Как видно из скриншота ниже, пользователи, входящие в группу sudo могут использовать одноимённую команду (если учётка или группа, в которую входит учётка, не прописаны в /etc/sudoers, это вызовет ошибку, которую мы подробно разбирали здесь).

Как отключить запрос пароля в команде sudo в Linux

Откорректируем строчку, чтобы получилось так:

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

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

В общем виде для пользователей строка будет выглядеть так:

Как отключить запрос пароля в команде sudo в Linux

Конечно, можно запустить Центр приложений из терминала через sudo:

Обратите внимание, что надо указывать полный путь к файлу команды. Файлы разделяются запятыми. Параметр PASSWD применяется в sudo по умолчанию, но, поскольку мы прописали NOPASSWD, нам пришлось прописать и PASSWD. Если этого не сделать, пользователю или группе пользователей будет дозволено выполнять только команды, перечисленные после NOPASSWD, а все остальные станут недоступны.

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