Sudo не работает ubuntu

Обновлено: 04.07.2024

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

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

Установка Sudo (команда sudo не найдена)

Пакет sudo предустановлен в большинстве дистрибутивов Linux.

Если sudo не установлен, вы можете легко установить его с помощью менеджера пакетов вашего дистрибутива.

Установите Sudo на Ubuntu и Debian


Установите Sudo на CentOS и Fedora


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

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

В дистрибутивах на основе RedHat, таких как CentOS и Fedora, имя группы sudo wheel . Чтобы добавить пользователя в группу, выполните:


В Debian, Ubuntu и их производных членам группы sudo предоставляется доступ sudo:


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

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

Например, чтобы позволить пользователю linuxize запускать только mkdir команду sudo, введите:


и добавьте следующую строку:

В большинстве систем visudo команда открывает /etc/sudoers файл в текстовом редакторе vim. Если у вас нет опыта работы с vim, проверьте нашу статью о том, как сохранить файл и выйти из редактора vim .

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

Как использовать sudo

Синтаксис sudo команды следующий:

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

Чтобы использовать sudo, просто добавьте к команде префикс sudo :


Где command команда, для которой вы хотите использовать sudo.

Sudo прочитает /etc/sudoers файл и проверит, предоставляется ли пользователю, вызывающему программу, с помощью команды sudo. При первом использовании sudo в сеансе вам будет предложено ввести пароль пользователя, и команда будет выполнена от имени пользователя root.

Например, чтобы перечислить все файлы в /root каталоге, вы бы использовали:


Тайм-аут пароля

По умолчанию sudo попросит вас ввести пароль еще раз через пять минут бездействия sudo. Вы можете изменить время ожидания по умолчанию, отредактировав sudoers файл. Откройте файл с помощью visudo :

Установите время ожидания по умолчанию, добавив строку ниже, где 10 время ожидания указано в минутах:

Если вы хотите изменить метку времени только для конкретного пользователя, добавьте следующую строку, где user_name - это рассматриваемый пользователь.

Запустите команду как пользователь, отличный от Root

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

-u Опция позволяет выполнить команду в качестве указанного пользователя.

В следующем примере мы используем sudo для запуска whoami команды от имени пользователя «richard»:


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


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

Одним из решений является вызов новой оболочки от имени пользователя root с помощью sudo sh -c :


Другой вариант - передать вывод как обычный пользователь в tee команду, как показано ниже:


Вывод

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

Если вы создали нового пользователя в Ubuntu, и пытаетесь от его имени использовать систему, то при попытке выполнения команды sudo можете столкнуться с ошибкой: "user is not in the sudoers file this insident will be reported".

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

Почему возникает ошибка user is not in the sudoers file?


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


Исправление ошибки с помощью root

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

Начнем с более простого варианта, на тот случай, если у вас все-таки есть доступ к системе от имени пользователя root. Войдите от имени пользователя, у которого есть права, например, можно нажать Ctrl+Alt+T запустить утилиту su и ввести пароль:

В большинстве случаев в файле sudoers настроено так, что утилиту могут использовать все пользователи из группы wheel или sudo. Поэтому достаточно добавить нашего пользователя в эту группу. Для этого используйте команду usermod.

usermod -a -G wheel имя_пользователя

usermod -a -G sudo имя_пользователя

Вы также можете добавить нужную настройку для самого пользователя в файл sudoers, для этого добавьте в конец файла такую строку:

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

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

%wheel ALL = (ALL) ALL

Или для группы sudo:

%sudo ALL = (ALL) ALL


Возможно, её будет достаточно расскоментировать, убрать решетку, которая расположена перед ней. После этого ошибка user is not in the sudoers file исчезнет и вы сможете использовать sudo. Более подробно про это все вы можете прочитать в статье настройка sudo.

Исправление ошибки с помощью режима восстановления

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

Откроется редактор меню загрузки. В нем найдите строку:

И в конец добавьте init=/bin/bash. Должно получиться вот так:

linux vmlinuz. init=/bin/bash

Дальше вы загрузитесь в оболочку /bin/bash с правами суперпользователя и от туда уже сможете выполнить все выше приведенные команды, например, добавить пользователя sudoers, добавлением его в группу wheel:

