Linux echo отказано в доступе

Обновлено: 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.

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

Например, моя мышь нервная и вялая, поэтому я хочу отключить опрос:

Мне предлагается ввести пароль, а затем получить:

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

И снова система ответила:

Перенаправление вывода (через > оператора) выполняется оболочкой, а не echo . Вы должны войти в систему как root

Тогда вы можете использовать перенаправление

В противном случае вы можете запустить строку bash с помощью sudo

Вы не можете запустить эхо с Sudo? Что насчет результата, который я получил: saji@laptop:

$ sudo echo "Hi" [sudo] password for saji: Hi

Вы можете написать в файл, эхо "что-то"> Somewhre. Это использует трубу .. В этом проблема. Хорошо, если это так, пожалуйста, обновите свой ответ, чтобы отразить, что запуск echo является проблемой только в этом случае. Вы не можете просто запустить встроенную оболочку echo как sudo, если вы не сделаете что-то подобное sudo bash -c 'echo …' ; однако системы POSIX обычно предоставляют внешнюю echo команду, такую ​​как /bin/echo в OS X, которую sudo может выполнить без rigamarole. Таким образом, echo команда, которую вы обычно запускаете, и echo команда, которую вы запускаете с помощью sudo, вероятно, являются двумя разными, но похожими командами.

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

вызывает оболочку sudo echo "options drm_kms_helper poll=N" , которая выполняет sudo команду с echo "options drm_kms_helper poll=N" командной строкой

Судо запрашивает пароль, открывает суперпользователя оболочку и вызывает echo "options drm_kms_helper poll=N" , который запускает echo команду передачи его "options drm_kms_helper poll=N"

echo, работающий с root привилегиями, выводит строку в стандартный вывод.

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

(*) - хотя приведенная выше последовательность помогает понять, почему команда терпит неудачу, в действительности все происходит несколько не по порядку: исходная оболочка замечает перенаправление и пытается открыть файл для записи перед вызовом sudo . команды. При открытии файла происходит сбой, оболочка даже не вызывает команду, которая должна была записать файл (спасибо @PanosRontogiannis за это).

Новые пользователи довольно часто сталкиваются с такой ошибкой, как ошибка отказано в доступе Linux. Если вы только что перешли с Windows, то можете еще не знать всех особенностей операционной системы Linux и почему возникает такая проблема.

В этой статье мы рассмотрим причины ошибки access denied linux, а также как ее обойти.

Ошибка отказано в доступе Linux

Наиболее часто такая ошибка встречается, в таких случаях:

  • Вы пытаетесь выполнить команду в терминале;
  • Вы пытаетесь примонтировать внешний носитель с помощью файлового менеджера;
  • Вы пытаетесь запустить системный сервис и находите такую ошибку в логе.

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

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

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


Но эта же команда нормально отработает нормально при использовании команды sudo:


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

Но нет, сервисы не только запускаются от имени суперпользователя, но потом, для увеличения безопасности они меняют пользователя на обычного, не привелигированного. Например, Apache работает от имени пользователя apache или www-data. Уже от имени этого пользователя программа пытается получить доступ к файловой системе.

Если нужная папка не доступна этому пользователю для чтения то вы получите ошибку access denied linux. Обычно, в логе программа сообщает какая папка или файл нужен когда происходит ошибка.

Вам просто нужно поменять на него права с помощью утилиты chmod или изменить владельца chown. Причем, нужно чтобы ко всем подкаталогам на пути к целевому каталогу был доступ у программы. Например, нельзя так чтобы права на чтение /home/ не было, а на /home/user/ было. Так не пройдет.

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

sudo chmod 755 /путь/к/файлу

Или для смены прав для всех файлов в каталоге и самого каталога:

sudo chmod -R 755 /путь/к/каталогу

Или вы можете изменить владельца, обычно, это более безопасная и распространенная практика:

sudo chown пользователь /путь/к/файлу
$ sudo chown -R пользователь /путь/к/каталогу


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

sudo ps aux | grep имя_сервиса


После того как вы установите правильные права, ошибка отказано в доступе linux больше не будет встречаться.

Выводы

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

Что нужно сделать чтобы терминал запускался с правами root?

Рассмотрим несколько вариантов

1. Переключение на пользователя root

В последних версиях Kali Linux пользователь по умолчанию изменился: раньше им был root, а теперь обычный пользователь.

Если вы хотите вернуться к прежнему варианту, то есть сделать пользователя root основным пользователем, то это возможно.

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


Теперь при включении компьютера вы можете войти как root:


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


2. Открыть сессию root

Запустите терминал с обычными правами и выполните в нём:

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


Ещё один вариант запустить сессию с повышенными привилегиями, выполнить такую команду:

Чтобы завершить сессию root, нажмите Ctrl+d

3. Использование sudo, в том числе с внутренними командами Bash

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

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

Команда должна выполняться с повышенными привилегиями, что должно дать права на запись в файл. Но в этом случае ни > , ни >> не получится использовать, в том числе как root. И будет выведена ошибка вида:

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

Либо с помощью команды tee. Используйте её с опциями --append или -a — это важно, без этих опций файл будет полностью перезаписан. Пример:

Приведённая команда допишет новую строку в существующий файл.

Но особенность команды tee в том, что она не только допишет файл, но ещё и выведет добавленную строку в консоль. Если вы не хотите, чтобы данные вновь возвращались в консоль, то сделайте редирект вывода на /dev/null.

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

Ещё один вариант использования echo для записи или добавления в файл от имени администратора:

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

4. Использование sudo без пароля

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

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