- Запуск скрипта от другого пользователя
- Запустить команду от другого пользователя в Unix/Linux
- Запустить команду от другого пользователя в Unix/Linux
- Запустить команду от другого пользователя в Unix/Linux — способ 1
- Запустить команду от другого пользователя в Unix/Linux — способ 2
- Запустить команду от другого пользователя в Unix/Linux — способ 3
- 5 thoughts on “ Запустить команду от другого пользователя в Unix/Linux ”
- Запуск bash скрипта от имени другого пользователя
- 1 ответ 1
- 🐧 Как запустить сервисы Systemd без пользователя root / sudo
- Юнит службы Systemd
- Запустим службу Systemd от стандартного пользователя
Запуск скрипта от другого пользователя
Есть в системе два пользователя: 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 у нее может что особое? =)
Запустить команду от другого пользователя в 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).
Вот и все, тема «Запустить команду от другого пользователя в 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
Запуск 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');
🐧 Как запустить сервисы Systemd без пользователя root / sudo
Мануал
Systemd – это современный инит и замена rc в стиле SysV для систем Linux, которая использует многие современные функции ядра Linux.
О н предоставляет диспетчер системы и услуг, который запускается как PID 1 и запускает остальную часть системы.
Systemd отвечает за управление тем, как службы запускаются, останавливаются, перезапускаются и каким-либо другим образом управляются в современных дистрибутивах Linux.
Стандартные файлы модулей Systemd , которые поставляются с системой Linux или устанавливаются сторонними приложениями, обычно запускаются от имени пользователя root или системного пользователя.
Это руководство покажет вам, как запустить службу Systemd без рута от обычного пользователя, вошедшего в систему.
Юнит службы Systemd
Файл модуля Systemd содержит директивы конфигурации, которые описывают модуль и определяют его поведение.
В этом руководстве мы напишем файл модуля systemd, которым может управлять зарегистрированный пользователь без sudo.
Запустим службу Systemd от стандартного пользователя
Пользовательский сервис Systemd должен быть помещен в каталог ~/.config/systemd/user , если вы хотите иметь полное право владения обычным пользователем.
Создайте его, если его не существует.
mkdir -p ~/.config/systemd/user/
Мы создадим тестовый сервис, который запускает приложение Syncthing.
curl -s https://api.github.com/repos/syncthing/syncthing/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi - tar xvf syncthing-linux-amd64*.tar.gz sudo cp syncthing-linux-amd64-*/syncthing /usr/local/bin/
$ syncthing --version syncthing v1.4.0 "Fermium Flea" (go1.13.8 linux-amd64) teamcity@build.syncthing.net 2020-03-06 19:52:22 UTC
$ vim ~/.config/systemd/user/syncthing.service [Unit] Description=Syncthing - Open Source Continuous File Synchronization Documentation=man:syncthing(1) [Service] ExecStart=/usr/local/bin/syncthing -no-browser -no-restart -logflags=0 Restart=on-failure SuccessExitStatus=3 4 RestartForceExitStatus=3 4 # Hardening SystemCallArchitectures=native MemoryDenyWriteExecute=true NoNewPrivileges=true [Install] WantedBy=default.target
$ systemctl --user daemon-reload
Подтвердите, что служба доступна.
$ systemctl --user list-unit-files syncthing.service UNIT FILE STATE syncthing.service disabled 1 unit files listed.
$ systemctl --user enable --now syncthing.service Created symlink /home/vagrant/.config/systemd/user/default.target.wants/syncthing.service → /home/vagrant/.config/systemd/user/syncthing.service.
Давайте проверим состояние нашего сервиса.
$ systemctl --user status syncthing.service ● syncthing.service - Syncthing - Open Source Continuous File Synchronization Loaded: loaded (/home/vagrant/.config/systemd/user/syncthing.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-04-03 17:18:54 UTC; 5s ago Docs: man:syncthing(1) Main PID: 22628 (syncthing) CGroup: /user.slice/user-1000.slice/user@1000.service/syncthing.service ├─22628 /usr/local/bin/syncthing -no-browser -no-restart -logflags=0 └─22632 /usr/local/bin/syncthing -no-browser -no-restart -logflags=0
Это тот же процесс, который вы можете использовать для создания любой другой службы Systemd, которой хотите управлять без повышения привилегий или создания другого системного пользователя для запуска службы.
Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Получается что установленные сервисы через –user настроить на автозапуск нельзя ?Получается нужно установить сервис в раздел /etc/system/systemd, для возможности автозапуска, дать права в /etc/sudoers USER ALL = NOPASSWD: /usr/sbin/service что бы не просил пароль?
Вообще можно. Можно сделать системный юнит, где указать пользователя и сделать скрипт запуска от пользователя. Но это больше трудозатрат
- Аудит ИБ (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
Что такое 404 Frame? Большинство инструментов для взлома веб-сайта находятся в 404 Frame. Итак, что же представляют собой команды? Вы можете отдавать команды, используя повседневный разговорный язык, поскольку разработчики не хотели выбирать очень сложную систему команд. Команды Команды “help” / “commands” показывают все команды и их назначение. Команда “set target” – это команда, которая должна […]
В этой заметке вы узнаете о блокировке IP-адресов в Nginx. Это позволяет контролировать доступ к серверу. Nginx является одним из лучших веб-сервисов на сегодняшний день. Скорость обработки запросов делает его очень популярным среди системных администраторов. Кроме того, он обладает завидной гибкостью, что позволяет использовать его во многих ситуациях. Наступает момент, когда необходимо ограничить доступ к […]
Знаете ли вы, что выполняется в ваших контейнерах? Проведите аудит своих образов, чтобы исключить пакеты, которые делают вас уязвимыми для эксплуатации Насколько хорошо вы знаете базовые образы контейнеров, в которых работают ваши службы и инструменты? Этот вопрос часто игнорируется, поскольку мы очень доверяем им. Однако для обеспечения безопасности рабочих нагрузок и базовой инфраструктуры необходимо ответить […]
Одной из важнейших задач администратора является обеспечение обновления системы и всех доступных пакетов до последних версий. Даже после добавления нод в кластер Kubernetes нам все равно необходимо управлять обновлениями. В большинстве случаев после получения обновлений (например, обновлений ядра, системного обслуживания или аппаратных изменений) необходимо перезагрузить хост, чтобы изменения были применены. Для Kubernetes это может быть […]
Является ли запуск сервера NFS в кластере Kubernetes хорошей идеей или это ворота для хакеров Одним из многочисленных преимуществ сетевой файловой системы является ее способность выполнять многократное чтение-запись. И как и все в наши дни, NFS – это просто еще одна служба, которую можно запустить в своем кластере Kubernetes. Однако является ли сервер NFS подходящей […]