Как запустить программу от другого пользователя linux

Содержание

Библиотека сайта rus-linux.net

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

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

В этом коротком руководстве мы расскажем, как использовать команду sudo.

Инсталляция SUDO

Пакет sudo установлен по умолчанию в подавляющем большинстве дистрибутивов GNU/Linux, но не во всех. Есть и такие, где он установлен, но вам об этом не сообщается. Мы расскажем, как его увидеть.

Чтобы проверить, установлен ли пакет sudo в вашей системе, откройте консоль, введите sudo и нажмите Enter. Если пакет sudo у вас установлен, система покажет краткое справочное сообщение, в противном случае вы увидите что-то вроде sudo command not found.

Linux для Начинающих — Пользователи и Группы


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

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

По умолчанию в большинстве дистрибутивов GNU / Linux для того, чтобы предоставить пользователю доступ к sudo, достаточно добавить этого пользователя в группу sudo, определенную в файле sudoers в каталоге /etc. Члены этой группы могут выполнять любую команду от имени root. Название группы может варьироваться от одного дистрибутива к другому. В дистрибутивах, основанных на RedHat, таких как CentOS и Fedora, имя группы sudo — wheel. Чтобы добавить пользователя к эту группу, можно выполнить команду:

usermod -aG wheel Pedro

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

usermod -aG sudo Pedro

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

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

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

sudo visudo

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

alumno ALL=/bin/mkdir

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

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

alumno ALL=(ALL) NOPASSWD: ALL

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

sudo Опции.. Команда

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

#3. Пользователи, группы, права доступа / Linux

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

sudo comando

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

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

Например, для отображения всех файлов в каталоге /root можно использовать команду:

sudo ls /root

Время ожидания пароля

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

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

Defaults timestamp_timeout=15

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

Defaults:user_name timestamp_timeout=15

Запуск команды sudo от имени пользователя, отличного от пользователя root

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

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

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

Читайте также:
Характеристика программ по физическому воспитанию

sudo -u alumno whoami

Команда whoami напечатает имя пользователя, который выполняет эту команду:

Alumno

Как выполнять перенаправление с помощью sudo

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

sudo echo «test» > /root/file.txt
bash: /root/file.txt: Permiso denegado

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

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

sudo sh -c ‘echo «test» > /root/file.txt’

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

echo «test» | sudo tee /root/file.txt

Sudo — очень мощная команда, но при обращении с ней нужно быть очень осторожным.

  • Как задать время сессии Sudo
  • Использование sudo в Ubuntu для начинающих пользователей
  • Sudo или не sudo? — вот в чем вопрос!
  • Приемы работы в Ubuntu. Глава 7: Безопасность
  • В чем разница между sudo и su
  • Организация безопасного редактирования системных файлов с помощью sudoedit в Linux
  • Фундаментальные основы Linux. Часть VII. Управление локальными учетными записями пользователей

Источник: rus-linux.net

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

Что такое sudo

Что означает sudo. Как запустить команду с sudo

Пожалуй самой часто используемой программой при системном администрировании (если вы работаете под обычным пользователем, а не под root), является sudo. Главное назначение sudo — это выполнить команду от имени другого пользователя, обычно от root. Смысл выполнения команды от root в том, что у него повышенные права доступа и, применяя sudo, обычный пользователь может выполнить те действия, на которые у него недостаточно прав.

Простейший и самый распространённый вариант запуска команд с sudo:

sudo КОМАНДА

Если у КОМАНДЫ есть опции, аргументы, то для sudo не нужно делать какие-то дополнительные действия, например, помещать КОМАНДУ с опциями в кавычки или что-то ещё. Поставьте sudo и запускайте КОМАНДУ как обычно.

К примеру, я хочу выполнить:

ls -l /root

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

ls: невозможно открыть каталог ‘/root’: Отказано в доступе

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

sudo ls -l /root

Как установить sudo. Ошибка «-bash: sudo: command not found». Как создать пользователя с sudo

