- linux-notes.org
- Запустить команду от другого пользователя в Unix/Linux
- Запустить команду от другого пользователя в Unix/Linux — способ 1
- Запустить команду от другого пользователя в Unix/Linux — способ 2
- Запустить команду от другого пользователя в Unix/Linux — способ 3
- 5 thoughts on “ Запустить команду от другого пользователя в Unix/Linux ”
- Добавить комментарий Отменить ответ
- Как запустить команду от другого пользователя Linux?
- Запуск Apache от имени другого пользователя
- 5 ответов 5
- Рекомендуется запускать службу Linux от имени другого пользователя
- 8 ответов:
- Команда sudo в Linux
- Синтаксис sudo
- Опции sudo
- Примеры использования sudo
- 1. Запуск программы
- 2. Переменные окружения
- 3. Авторизация от имени другого пользователя
- 4. Командный интерпретатор
- 5. Редактирование файлов
- 6. Запуск в фоне
- 7. Просмотр полномочий
- Выводы
linux-notes.org
Запустить команду от другого пользователя в Unix/Linux
Иногда, просто необходимо запустить команду от другого пользователя. И существует несколько способов, как это можно сделать. Я расскажу о них в своей статья «Запустить команду от другого пользователя в Unix/Linux».
Запустить команду от другого пользователя в Unix/Linux — способ 1
И так, можно использовать утилиту SUDO. Рассмотрим пример:
- -H YOUR_HOME: Задает HOME (Переменное окружение для хома конкретного юзера) и по умолчанию — это root.
- -u YOUR_USER: Задаем пользователя от которого будет выполнена команда.
- -c YOUR_COMMAND: Служит опцией для ввода команды.
Запустить команду от другого пользователя в Unix/Linux — способ 2
Можно использовать утилиту SU. И сейчас приведу несколько примеров.
Логин в root юзера
Чтобы получить рута, выполните:
Запустить команду как root юзер
Вот пример команды:
Выполнить команду от другого пользователя с помощью su
И так, вот пример:
Рассмотрим другой пример:
- — — Будет имитировать логин указанного пользователя.
- -c — Служит для указания команды для выполнения (для указанного юзверя).
Запустить команду от другого пользователя в Unix/Linux — способ 3
И так, можно использовать утилиту runuser. Команда runuser запускает оболочку с заменяющими идентификаторами пользователей и групп. Эта команда полезна только когда вы залогинены как пользователь root. Синтаксис выглядит следующим образом:
Как пример, я покажу следующую строку:
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
Да, уже поправил. Моя опечатки. Спасибо)
su asterisk -c «xxx»
This account is currently not available.
У меня вот проблема. Надо, чтобы звук из одной сессии (x2go)
Было слышно в другой сессии. Наверное даже не так.
Некоторые программы запускаются при загрузке ПК от user1.
Когда входишь через x2go тем же user1 звук (сигнализация) от этих демонов не слышно. Всю башку сломал. Подскажите пож как решить.
sudo -u www-data pwd
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Источник
Как запустить команду от другого пользователя Linux?
Юрий Самойлов, Спасибо, но ваш вариант не работает: «$ echo password | sudo -u user2 -S /home/user2/scripts/script1.sh»
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for user1: Sorry, try again.
[sudo] password for user1:
sudo: 1 incorrect password attempt
You have new mail in /var/spool/mail/root»
Там просто какие-то невероятные возможности. Не знаю, как за обычного юзера, но за рута (запуск программы от рута без запроса пароля) делается вот так:
Karpion, причем тут бинарники?
Можно ссылочку?
There is a race condition inherent to the way shebang (#!) is typically implemented:
собственно вам нужно сделать слдующее
1. положите файл например в /bin ( тут варианты имеются)
2. назовите его так как собираетесь его запускать например scrypt
3. Дайте ему права на запуск , и доп права
4. и гланое укажите интерпритатор в петвой строке файла.
5. убедитесь что этот интерпритатор есть в системе, поскольку это sh то он есть.
Собственно все.
ну и
Виктор Таран, Ссылки нет — я как-то давно пробовал ставить SetUID на скрипт, не получилось. Может, с тех пор поменялось.
Проще всего — действительно проверить.
Ужасающе безграмотный текст не вызывает у меня доверие. И упоминание «race condition» тут явно не по теме.
Источник
Запуск Apache от имени другого пользователя
Когда я запускаю команду ps -efH чтобы вывести список всех процессов, я вижу, что Apache работает от имени пользователя root и кажется, что подпроцессы выполняются как www-data . Вот выдержка:
Могу ли я заставить Apache и все подпроцессы запускаться от имени другого пользователя apache2d:apache2d ? Если так, как? Я где-то читал, что настройки для этого можно найти в /etc/apache2/httpd.conf но этот файл кажется пустым? Можно ли это сделать, изменив владельца и группу скрипта /etc/init.d/apache2 а затем установив для него флаг setuid?
5 ответов 5
Apache должен изначально запускаться от имени root, чтобы связываться с портом 80. Если вы изначально не запускаете его как root, вы не сможете подключиться к порту 80. Если вы хотите привязать какой-либо порт выше 1024, тогда да, вы можете. В противном случае не беспокойтесь о root. Это родительский процесс Apache и не обслуживает никаких запросов. Это порождает дочерние процессы и удаляет привилегии для обработки запросов.
Чтобы изменить пользователя Apache, установите параметры User и Group в вашей конфигурации Apache.
@bahamat объясняет это довольно хорошо, но я добавлю немного больше деталей.
В ходе нормальной работы принадлежащий пользователю root процесс apache не будет выполнять никаких реальных операций, кроме прослушивания порта 80 и пересылки входящих соединений его дочерним элементам (безопасно непривилегированным, как пользователь www-data ).
Расположение главного файла конфигурации зависит от параметров времени компиляции и зависит от дистрибутива, но /etc/apache2/apache2.conf является хорошим начальным предположением.
Кроме того, если вы настраиваете многопользовательскую систему веб-хостинга , вы можете захотеть взглянуть на SuExec и fcgid, чтобы процесс apache каждого отдельного пользователя веб-хостинга выполнялся как указанный пользователь — так что, если один пользователь небрежно относится к своей безопасности, другой пользователи не будут затронуты.
По крайней мере, в Ubuntu настройки для этого находятся в /etc/apache2/envvars . Настройте их, затем перезапустите apache, и все готово.
Также ознакомьтесь с Apache2 ITK MPM.
Он разветвляет поток Apache с назначенным uid / gid , поэтому давайте продолжим использовать mod_php . Нет больше chmod / chown и т.д.
Mac OS X:
То, что сработало для меня, входит в конфигурационный файл apache:
В этом файле я искал пользователя или группу
Я изменил его на то, что когда-либо понадобилось пользователю / группе (в моем случае — на пользователя / группу, который является владельцем файлов моего веб-приложения, которые вы можете видеть. И это вы можете проверить с помощью простой команды ‘ls -l’)
Источник
Рекомендуется запускать службу Linux от имени другого пользователя
службы по умолчанию запускаются как root во время загрузки на моем поле RHEL. Если я правильно помню, то же самое верно и для других дистрибутивов Linux, которые используют сценарии инициализации в /etc/init.d .
как вы думаете, это лучший способ вместо того, чтобы процессы запускались как (статический) пользователь по моему выбору?
единственный метод, к которому я пришел, был использовать что-то вроде:
но это кажется немного неопрятным.
есть ли немного магии спрятан это обеспечивает простой механизм для автоматического запуска служб в качестве других, некорневых пользователей?
EDIT: я должен был сказать, что процессы, которые я запускаю в этом случае, являются либо скриптами Python, либо программами Java. Я бы предпочел не писать родную обертку вокруг них, поэтому, к сожалению, я не могу позвонить setuid () как предлагает черный.
8 ответов:
в Debian мы используем start-stop-daemon утилита, которая обрабатывает pid-файлы, изменяя пользователя, помещая демона в фоновый режим и многое другое.
Я не знаком с RedHat, но daemon утилита, которую вы уже используете (которая определена в /etc/init.d/functions , кстати.) упоминается везде как эквивалент start-stop-daemon , поэтому либо он также может изменить uid вашей программы, либо способ, которым вы это делаете, уже правильный.
если вы посмотрите по сети, есть несколько готовых оберток, которые можно использовать. Некоторые из них даже могут быть уже упакованы в RedHat. Взгляните на daemonize , например.
рассмотрев все предложения здесь, я обнаружил несколько вещей, которые, я надеюсь, будут полезны другим в моем положении:
хоп прямо в точку меня в /etc/init.d/functions : в
- некоторые демоны (например, apache) делают это сами по себе, вызывая setuid ()
- вы могли бы использовать права доступа к файлу-файл флаг для запуска процесса от имени другого пользователя.
- конечно, решение, которое вы упомянули, также работает.
если вы собираетесь написать свой собственный демон, то я рекомендую вызвать setuid(). Таким образом, ваш процесс может
- использовать суперпользователя (например, открытые файлы, создать PID-файлы).
- отбросьте свои привилегии root в определенный момент во время запуска.
просто добавить некоторые другие вещи, чтобы следить за:
- Sudo в init.D скрипт не годится, так как ему нужен tty («sudo: извините, у вас должен быть tty для запуска sudo»)
- Если вы демонизируете приложение java, вы можете рассмотреть Java Service Wrapper (который предоставляет механизм для установки идентификатора пользователя)
- Другой альтернативой может быть su — session-command=[cmd] [user]
на виртуальной машине CENTOS (Red Hat) для сервера svn: отредактировано /etc/init.d/svnserver чтобы изменить pid на что-то, что svn может написать:
оригинальный pidfile был /var/run/svnserve.pid . Демон не запустился, потому что только root мог писать там.
некоторые вещи, чтобы наблюдать за:
- как вы упомянули, su запросит пароль, если вы уже являетесь целевым пользователем
- аналогично, setuid (2) завершится неудачей, если вы уже являетесь целевым пользователем (на некоторых ОС)
- setuid (2) не устанавливает привилегии или элементы управления ресурсами, определенные в /etc/limits.conf (Linux) или /etc/user_attr (Solaris)
- Если вы идете по маршруту setgid(2)/setuid(2), Не забудьте вызвать initgroups (3) — Подробнее об этом здесь
обычно я использую /sbin/su для переключения на соответствующего пользователя перед запуском демонов.
почему бы не попробовать следующее в скрипт:
это сработало для меня.
Мне нужно было запустить пружину .jar приложение в качестве службы, и нашел простой способ запустить это как конкретный пользователь:
Я изменил владельца и группу моего файла jar на пользователя, которого я хотел запустить. Затем симулировал эту банку в init.D и начал службу.
Источник
Команда sudo в Linux
Если вы новый пользователь Linux, то, наверное, уже заметили, что здесь почти для всех серьёзных настроек или операций с системой нужны права суперпользователя. Пользователям Windows такой подход тоже должен быть знаком, когда вы устанавливаете программы или меняете системные настройки, операционная система просит подтвердить выполнение программы от имени администратора.
В Linux такой возможности нет, но зато есть команда sudo, которая позволяет вам запускать программы от имени других пользователей, а также от имени суперпользователя. На сайте уже есть несколько материалов про работу с ней, но нет подробной статьи про опции самой команды и её синтаксис. Эта тема и будет раскрыта сейчас. Дальше мы рассмотрим, что представляет из себя команда sudo Linux, но начнем с её синтаксиса.
Синтаксис sudo
Синтаксис команды очень прост:
$ sudo опции программа параметры
Так вы можете выполнить абсолютно любую команду Linux. Достаточно написать перед ней команду sudo. По умолчанию sudo запускает переданную ей команду от имени суперпользователя. Если вы хотите добавить какие-либо настройки или использовать другого пользователя, нужно указывать опции.
Опции sudo
- -A или —askpass — по умолчанию sudo спрашивает пароль пользователя в терминале. Если задана эта опция, утилита попробует использовать графическую утилиту для запроса пароля.
- -b или —background — запускает переданную программу в фоновом режиме;
- -C или —close-from — опции нужно передать число больше трёх. Она позволяет закрыть для программы все файловые дескрипторы, кроме стандартного ввода и вывода;
- -E или —preserve-env — позволяет передать переменные окружения текущего пользователя выполняемой программе. Также можно передать этой опции список переменных, которые нужно разрешить;
- -e или —edit — позволяет редактировать файл вместо запуска команды. Файл копируется во временный каталог, редактируется с помощью редактора, установленного в системе по умолчанию, и если были изменения, записывается обратно с теми самыми правами;
- -g — запустить команду с указанной группой вместо группы пользователя, от имени которого запускается программа;
- -h — выполнить команду от имени другого хоста;
- -H или —set-home — установить домашний каталог;
- -i или —login — позволяет авторизоваться в консоли от имени другого пользователя. Будет выбран его домашний каталог, а также загружены все переменные окружения;
- -k — по умолчанию, sudo сохраняет пароль и некоторое время после выполнения команды, вы можете выполнить ещё раз, без ввода пароля. Эта опция отключает такую возможность;
- -l или —list — позволяет вывести список доступных команд для удалённых пользователей;
- -n или —non-interactive — не интерактивный режим, если будет необходимо ввести пароль, программа выдаст ошибку;
- -p или —prompt — использовать своё приглашение для ввода пароля;
- -r или —role — выполнить программу с контекстом SELinux, у которого есть указанная роль;
- -S — использовать стандартный поток ошибок для запроса пароля;
- -s или —shell — позволяет запустить указанный командный интерпретатор;
- -U или —User — вместе с опцией -l позволяет посмотреть привилегии для пользователя;
- -T или —timeout — позволяет установить время выполнения команды, если время истечёт раньше, чем завершится команда, то она будет завершена принудительно;
- -u — позволяет указать, от имени какого пользователя нужно выполнять программу;
- -V — выводит версию утилиты;
- — — означает, что следующие опции обрабатывать не нужно.
Это основные опции, которые вы можете использовать. А теперь давайте перейдём к примерам использования команды.
Примеры использования sudo
1. Запуск программы
Самый частый пример использования sudo — выполнение программы от имени суперпользователя. Для этого достаточно написать sudo перед именем программы:
Если вы хотите выполнить программу не от имени root, а от имени другого пользователя, то можно использовать опцию -u, например:
sudo -u sergiy whoami
2. Переменные окружения
По умолчанию, команда sudo не передаёт запускаемой утилите переменные окружения текущего пользователя. А когда вы запускаете графическое приложение, то ему нужна переменная DISPLAY для доступа к графическому серверу. В последних версиях Ubuntu всё немного по другому, но все же эта возможность sudo актуальна. Чтобы передать переменные просто используйте опцию -E:
Без опции -E программа получает только 18 стандартных переменных, а с опцией — все доступные.
Также вы можете указать список переменных, которые нужно передать:
3. Авторизация от имени другого пользователя
С помощью sudo вы также можете авторизоваться от имени другого пользователя. Для этого используйте опцию -i:
По умолчанию вы будете авторизованы как суперпользователь. Ещё здесь можно указать пользователя, от имени которого вы хотите авторизоваться:
sudo -i -u sergiy
4. Командный интерпретатор
Если у вас в системе установлено несколько командных интерпретаторов, например, не только bash, но и zsh, то вы можете авторизоваться от имени другого пользователя и указать, какую именно оболочку вы хотите использовать. Для этого укажите опция -s:
5. Редактирование файлов
Когда вам необходимо отредактировать системный файл, вы пишите sudo vim или sudo nano. Вместо этого можно использовать опцию -e или команду sudoedit. Она открывает файл для редактирования, редактором, установленным в системе по умолчанию. Например, у меня это vim. Чтобы отредактировать /etc/group с правами суперпользователя достаточно выполнить:
sudo -e /etc/group
Утилита узнает, каким редактором нужно пользоваться из переменной окружения EDITOR.
6. Запуск в фоне
Чтобы запустить программу в фоне с помощью sudo можно использовать опцию -b. Например, запускаем OpenVPN в фоновом режиме:
sudo -b openvpn -с /путь/к/конфигурационному.файлу
7. Просмотр полномочий
Вам необязательно редактировать конфигурационный файл, чтобы понять, какие настройки для sudo разрешены, а какие нет. Для этого можно выполнить команду с опцией -l. Утилита выведет список разрешённых команд или ALL в случае, если разрешено всё:
Выводы
Теперь вы знаете, что из себя представляет команда sudo Linux. Здесь мы рассмотрели только общие примеры её использования. Если вы хотите прочитать более подробно про её настройку, смотрите статью настройка sudo в Linux.
Источник