Добавление нового пользователя в 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
и широковещательные пароли плохие идеи.