По умолчанию в Debian и некоторых других дистрибутивах может отсутствовать пакет sudo. О том, как выполнить установку sudo, если вы столкнулись с ошибкой «-bash: sudo: command not found», а также о том, как создавать пользователей с правом выполнять команды с sudo смотрите «Ошибка «-bash: sudo: command not found» — не найдена команда sudo (РЕШЕНО)».

Что использовать sudo или su?

У программы su похожее назначение: запустить команду с подстановкой ID другого пользователя и группы. То есть одинакового результата можно добиться используя как sudo, так и su.

Различия sudo и su в следующем:

1. При использовании su необходимо сообщать пароль root обычному пользователю (но это можно обойти — подробности в этом разделе чуть ниже). При использовании sudo пользователь вводит свой собственный пароль.

2. У обеих команд есть интерактивный режим, то есть можно как бы выполнить вход от имени другого пользователя. Также обе программы, sudo и su, позволяют выполнять команды без интерактивного режима. В su интерактивный режим запускается по умолчанию (если не указана команда для выполнения):

В sudo для входа в интерактивный шелл нужно использовать опцию -i:

sudo -i

Точнее говоря, всё немного сложнее, опция -i в sudo означает запустить оболочку входа в систему от имени указанного пользователя; также можно задать команду. Сравните:

sudo pwd /home/mial
sudo -i pwd /root

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