usermod -a -G wheel имя_пользователя

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

Выводы

В этой статье мы рассмотрели что делать, если вы получаете ошибку user is not in the sudoers file, а также как добавить пользователя в sudoers ubuntu чтобы ее избежать. Если у вас остались вопросы, спрашивайте в комментариях!

, и теперь я не могу использовать команду sudo из-за этой ошибки:

sudo: должен быть установлен root root

И поскольку я читаю это, значит, владелец этого файла /usr/bin/sudo не является корневым. Это мой пользователь сейчас из-за chown в папке /usr .

На многих форумах и блогах люди предлагают сделать это как root:

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

Итак, могу ли я вернуть команду sudo ?

Изменить: мой Ubuntu находится под Paralells на моей Mac OS X.

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

Самый быстрый способ - переустановка ОС или восстановление из резервной копии.

В Ubuntu или аналогичном, по умолчанию нет пароля root (учетная запись отключена), поэтому вы не можете su .

Я предлагаю, чтобы самым простым способом было загрузить LiveCD для вашего дистрибутива, смонтировать диск и изменить права доступа к файлу с помощью chmod , который вы указали оттуда.

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

Однако очень FEW должен быть 4111 . Этот дополнительный - это специальные разрешения, но это делает его исполняемым как root даже при запуске в качестве пользователя! Только sudo и несколько команд должны иметь этот бит разрешения. Если вы не запускали chmod , чтобы начать с вас, вероятно, не нужно исправлять это вообще , все разрешения должны быть уже правильными. Не запускайте большую операцию chmod , не зная, какие должны быть все разрешения.

В режиме восстановления Ubuntu введите следующие команды:. Это исправлено для меня.

Надеюсь, что это исправит вашу проблему. (или кто-то еще)

Это намного проще, чем другие ответы. Нет необходимости форматировать, перезагружать или использовать Live CD.

  • Используя команду 1 (su root) , мы меняем пользователя на root без использования sudo.
  • Используя команду 2 (chown root: root /usr /bin /sudo & & chmod 4755 /usr /bin /sudo) , мы фиксируем разрешения /права собственности на sudo.
  • Используя команду 3 (exit) , мы возвращаемся к исходному пользователю.

Я тестировал этот метод на Mint Linux. Какая система ubuntu. Сообщите мне, что этот метод не работает ни на одной другой ОС. Будет соответствующим образом обновлен ответ.

Чтобы войти в систему как root, без su или sudo, вы можете использовать pkexec:

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

Казалось бы, такая небольшая команда, с минимумом возможностей и максимально простым использованием, но на самом деле она может намного больше. В этой статье мы рассмотрим как выполняется настройка sudo в linux для контроля доступа к функциям системы и возможностей пользователя.

Как работает sudo?

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

Имя команды означает substitute user do или super user do. Утилита позволяет запускать программы от имени другого пользователя, но чаще всего от имени корневого. Утилита была разработана еще в 1980 году Бобом Когшелом и Клиффом Спенсером. За это время сменилось много разработчиков и было добавлено много функций.

Работает sudo благодаря флагу доступа SUID. Если этот флаг установлен для программы, то она выполняется не от имени того пользователя который ее запустил, а от имени владельца, учитывая что файл sudo принадлежит, то утилита выполняется от имени root. Затем она читает свои настройки, запрашивает пароль пользователя и решает можно ли ему разрешать выполнение команд от имени администратора. Если да, то выполняется переданная в параметре команда.

Теперь, когда вы знаете теорию, давайте рассмотрим как настроить sudo в Linux.

Настройка sudo в Linux

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

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

Вы также можете указать текстовый редактор, в котором вы хотите редактировать файл настройки:

Дальше мы рассмотрим самые интересные настройки, которые вы можете задать в этом файле. Но сначала давайте рассмотрим основной синтаксис файла. Он состоит из двух типов строк, это псевдонимы, которые позволяют создавать списки пользователей и флагов, а также сами правила, которые задают как будет вести себя команда sudo. Синтаксис алиасов выглядит вот так:

