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

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

Есть в системе два пользователя: user1, user2. Есть script.sh. Задача: работая под user1 запустить скрипт от имени user2.

Да, знаю про su -c. Но оно просит пароль. А основная проблема это то, что есть еще main_script.sh откуда и будет вызываться script.sh (можно даже не отдельным скриптом, а внутри того же main_script.sh) и все это должно происходить автоматически, т.е. без дополнительного вмешательства и ввода пароля user2. Скажите, такое вообще возможно? И как это реализовать? что-то вертится в голове про setuid и про возможность использования групп(??). Но ничего толком собрать не могу.

man sudo, если я не ошибаюсь.

Запуск команды от имени пользователя: ‘sudo -u ‘
Чтобы не просил пароль надо будет прописать правило в /etc/sudoers
Так что man sudoers’ вам в помощь =)

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

Итак, ничего не работает. Все равно просит пароль.

# /etc/sudoers # # This file MUST be edited with the 'visudo' command as root. # # See the man page for details on how to write a sudoers file. # Defaults env_reset # Host alias specification Host_Alias LOCALHOST = lenovo # User alias specification User_Alias FULLTIMERS = zoot # Cmnd alias specification Cmnd_Alias SCRIPT = /home/zoot/devel/trash/script.sh # User privilege specification root ALL=(ALL) ALL # Allow members of group sudo to execute any command # (Note that later entries override this, so you might need to move # it further down) %sudo ALL=(ALL) ALL # #includedir /etc/sudoers.d # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Test options FULLTIMERS LOCALHOST = NOPASSWD: SCRIPT 
zoot@lenovo:~$ cat /home/zoot/devel/trash/script.sh #!/bin/bash echo "running script" sleep 10s echo "done" 

Скрипт, ясное дело, просто для теста.

sudo -u carol /home/zoot/devel/trash/script.sh

А пароль таки просится. Если ввести, то все ок. ps -a -f | grep -i carol выдает таки, что процесс запущен под пользователем carol.

Да, уточню, система Ubuntu 10.10 Ибо с правами и sudo у нее может что особое? =)

Источник

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

Мануал

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

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

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

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

Читайте также:  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 используется для указания имени команды.

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

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

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

Читайте также:  Linux gpt to dos

Обратите внимание, что в нашем предыдущем примере команды я не ввел пароль 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.

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

Читайте также:  Adding linux to windows boot menu

Как я предупреждал, вы должны быть осторожны при тестировании этого метода на рабочей системе. Вы можете неосознанно позволить пользователю выполнить опасную команду (например, 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