Добавление нового пользователя в linux из скрипта

Я использую настроенную установку Redmine для управления проектами. Мне удалось подключить новых пользователей и отправить информацию для входа в мой bash-скрипт. Ниже мой сценарий:

#!/bin/sh
UNAME=$1
UPASS=$2
wall "$UNAME $UPASS"
useradd "$UNAME"
echo "$UPASS" | passwd "$UNAME" --stdin
usermod -g restricted "$UNAME"

Echo - встроенная утилита bash, поэтому она не будет отображаться в таблице процессов при вводе пароля. Проблема в том, что я получил жалобу на разрешение от Redmine:

/opt/rms/redmine/new-user: line 5: /usr/sbin/useradd: Permission denied
Only root can do that.
/opt/rms/redmine/new-user: line 7: /usr/sbin/usermod: Permission denied

Это явно указывает на то, что мне нужно разрешение root или другой способ сделать это. Поэтому я попытался установить бит UID с разрешениями 4755 для файла, чтобы он работал от имени пользователя root, и я получаю ту же ошибку, что и выше. Есть идеи, что здесь происходит?

Моя общая ситуация заключается в том, что я стремлюсь автоматически добавлять новых пользователей в систему управления проектами в качестве пользователей linux, а затем, когда они добавляются в определенную группу, я планирую подключить ее, чтобы они получили расширенные разрешения, позволяющие им получить доступ к хранилищу Mercurial через SSH. - так что управление пользователями полностью осуществляется через интерфейс.

2 ответа

Решение

Из-за ограниченной информации я не собираюсь подробно рассуждать о потенциальных последствиях вашей архитектуры для безопасности. Тем не менее, я бы особенно осторожно предоставил возможность добавлять пользователей не-root.

С учетом сказанного, я бы не рекомендовал использовать бит SUID для этой цели. Если ничто иное, потому что это вводит дополнительное воздействие на каждого пользователя в системе. Это означает, что каждый пользователь может добавлять пользователей.

В качестве альтернативы вы можете настроить sudo, чтобы позволить пользователю без полномочий root запускать usermod. Например, запустить visudo и добавьте эту строку:

redmineuser ALL=NOPASSWD: /usr/sbin/usermod

От man wall:

Wall отображает содержимое файла или, по умолчанию, его стандартный ввод, на терминалах всех зарегистрированных пользователей.

Почему вы хотите сообщить имя пользователя и пароль всем, кто вошел в систему?

Echo - встроенная утилита bash, поэтому она не будет отображаться в таблице процессов при вводе пароля.

Однако вы передаете пароль в качестве аргумента этому сценарию, что делает этот вопрос спорным.

Если вы беспокоитесь о безопасности echo появляется в ps вывод, вы должны быть обеспокоены другими вещами, такими как проблема аргумента командной строки и что SETUID на useradd и широковещательные пароли плохие идеи.

Другие вопросы по тегам