Запустіть скрипт оболонки як інший користувач, який не має пароля


245

Я хотів би запустити скрипт з основної оболонки ubuntu як іншого користувача, у якого немає пароля.

У мене є повні привілеї судо, тому я спробував це:

sudo su -c "Your command right here" -s /bin/sh otheruser

Тоді я повинен ввести свій пароль, але я не впевнений, чи справді цей сценарій справді працює під цим користувачем.

Як я можу підтвердити, що сценарій справді працює під цим користувачем?

Відповіді:


354

Ви можете це зробити за допомогою 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. Дивіться відповідь Калеба

Ви можете змінити /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

4
Чи можете ви додати, як це зробити su?
rubo77

2
Це запитує у мене пароль :-(
IanVaughan

1
@IanVaughan, З конфігурацією за замовчуванням (від sudo) вам буде запропоновано пароль, якщо ви не запустите його як root. Ви можете налаштувати sudo, щоб "дозволити користувачеві A запускати cmd C як користувач B, не вимагаючи пароля". Дивіться help.ubuntu.com/community/Sudoers
geirha

1
Мені буде запропоновано ввести пароль при запуску цього файлу як root. Будь-які пропозиції?
Нейт

1
@NamGVU майте на увазі, що замовлення має значення. Якщо у ваших судолерів є додаткове правило, яке встановлює інші дозволи для вашого користувача або групи, членом якої ви є, це буде перекривати ваше правило NOPASSWD.
geirha

100

Якщо ви хочете використовувати su замість судо, я вважаю, що ви можете використовувати щось подібне:

su - <username> -c "<commands>"
  • - буде імітувати вхід вказаного користувача
  • -c повідомляє, що ви хочете виконати команду

пс. На жаль, я не в змозі встановити рубін за допомогою rvm за допомогою цього методу, але це, мабуть, не пов’язано.


5
Мені потрібно було додати sudoдо початку, інакше він попросив мене пароль.
IanVaughan

2
Це безперечно не спрацює sudo. наприклад, з sudo працює, наприклад: sudo su - www-data -c "touch /tmp/test"успішно створив файл у вигляді www-data
rubo77

Для використання "su" вам потрібен пароль root, пункт "sudo" - це уникати. Якщо у вас є кореневий пароль, використовуючи "su", як зазначено вище, це повинно працювати добре.
Самуель Ослунд

6

Наведені вище відповіді дуже корисні для мене, але щоб відповісти на власне питання ...

Як я можу підтвердити, що сценарій справді працює під цим користувачем? -

Використання:

ps -ef | grep <command-name>

Вихід повинен включати ваш сценарій та фактичного користувача, який його виконує. Люди в BSD-подібних системах, наприклад, MAC можуть знайти подібну інформацію за допомогою:

ps aux | grep <command-name>

Користувачі Linux можуть використовувати ps aux.
Дін Хоуелл

@DeanHowell; Правда, але користувачі MAC не можуть використовувати "ps -ef", а "ps aux" - це параметри BSD, доступні лише як функція сумісності, тоді як "ps -ef" - це стандартизовані параметри Unix / POSIX.
Самуель Ослунд

2

У мене була така ж проблема. Просто введіть команду, screen -dmS testscreenце створить відокремлений екран у вашому обліковому записі користувача, який не є sudo, і тоді ви можете ввійти в нього та перевірити, чи є цей екран screen -ls.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.