как переключиться на другого пользователя с паролем в shell скрипте

Я вошел в среду UNIX под пользователем user1, в этой среде у меня есть сценарий оболочки, который содержит некоторую задачу, которую нужно выполнить по другому пути с другим пользователем, скажем user2, потому что у user1 нет доступа к этому пути.

Я хочу переключиться на пользователя2 от пользователя1 в сценарии оболочки для выполнения этой задачи, и после завершения задачи я хочу снова переключиться на пользователя1 от пользователя2.

Пожалуйста, подскажите, как я могу реализовать этот сценарий.

Я вызываю shell script с помощью java, так что если у вас есть другой способ, пожалуйста, предложите

0
16.12.2016, 13:08
2 ответа

Я предполагаю, что у пользователя user1 нет пароля -less доступ к sudo, правильно? Если это так, вы можете использовать команду runuser.

runuser -l user2 -c 'whoami'

Вы можете просто использовать su / sudo, если у вас настроены разрешения sudo.

su - user2 -c 'whoami'

Однако я предполагаю, что у вас нет sudo без пароля и / или у вас может не быть пароля для пользователя user2. Вы можете сделать сложную задачу, сгенерировав пару ключей RSA для пользователя user1, а затем добавив ключ id_rsa.pub в файл $ HOME / .ssh / authorized_keys пользователя2, чтобы включить аутентификацию с открытым ключом RSA, а затем использовать SSH, чтобы сделать это без пароля.

От имени пользователя user1 выполните следующее: ssh keygen Просто нажмите клавишу ввода в запросах Затем выполните следующее, чтобы добавить ключ автоматически (вы можете сделать это вручную, чтобы). Если вы используете эту команду, вам понадобится пароль пользователя user2 только в первый раз.

ssh-copy-id -i $ HOME / .ssh / id_rsa.pub user2 @ hostname

Если это сработает, вы сможете войти в систему как user1, затем запустите ssh user2 @ localhost для входа как user2 без пароля. Убедитесь, что в / etc / ssh / sshd_config на сервере включена аутентификация PublicKey.

Затем для удаленного выполнения команды вы можете запустить что-то вроде:

ssh user2 @ localhost "remote-command1; remote-command2"

0
28.01.2020, 02:47

Вы можете добиться желаемого с помощью sudo : вы можете разрешить пользователю user2 выполнять нужный ему сценарий как user1, разрешив только этот скрипт должен быть выполнен, таким образом сохраняя безопасность вашей системы (пользователь2 не может пойти на мошенничество и использовать оболочку как пользователь1). Вы можете сделать это:

  1. sudo visudo (для редактирования файла конфигурации sudo)
  2. Добавьте это в конец файла: user2 ALL = (user1) NOPASSWD: / path / to / ваш / script.sh
  3. Сохраните и закройте файл.

Теперь, если вы откроете оболочку как user2, вы можете использовать sudo -u user1 /path/to/your/script.sh, чтобы запустить ее как user1; вы можете использовать ту же команду из java. Безопасность сохраняется, поскольку пользователь 2 не может запускать оболочку как пользователь 1: sudo -u user1 bash будет отклонено.

Однако , я думаю, что более четкое решение может быть достигнуто путем простого создания группы, которую будут совместно использовать user1 и user2, и использования этой группы для управления разрешениями на выполнение для файла. В зависимости от ваших требований вы также можете рассмотреть ACL или бит setuid (например, chmod 4700 /path/to/your/script.sh), если ожидается, что больше пользователей будут выполнять этот скрипт как user1.

1
28.01.2020, 02:47

Теги

Похожие вопросы