web-dev-qa-db-ja.com

スクリプトから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権限またはこれを行う別の方法が必要であることを示しています。そのため、ファイルにアクセス許可4755のUIDビットを設定してrootとして実行しようとすると、上記と同じエラーが発生します。ここで何が起こっているのか分かりますか?

私の一般的な状況は、新しいユーザーをlinuxユーザーとしてプロジェクト管理システムに自動的に追加することを目指しており、特定のグループに追加されたときに、SSH経由でMercurialリポジトリにアクセスできる拡張アクセス許可を取得できるようにフックする予定です。 -したがって、ユーザー管理はフロントエンドを介して完全に処理されます。

2
Joshua Enfield

情報が限られているため、アーキテクチャの潜在的なセキュリティへの影響について詳細に理論化するつもりはありません。ただし、root以外のユーザーにユーザーを追加する機能を付与する場合は特に注意が必要です。

そうは言っても、その目的でSUIDビットを使用することはお勧めしません。それは、システム上のすべてのユーザーに追加の露出をもたらすためです。つまり、すべてのユーザーが潜在的にユーザーを追加する可能性があります

別の方法として、root以外のユーザーがusermodを実行できるように Sudo を構成することもできます。たとえば、visudoを実行し、次の行を追加します。

redmineuser ALL=NOPASSWD: /usr/sbin/usermod

5
Warner

man wallから:

Wallは、現在ログインしているすべてのユーザーの端末に、ファイルの内容、またはデフォルトではその標準入力を表示します。

ログインしているすべての人にユーザー名とパスワードをブロードキャストしたいのはなぜですか?

Echoはbashに組み込まれているため、でパスワードを取得するときにプロセステーブルに表示されません。

ただし、このスクリプトの引数としてパスワードを渡しているため、その点は重要ではありません。

echops出力に表示されるかどうかのセキュリティについて懸念がある場合は、コマンドライン引数の問題やuseraddとブロードキャストパスワードは悪い考えです。