3. Использование sudo требует настройки, а именно: 1) добавление пользователя в группу, имеющую право использовать эту программу; 2) установка разрешений (перечисление команд, которые может запускать пользователь с sudo и т. д. При некоторых настройках, если пользователь не упомянут в конфигурационных файлах sudo, то он не может ей пользоваться. Программа su не требует настройки для каждого пользователя.

4. Разное отношение с окружением выполнения: смена текущей рабочей директории при входе в интерактивный режим su, сохранение текущей рабочей директории при выполнении отдельных команд с sudo и su. Сравните переменную окружения $HOME в команде

sudo echo $HOME /home/mial

со значением $HOME в команде:

su -c ‘echo $HOME’ /root

5. Некоторые конструкции оболочки работают с sudo не так, как вы ожидаете. Смотрите в качестве примера статью «Как использовать echo вместе с sudo». С su такой проблемы нет.

На самом деле, для подавляющего числа случаев использования этих программ, каких-то кардинальных различий между sudo и su нет, то есть вы можете выбрать любую из них для выполнения команды с повышенными привилегиями или от другого пользователя. Чаще используется sudo только по той причине, что её синтаксис короче: достаточно добавить sudo перед выполняемой командой, что касается su, то запуск одной команды требует конструкции su -c ‘КОМАНДА’.

Читайте также:
Сколько платят за участие в программе 60 минут участникам

Но если нужно выполнить несколько команд с повышенными привилегиями, то достаточно войти в интерактивную консоль su:

И затем перед командами уже ненужно ставить sudo.

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

sudo su —

Или использовать интерактивный режим самой sudo:

sudo -i

6. su не требует установки

Утилита su присутствует даже в минимальных установках Linux (в пакете util-linux, который является зависимостью для многих программ). Программа sudo может отсутствовать по умолчанию в некоторых дистрибутивах, например, в Debian.

Как выполнить команду от имени другого пользователя

Запуск sudo:

sudo КОМАНДА

означает выполнить КОМАНДУ от имени пользователя по умолчанию. Таким пользователем обычно является root, но, на самом деле, может быть настроен другой пользователь по умолчанию.

Если нужно выполнить команду от имени иного, не root пользователя, то используйте опцию -u:

sudo -u ПОЛЬЗОВАТЕЛЬ КОМАНДА

Как создать пользователя с sudo

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

Чтобы создать пользователя с sudo в Debian, Linux Mint, Ubuntu, Kali Linux и их производных выполните команду вида:

useradd -m -G sudo -s /bin/bash -c «КОММЕНТАРИЙ» ПОЛЬЗОВАТЕЛЬ

  • -m означает создать домашнюю директорию пользователя, если она не существует
  • -G sudo означает добавить пользователя в группу sudo
  • -s /bin/bash указывает оболочку входа пользователя
  • -c «КОММЕНТАРИЙ» указывает комментарий, который будет хранится в файле аккаунта — можно пропустить эту опцию
  • ПОЛЬЗОВАТЕЛЬ — это имя пользователя

useradd -m -G sudo -s /bin/bash -c «Administrative User» admin

В Arch Linux, BlackArch и их производных для создания пользователя с sudo выполните команду вида:

useradd -m -g users -G wheel,video -s /bin/bash -c «КОММЕНТАРИЙ» ПОЛЬЗОВАТЕЛЬ

Обратите внимание, что в Arch Linux группа, дающее право на выполнение команд sudo, называется wheel, а не, собственно, sudo. Также мы добавили пользователя сразу в две группы, а не в одну, имя второй группы video. Если вы создаёте пользователя на системе без графического окружения, например, на безголовом сервере, то добавлять в группу video не нужно.

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

useradd -m -G wheel -s /bin/bash -c «КОММЕНТАРИЙ» ПОЛЬЗОВАТЕЛЬ

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

passwd ПОЛЬЗОВАТЕЛЬ

Конфигурационный файл sudo

Программа sudo считывает конфигурацию из файла /etc/sudoers. Если в файле /etc/sudoers раскомментировать директиву

includedir /etc/sudoers.d

то дополнительно настройки будут считываться из всех файлов в директории /etc/sudoers.d.

Не рекомендуется напрямую править файл /etc/sudoers, рекомендуется использовать команду

visudo

которая откроет файл для редактирования. Кроме прочих функций, данная программа проверит синтаксис, и если в нём присутствует ошибка, то файл не будет сохранён.

При запуске visudo по умолчанию будет открыт файл /etc/sudoers. С помощью опции -f можно указать расположение файла в другом месте, например в /etc/sudoers.d.

Как разрешить пользователи выполнять только определённые команды с sudo

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

В файл /etc/sudoers нужно добавить строку вида:

Имя_пользователя Имя_машины=(Реальный_пользователь:Группа) команда

В этой строке значения следующие:

  • Имя_пользователя: Это тот пользователь, кто инициировал выполнение команды с sudo
  • Имя_машины: Это имя хоста, где будет действительна команда sudo. Полезно если у вас много хостовых машин.
  • (Реальный_пользователь): Тот пользователь, от чьего имени будет выполнена команда.
  • Группа: группа, к которой принадлежит пользователь.
  • команда: команда или набор команд, разрешённых для запуска с sudo этому Пользователю.

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

admin ALL=(ALL:ALL) ALL

Другой вариант, я хочу разрешить пользователю admin выполнять только команды /home/admin/backup.sh и /usr/bin/apt, и выполнять их он может только от root, тогда мне нужно добавить строку:

admin ALL=(root:ALL) /home/admin/backup.sh,/usr/bin/apt

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

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

%sudo ALL=(ALL:ALL) ALL

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

%wheel ALL=(ALL) ALL # ИЛИ %wheel ALL=(ALL:ALL) ALL

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

#%sudo ALL=(ALL:ALL) ALL

Как узнать, какие sudo полномочия имеются у пользователя

Запуск команд от имени другого пользователя через Sudo в системах Linux

Мануал

Автор cryptoparty На чтение 5 мин Опубликовано 11.04.2022

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

Все пользователи имеют права sudo.

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

Как бы вы это сделали?

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

Читайте также:
Установка программы Яндекс такси

Да, это один из способов сделать это.

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

Читайте дальше, чтобы узнать об этом.

Для целей этого руководства я создал две учетные записи пользователей “itsecforu” и “itisgood” на своей тестовой машине AlmaLinux 8.

Я собираюсь использовать “itsecforu” в качестве текущего пользователя и “itisgood” в качестве целевого пользователя.

Я хочу, чтобы пользователь “itsecforu” мог выполнять любую команду от имени пользователя “itisgood” на любом хосте, не входя в систему под именем “itisgood”

Запуск команд от имени другого пользователя через Sudo

В настоящее время я вошел в систему как пользователь “itsecforu”.

Позвольте мне показать вам текущего пользователя, вошедшего в систему, с помощью команды whoami.

$ whoami itsecforu

Теперь я собираюсь выполнить простую команду “echo” с помощью sudo в качестве целевого пользователя “itisgood”, войдя в систему под именем “itsecforu”:

$ sudo -u itisgood bash -c ‘echo «My Username is $USER, and my user ID is $UID»‘

Вам будет предложено ввести пароль текущего пользователя (в данном случае “itsecforu”). После аутентификации команда echo будет запущена от имени пользователя “itisgood” и отобразит имя пользователя и идентификатор пользователя “itisgood”.

[sudo] password for itsecforu: My Username is itisgood , and my user ID is 1001

На самом деле мы только что выполнили команду “echo” от имени пользователя “itisgood”, в то время как мы вошли в систему под именем “itsecforu”.

Вот почему вы видите имя пользователя и идентификатор пользователя “itisgood”, но не “itsecforu”.

Давайте проверим, правильно ли указан uid пользователя “itisgood” с помощью команды id.

$ id itisgood uid=1001(itisgood) gid=1001(itisgood) groups=1001(itisgood),10(wheel)

Здесь флаг -u используется для запуска заданной команды от имени другого пользователя (в данном случае itisgood), а bash -c используется для указания имени команды.

Вы должны указать команду в одинарной кавычке.

Если вы не используете опцию bash -c, команда echo вернет имя пользователя и uid текущего пользователя вместо целевого пользователя.

$ sudo -u itisgood echo «My Username is $USER, and my user ID is $UID» My Username is itsecforu, and my user ID is 1000

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

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

Потому что команда echo не требует пароля sudo.

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

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

$ sudo -u itisgood bash -c ‘sudo dnf —refresh update’
[sudo] password for itsecforu: [sudo] password for itisgood : AlmaLinux 8 — BaseOS 344 B/s | 4.3 kB 00:12 AlmaLinux 8 — AppStream 388 B/s | 4.7 kB 00:12 AlmaLinux 8 — Extras 316 B/s | 3.9 kB 00:12 Dependencies resolved. Nothing to do. Complete!

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

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

Потому что команда echo не требует пароля sudo.

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

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

$ sudo -u itisgood bash -c ‘~/backup_script_name’

Запуск команд без пароля Sudo

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

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

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

Для этого сначала найдите путь к команде dnf с помощью команд which или whereis.

$ which dnf /usr/bin/dnf
$ whereis dnf dnf: /usr/bin/dnf /etc/dnf /usr/share/man/man8/dnf.8.gz

Как вы видите, путь к исполняемой команде dnf – /usr/bin/dnf.

Теперь отредактируйте файлы /etc/sudoers с помощью команды:

$ sudo visudo

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

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

itisgood ALL=NOPASSWD:/usr/bin/dnf

Сохраните файл и выйдите.

Теперь пользователь “itisgood” может выполнять команды dnf без пароля sudo.

$ sudo -u itisgood bash -c ‘sudo dnf —refresh update’ [sudo] password for itsecforu: AlmaLinux 8 — BaseOS 358 B/s | 4.3 kB 00:12 AlmaLinux 8 — AppStream 324 B/s | 4.7 kB 00:14 AlmaLinux 8 — Extras 302 B/s | 3.9 kB 00:13 Dependencies resolved. Nothing to do. Complete!

Видите? Нам не нужно вводить пароль sudo для “itisgood”

Отказ от ответственности: Вы должны быть очень осторожны при применении этого метода. Этот метод может быть использован как в продуктивных, так и в разрушительных целях. Например, если вы позволите пользователям выполнять команду ‘rm’ без пароля sudo, они могут случайно или намеренно удалить важные файлы. Не делайте этого, если это действительно необходимо.
.

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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru