私はいくつかのユーザーを作成しました:
$ useradd john
パラメータ-m
を指定してホームディレクトリを作成し、スケルトンファイルを各ユーザーにコピーするのを忘れていました。今、私はそれをしたいのですが、すべてのユーザーを再作成したくありません(もっと簡単な方法があるはずです)。それで、ユーザーディレクトリを作成してスケルトンファイルをコピーする方法はありますか?
ディレクトリの作成、対応するユーザーへの変更、すべてのスケルトンファイルのコピー、および対応するユーザーへの変更について考えました。ただし、useradd -m
のように、ユーザーを再度作成せず、ディレクトリを作成するコマンドがある場合は、それが適しています。
これはばかげた考えのように聞こえるかもしれませんが、ユーザーが実際に何もしていない場合は、次のようにすることができます。
cat /etc/passwd | cut -f 1 -d : >/tmp/users.list
次に、/ tmp/users.listを編集して、必要なユーザーのみを含めます。次に行います:
for i in `cat /tmp/users.list`
do
userdel $i
useradd -m $i
done
ただし、多くのRedhatベースのディストリビューションでは、最初のログイン時に新しいホームディレクトリを作成します。ただし、/ etc/passwdでディレクトリを指定する必要があります。
これをテストするには、「su-」を実行し、「正しいこと」を実行するかどうかを確認します。そうでない場合、上記のスクリプトは非常にうまく機能すると思います。
また、mkhomedir_helper
Usage: /sbin/mkhomedir_helper <username> [<umask> [<skeldir>]]
ユーザーディレクトリを手動で作成する必要があります。これには3つのステップが必要です。
/etc/passwd
に準拠してディレクトリを作成します。通常、すでに/ home/loginエントリがあります。最後に、適切な権限を設定します。
mkdir /home/YOU
cd /home/YOU
cp -r /etc/skel/. .
chown -R YOU.YOURGROUP .
chmod -R go=u,go-w .
chmod go= .
ところで、私もuseraddの-m
オプションを見逃しています。少なくともDebianベースのシステムにはadduser
コマンドが必要です。これは、useraddよりもお勧めです。 -m
オプションを見逃した場合は、deluser
を検討して、適切なオプションでユーザーを再作成することも検討する価値があります。
編集:ディレクトリもコピーするための-r
を追加しました。
mkdir -p /home/john
chown john:john /home/john
usermod -d /home/john john
それは私が信じるトリックをするべきです
pam_mkhomedir のようなものを使用して、今後これがユーザーの問題になるのを防ぐことができます。 pam_mkhomedirは、ログイン時にユーザーのホームディレクトリが存在しない場合に自動的に作成し、/ etc/skel(または指定した任意のskelディレクトリ)のファイルをそこに追加するPAMモジュールです。
これは、将来ユーザーリポジトリをLDAPなどのディレクトリサービスに切り替える場合でも、この問題を解決し続けるため、優れたスケーラブルなアプローチでもあります。
私の場合、ホームボリュームが破損していて、データがあまりないのでゼロから再構築することにしましたが、ユーザーのログイン情報を保持したいので、次のスクリプトでホームディレクトリを手動で再作成しました。
#!/bin/bash
cat /etc/passwd | while IFS=: read n x i g c d r
do
# my system has uid started at 1000, but has nfsnobody at 65534:
if [[ "$i" -ge 1000 && "$i" -le 65000 && ! -x "$d" ]]
then
cp -av /etc/skel "$d"
chown -R "$i:$g" "$d"
# may needed in SELinux system:
restorecon -R "$d"
# add your chmod as your need:
chmod -R o-rw "$d"
fi
done
編集する場合/etc/login.defs
含有すること
CREATE_HOME yes
そうすると、システムにnotを指定しない限り、今後のユーザーのためにホームディレクトリが自動的に作成されます。
別のオプションは、ログインにPAMを使用し、pam_mkhomedirモジュールを使用して、最初のログイン時に自動的にホームディレクトリを作成することです。
useradd
を実行した後の最初のステップは、su - <user>
。
ホームディレクトリを作成したり、スケルトンをコピーしたりします。少なくとも、私が頻繁に使用するCentOS 4のボックスでは。
ユーザーjohnでログインし、シェルから書き込みます。
xdg-user-dirs-update
それでおしまい! Sudoまたはsuを使用しないでください。ディレクトリを作成するためにrootアクセスは必要ありません。 rootアカウントから、以下を使用できます。
Sudo -u john xdg-user-dirs-update
このようにして、コマンドをjohnとして実行します。これは、複数のユーザーと間違えた場合に役立ちます。