Назад | Перейти на главную страницу

Добавление нового пользователя в 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 - поэтому управление пользователями полностью осуществляется через интерфейс.

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

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

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

redmineuser ALL=NOPASSWD: /usr/sbin/usermod

Из man wall:

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

Зачем вам передавать имя пользователя и пароль всем, кто вошел в систему?

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

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

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