bashスクリプトを介してユーザーアカウントを追加する適切な方法


15

現在使用しているスクリプトコードは次のとおりです。

getent group $MYGROUP
if [ $? -ne 0 ] ; then
    sudo su -c "groupadd $MYGROUP"
fi
sudo su -c "useradd mynewuser -p mypassword -m -g $PRIMARYGRP -G $MYGROUP"

このアプローチはopenSuseでうまく機能します。しかし、Ubuntuで作成されるユーザーアカウントにはいくつかの問題があるため、ここで助けを求めています。

  • 端末プロンプトが設定されていません(echo $PS1何も返しません)
  • 端末で矢印キーとタブキーが正しく機能しない
  • パスワードが機能しないようです(この問題が何であるかはまだ明確ではありませんが)
  • この新しいユーザーに設定された/ etc / sudoers権利は尊重されません

代わりにadduser(useraddではなく)を使用して手動でユーザーを作成した場合、Ubuntuではこれらの問題は発生しません。ただしadduser、openSuse(afaik)では使用できません。したがって、Debian専用ではないスクリプト、またはUbuntuで動作する(そして他のディストリビューションで動作を停止しない)bashスクリプトを介してユーザーアカウントを追加する方法が必要です。

最後に、私は理解したいと思い違いの間adduserとをuseradd。たとえば、どのスケルトンディレクトリが使用されadduserているのかを知りたいのですが、それが理由useraddで期待どおりに機能しない可能性があります(デフォルトを受け入れたためです)。

ありがとう


1
違いについては、useraddのmanページ(man useradd)から:useraddはユーザーを追加するための低レベルのユーティリティです。Debianでは、管理者は通常、代わりにadduser(8)を使用する必要があります。
Guntbert

また、sudo su -c "cmd arg1 arg2"と同等sudo cmd arg1 arg2です。
enzotib

@enzotibありがとう。それらはopenSuse上にないため、Ubuntu上でも同等であると知っておくと良いでしょう。したがって、使用sudo su -c "cmd arg1 arg2"する必要があるすべての場所で機能するように使用し続けます。
MountainX for-Monica

adduserは1000行を超えるperlスクリプトです。そのため、違いについてはスクリプトをご覧ください。
enzotib

@enzotibはい、読んでadduserいますが、perlがわかりません。だから、それは私にとって良いアプローチではありません。
MountainX-for-Monica

回答:


14

:私のソリューションは、ここで提供された/unix/82923/proper-way-to-add-a-user-account-via-bash-scriptウルリッヒ・シュワルツジョセフ・R.。私がしなければならなかった主なことは-s /bin/bash、既存のuseraddコマンドに追加して-p password、暗号化されたパスワードを要求する削除でした。

sudo su -c "useradd mynewuser -s /bin/bash -m -g $PRIMARYGRP -G $MYGROUP"

次にこれを行います:

sudo chpasswd << 'END'
mynewuser:password
END

6
echo mynewuser:password | sudo chpasswdも動作します。
フェリックスラーベ

10

これは動作します。

sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | sudo chpasswd

これは、受け入れられている答えよりも簡単な解決策です。
スティーブン

2

sshキーログインとパスワードなしでサービスアカウントを自動的に構築するスクリプト

#add service group/user
addgroup service-runner
useradd devops-service --create-home --shell /bin/bash --groups service-runner
#gpasswd -a devops-service sudo #allowing sudo requires password, and not a good idea for a service account.
mkdir /home/devops-service/.ssh
chmod 700 /home/devops-service/.ssh
cat devops-service@v2-20150312.pub >> /home/devops-service/.ssh/authorized_keys
chown devops-service:devops-service /home/devops-service -R

fyi、スクリプトを使用した後、パスワードがないとsudoを使用できないことを意味するため、サービスアカウントでは「sudo」はほとんど役に立たないことがわかります。パスワードなしでsudoをvisudo経由で許可するように構成できますが、スクリプトで自動化する方法がわかりません。また、おそらくパスワードなしのsudoを使用したサービスアカウントは良い(セキュリティ)アイデアではありません。
ジェイソン

0

スクリプトで条件を単純に使用できると思います。

if grep -q 'Ubuntu\|Debian' /etc/issue; then
    adduser .....
else
    useradd .....
fi

(ファイル/etc/issueがOpenSUSEに存在するかどうかを確認することはできません。そうでない場合、そのようなファイルの存在に条件を置くことができます)。


adduserwith if command -v adduser >/dev/null; thenやlikeの存在を単純にテストしないのはなぜですか?重要なのはそれだけであり、基礎となるディストリビューションではありません。また、Debian / UbuntuおよびOpenSUSE以外のディストリビューションもあります。
デビッドフォースター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.