すべてのユーザーのパスワードを一度にリセットすることで、ロックダウンする必要のあるLinuxサーバーが10台あります。この背後にある話は長いですが、一般的な考え方は、特定の時間に非常に迅速に発生する必要があるということです。すべてのユーザーアカウントに(最初は)単一の強力なパスワードを使用するので、パスワードファイルなどから読み取る必要はありません。
したがって、必要なのは、これをスクリプト化して、すべてのパスワードを一度にリセットできるようにするための最良の方法です。 cat /etc/passwd | cut -f1 -d:
コマンドを使用してユーザーアカウントのリストを抽出できますが、それは、私がいじってはいけないと思うシステムアカウントを含むすべてのアカウントを含むことになります。
それで、ここでの私の最良の選択肢は何ですか?
注!パスワードをリセットするときは、~/.ssh/authorized_keys
ファイルから余分なものをすべて消去する必要もあります。後までこれを覚えていませんでした-ありがたいことに、私はサーバーをかなりしっかりとロックし、authorized_keysにはサーバー間のもの以外は何もありませんでした。
500以上のUIDを選択して、システムアカウントではなく実際のユーザーのみを取得するようにしてから、passwdのオプション--stdinを使用してpassowrdを変更できます。
このようなものが機能するはずです:
while IFS=: read u x nn rest; do if [ $nn -ge 500 ]; then echo "YOURSTRONGPASSWORD" |passwd --stdin $u; fi done < /etc/passwd
「newusers」コマンドのようなものを使用して、バッチモードでユーザーパスワードを更新できます。 user:passwordの組み合わせを含むファイルを作成し、newusersを介してロードします...パスワードは暗号化されずに入力されますが、処理中に暗号化されます。
newusers userpass.txt
userpass.txtは/ etc/passwdファイルのようになります。同じフォーマット。
/ etc/passwdを新しいファイルにコピーし、システムアカウントの行を削除して、2番目のフィールド「x」を使用する一般的なパスワードに置き換えてから、newusersコマンドを使用して再インポートします。
次のコマンドでシャドウDBを編集します。
vipw -s
これにより、ファイルが更新されないようにロックされ、テキストエディターを使用して、pwフィールドを持つすべての行の2番目のフィールドが置き換えられます。
例:使用:
$ openssl Rand -base64 12
gw9H5sqr8YioMdwd
$ openssl passwd -1
Password:
Verifying - Password:
$1$Nx/XBIYy$JGPhkX8DC9uJqggEFuKxP0
次に、rootとしてvipw-sを使用します。テキスト$ EDITOR/$ VISUALがvi(m)であると仮定すると、vipwはそれにダンプし、次のようにします。
:g/^[^:]*:[^*!:][^:]*:/s,:[^:]*,:$1$Nx/XBIYy$JGPhkX8DC9uJqggEFuKxP0:,
これは基本的なパターン一致であり、そのパターンに一致する行で置換を行います(行ごとに1回だけ)。パターンマッチでは、パスワードフィールドが「!」の行は除外されます。または「*」。したがって、uidが何であっても、すでにパスワードが設定されているユーザーにのみパスワードを設定します。これにより、パッケージングシステムが高いuidで「システム」アカウントを作成した場合や、一部のパッケージャーが作成したその他のナンセンスなケースから保護されます。
これにより、rootパスワードもリセットされることに注意してください。それを除外したいが、rootが最初の行にある場合は、最初の:gを:2、$ gに置き換えます。