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

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

Имеется следующая ситуация. Есть пользователь user, у которого нет прав суперпользователя. Есть апач, который является классическим www-data. Конечно есть root-суперпользователь. Задача: www-data должен иметь право запускать скрипт /var/www/example/script3.sh (user:user, 700) без пароля. После некоторых поисков вышел на решение с использованием sudoers, которое отлично сработало на 2 других скриптах, которые апач запускает как root. Но это решение не работает в случае с обычным пользователем. Содержание sudoers:

# Работает отлично: www-data ALL=(root) NOPASSWD:/var/www/example/script1.sh www-data ALL=(root) NOPASSWD:/var/www/example/script2.sh # Не работает www-data ALL=(user) NOPASSWD:/var/www/example/script3.sh 

1 ответ 1

exec('/var/www/example/script3.sh'); 

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

exec('sudo -u user /var/www/example/script3.sh'); 

Как вариант, по необходимости можно также сделать отдельный proxy-скрипт,
/var/www/example/scrip3-proxy.sh:

#!/bin/sh sudo -u user /var/www/example/script3.sh 
exec('/var/www/example/script3-proxy.sh'); 

Источник

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

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

Иногда, просто необходимо запустить команду от другого пользователя. И существует несколько способов, как это можно сделать. Я расскажу о них в своей статья «Запустить команду от другого пользователя в Unix/Linux».

Запустить команду от другого пользователя в Unix/Linux — способ 1

И так, можно использовать утилиту SUDO. Рассмотрим пример:

$ sudo -H -u Your_another_user -c 'ping linux-notes.org'
  • -H YOUR_HOME: Задает HOME (Переменное окружение для хома конкретного юзера) и по умолчанию — это root.
  • -u YOUR_USER: Задаем пользователя от которого будет выполнена команда.
  • -c YOUR_COMMAND: Служит опцией для ввода команды.

Запустить команду от другого пользователя в Unix/Linux — способ 2

Можно использовать утилиту SU. И сейчас приведу несколько примеров.

Логин в root юзера

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

Запустить команду как root юзер

# su - root -c "YOUR_COMMAND_HERE"
su - -c "YOUR_COMMAND_HERE arg1"

Выполнить команду от другого пользователя с помощью su

# su -c "/opt/solr/bin/solr create -c test_solr_core -n solrconfig.xml" -s /bin/sh solr Created new core 'test_solr_core'
$ su another_user -c 'ping linux-notes.org'
$ su - YOUR_USER -c "YOUR_COMMAND_HERE"
  • — — Будет имитировать логин указанного пользователя.
  • -c — Служит для указания команды для выполнения (для указанного юзверя).

Запустить команду от другого пользователя в Unix/Linux — способ 3

И так, можно использовать утилиту runuser. Команда runuser запускает оболочку с заменяющими идентификаторами пользователей и групп. Эта команда полезна только когда вы залогинены как пользователь root. Синтаксис выглядит следующим образом:

# runuser -l YOUR_USER -c 'YOUR_COMMAND_HERE'

Как пример, я покажу следующую строку:

# runuser -l nginx -c 'service nginx start'

PS: Для использования команды runuser пароль не требуется, и он должен запускаться только пользователем root.

  • -l: Создаст оболочку для входа в систему, используя файл runuser-l PAM вместо стандартного.
  • -g: Указывает на основную группу.
  • -G: Указывает на дополнительную группу.
  • -c: Собственно, служит для указания команды.
  • –session-command=COMMAND: Передает одну команду в оболочку с опцией «-c» и не создает новый сеанс.
  • -m: Не сбрасывайте переменные среды (ENV).
Читайте также:  Прозрачность окон linux mint

Вот и все, тема «Запустить команду от другого пользователя в Unix/Linux» завершена.

5 thoughts on “ Запустить команду от другого пользователя в Unix/Linux ”

> $ sudo -H -u Your_another_user bash -c ‘ping linux-notes.org’ Смешались sudo и bash: $ sudo -u user echo a
a $ bash -c ‘echo a’
a

Источник

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

Мануал

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

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

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

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

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

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

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

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

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

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

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

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

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

Теперь я собираюсь выполнить простую команду “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 используется для указания имени команды.

Читайте также:  Linux сортировка вывода команды

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

Если вы не используете опцию 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.

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

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

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

Внимание: Обратите внимание, что вы не должны вручную редактировать файл 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.

Читайте также:  Linux kernel sources centos

Мы также узнали, как можно отключить запрос пароля sudo для определенных пользователей при выполнении определенной команды (команд), изменив файл sudoers.

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

Вы всегда должны быть осторожны при тестировании подобных советов по Linux.

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!

  • Аудит ИБ (49)
  • Вакансии (12)
  • Закрытие уязвимостей (105)
  • Книги (27)
  • Мануал (2 306)
  • Медиа (66)
  • Мероприятия (39)
  • Мошенники (23)
  • Обзоры (820)
  • Обход запретов (34)
  • Опросы (3)
  • Скрипты (114)
  • Статьи (352)
  • Философия (114)
  • Юмор (18)

Anything in here will be replaced on browsers that support the canvas element

OpenVPN Community Edition (CE) – это проект виртуальной частной сети (VPN) с открытым исходным кодом. Он создает защищенные соединения через Интернет с помощью собственного протокола безопасности, использующего протокол SSL/TLS. Этот поддерживаемый сообществом проект OSS (Open Source Software), использующий лицензию GPL, поддерживается многими разработчиками и соавторами OpenVPN Inc. и расширенным сообществом OpenVPN. CE является бесплатным для […]

Что такое 404 Frame? Большинство инструментов для взлома веб-сайта находятся в 404 Frame. Итак, что же представляют собой команды? Вы можете отдавать команды, используя повседневный разговорный язык, поскольку разработчики не хотели выбирать очень сложную систему команд. Команды Команды “help” / “commands” показывают все команды и их назначение. Команда “set target” – это команда, которая должна […]

В этой заметке вы узнаете о блокировке IP-адресов в Nginx. Это позволяет контролировать доступ к серверу. Nginx является одним из лучших веб-сервисов на сегодняшний день. Скорость обработки запросов делает его очень популярным среди системных администраторов. Кроме того, он обладает завидной гибкостью, что позволяет использовать его во многих ситуациях. Наступает момент, когда необходимо ограничить доступ к […]

Знаете ли вы, что выполняется в ваших контейнерах? Проведите аудит своих образов, чтобы исключить пакеты, которые делают вас уязвимыми для эксплуатации Насколько хорошо вы знаете базовые образы контейнеров, в которых работают ваши службы и инструменты? Этот вопрос часто игнорируется, поскольку мы очень доверяем им. Однако для обеспечения безопасности рабочих нагрузок и базовой инфраструктуры необходимо ответить […]

Одной из важнейших задач администратора является обеспечение обновления системы и всех доступных пакетов до последних версий. Даже после добавления нод в кластер Kubernetes нам все равно необходимо управлять обновлениями. В большинстве случаев после получения обновлений (например, обновлений ядра, системного обслуживания или аппаратных изменений) необходимо перезагрузить хост, чтобы изменения были применены. Для Kubernetes это может быть […]

Источник

Оцените статью
Adblock
detector