тип имя_алиаса = элемент1, элемент2, элемент3

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

Описание разрешений для пользователей имеет немного другой синтаксис:

пользователь хост = (другой_пользователь:группа) команды

Пользователь указывает пользователя или группу, для которых мы создаем правило, хост - компьютер, для которого будет действовать это правило. Другой пользователь - под видом какого пользователя первый может выполнять команды, и последнее - разрешенные команды. Вместо любого из параметров может использоваться алиас. А теперь настройка sudo в Debian и других дистрибутивах.

Основные параметры

Алиас Defaults позволяет задать стандартные параметры для работы утилиты, их мы и рассмотрим в этом разделе. Начинается такой алиас со слова Defaults, дальше идет имя флага. Если перед именем есть символ !, это значит, что флаг нужно включить, в обратном случае выключить:

Отключаем введение при первом использовании:

sudo

Суперпользователь не может выполнять sudo:

sudo1

Теперь если вы попытаетесь выполнить sudo sudo ничего не сработает:

sudo2

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

sudo3

Сохранять список групп текущего пользователя:

sudo4

Запрашивать пароль суперпользователя вместо пароля пользователя:

sudo5

sudo6

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

Задать количество попыток ввода пароля перед тем, как sudo прекратит работу, по умолчанию - 3:

sudo7

sudo8

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

sudo9

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

sudo9

Defaults passprompt="Ваш пароль:"

sudo12

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

Вы можете записывать в лог все попытки подключения к sudo:

sudo10

Затем пробуем проверить работу лога:

sudo cat /var/log/sudo

sudo11

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

Настройка пользователей sudo

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

ALL ALL = (ALL) ALL

sudo13

Такая команда очень небезопасна, она разрешает всем и все. Первое ALL - разрешить всем пользователям, второе ALL - для всех хостов, третье ALL - разрешить вход под любым пользователем и четвертое - разрешить выполнять любою команду. Но куда более часто используется другая конструкция:

%wheel ALL = (ALL) ALL

sudo14

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

%wheel ALL = (root) ALL

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

%wheel ALL = (root:admins) ALL

sudo15

Это значит что можно выполнить команду от имени root или другого пользователя из группы admins. Еще мы можем указать команды, которые может выполнять пользователь. Например:

%wheel ALL = (root) /bin/mount, /bin/umount

sudo17

Пользователь может выполнять только команды mount и umount от имени суперпользователя. Теперь сделаем еще интереснее, пользователь может выполнять mount и umount без пароля, а все остальные команды с паролем:

%wheel ALL = (root) ALL
%wheel ALL = (root) NOPASSWD: /bin/mount, /bin/umount

Также можно ограничивать пользователям по хостах, например, разрешаем использование sudo только из host1:

%wheel host1 = (root) ALL

Осталось еще рассмотреть как применять псевдонимы. Псевдонимы могут быть таких типов:

  • User_Alias - псевдоним пользователей, которые будут использовать sudo;
  • Runas_Alias - псевдоним пользователей, от имени которых будут выполняться команды;
  • Host_Alias - псевдоним хоста;
  • Cmnd_Alias - псевдоним команд;

Например, создадим четыре псевдонима и применим их в нашем правиле:

User_Alias Users = user1,user2,user3
Runas_Alias Admins = root,admin
Host_Alias Hosts = host1,host2
Cmd_Alias Cmds = /bin/mount,/bin/umount

Далее применяем все это в правиле:

Users Hosts = (Admins) Cmds

Это значит, что пользователи из списка Users смогут выполнять команды Cmds от имени пользователей Amdins на хостах Hosts.

Еще осталось сказать несколько слов о флагах. Флаг NOPASSWD говорит, что не нужно запрашивать пароль при выполнении этого правила. Например, разрешить всем пользователям выполнять команду mount с sudo без пароля:

ALL ALL = (root) NOPASSWD: /bin/mount

Также можно запретить выполнять именно эту команду вообще с помощью флага NOEXEC:

ALL ALL = (root) NOEXEC /bin/mount

Вы можете проверить правильно ли была проведена настройка файла /etc/sudoers и посмотреть все созданные правила с помощью команды:

sudo18

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

Выводы

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

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