Я хотел бы запустить скрипт из основной оболочки Ubuntu от имени другого пользователя без пароля.
У меня есть полные привилегии sudo, поэтому я попытался это сделать:
sudo su -c "Your command right here" -s /bin/sh otheruser
Затем я должен ввести свой пароль, но я не уверен, действительно ли этот скрипт сейчас работает под этим пользователем.
Как я могу подтвердить, что скрипт действительно работает под этим пользователем?
Если Вы хотите использовать su вместо sudo, я полагаю, что можно использовать что-то вроде этого:
su - <username> -c "<commands>"
-
моделирует вход в систему указанного пользователя-c
говорит этому, что Вы хотите выполнить командуPS, К сожалению, который я не могу установить рубин с помощью rvm с этим методом, но это, вероятно, не связано.
Вы можете сделать это с помощью su
или sudo
, нет необходимости в обоих.
sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"'
Соответствующие части man sudo
:
-H The -H (HOME) option requests that the security policy set
the HOME environment variable to the home directory of the
target user (root by default) as specified by the password
database. Depending on the policy, this may be the default
behavior.
-u user The -u (user) option causes sudo to run the specified
command as a user other than root. To specify a uid
instead of a user name, use #uid. When running commands as
a uid, many shells require that the '#' be escaped with a
backslash ('\'). Security policies may restrict uids to
those listed in the password database. The sudoers policy
allows uids that are not in the password database as long
as the targetpw option is not set. Other security policies
may not support this.
su
могут переключать пользователя только без предоставления пароля, если вы являетесь пользователем root. См. Ответ Калеба del>
Вы можете изменить файл /etc/pam.d/su
, чтобы разрешить su
без пароля. Смотрите этот ответ .
Если вы изменили свой файл авторизации следующим образом, любой пользователь, входящий в группу somegroup
, может su
перейти на otheruser
без пароля.
auth sufficient pam_rootok.so
auth [success=ignore default=1] pam_succeed_if.so user = otheruser
auth sufficient pam_succeed_if.so use_uid user ingroup somegroup
Затем проверить с терминала
rubo77@local$ su otheruser -c 'echo "hello from $USER"'
hello from otheruser
У меня была такая же проблема. Просто введите команду screen -dmS testscreen
, это создаст отдельный экран в вашей учетной записи пользователя, не являющегося пользователем sudo, а затем вы сможете войти в него и проверить, есть ли этот экран в screen -ls
.
Ответы выше очень полезны для меня, но для ответа на реальный вопрос ...
Как я могу подтвердить, что скрипт действительно запущен под этим пользователем? -
Использовать:
ps -ef | grep <command-name>
Выходные данные должны включать ваш скрипт и фактический пользователь, выполняющий это. Люди на BSD-подобных системах, например MAC может найти похожую информацию с помощью:
ps aux | grep <command-name>
Убедитесь, что вы переключились на пользователя root с помощью команды sudo su
, а затем используйте команду
su user -s <command>
Например: su www-data -s bin/magento cache:clean
Для этого можно использовать sudo
. Во-первых, вам нужно изменить файл /etc/sudoers
, чтобы добавить правило, позволяющее пользователю hudson
стать другим пользователем рассматриваемого скрипта. Предположим, у вас есть учетная запись user1
, для которой необходимо запустить /usr/local/bin/my_script.sh
.
Запустите visudo
, чтобы изменить файл sudoers
.
Затем используйте следующую команду sudo
для запуска скрипта из hudson.
Очень важно использовать visudo
для изменения файла sudoers
, чтобы проверить файл на наличие ошибок, прежде чем помещать его на место. Кроме того, я бы посоветовал быстро прочитать man sudoers
, чтобы четко понять, что делает вышеизложенное, прежде чем добавлять его в свою конфигурацию.