web-dev-qa-db-ja.com

ユーザーの作成後にホームディレクトリを作成する

私はいくつかのユーザーを作成しました:

$ useradd john

パラメータ-mを指定してホームディレクトリを作成し、スケルトンファイルを各ユーザーにコピーするのを忘れていました。今、私はそれをしたいのですが、すべてのユーザーを再作成したくありません(もっと簡単な方法があるはずです)。それで、ユーザーディレクトリを作成してスケルトンファイルをコピーする方法はありますか?

ディレクトリの作成、対応するユーザーへの変更、すべてのスケルトンファイルのコピー、および対応するユーザーへの変更について考えました。ただし、useradd -mのように、ユーザーを再度作成せず、ディレクトリを作成するコマンドがある場合は、それが適しています。

72
cd1

これはばかげた考えのように聞こえるかもしれませんが、ユーザーが実際に何もしていない場合は、次のようにすることができます。

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-」を実行し、「正しいこと」を実行するかどうかを確認します。そうでない場合、上記のスクリプトは非常にうまく機能すると思います。

17
dotwaffle

また、mkhomedir_helper

Usage: /sbin/mkhomedir_helper <username> [<umask> [<skeldir>]]
105
Rahul Patil

ユーザーディレクトリを手動で作成する必要があります。これには3つのステップが必要です。

  1. /etc/passwdに準拠してディレクトリを作成します。通常、すでに/ home/loginエントリがあります。
  2. / etc/skelから初期ファイルをコピーする
  3. 最後に、適切な権限を設定します。

    • 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を追加しました。

18
math
mkdir -p /home/john
chown john:john /home/john
usermod -d /home/john john

それは私が信じるトリックをするべきです

14
David Rickman

pam_mkhomedir のようなものを使用して、今後これがユーザーの問題になるのを防ぐことができます。 pam_mkhomedirは、ログイン時にユーザーのホームディレクトリが存在しない場合に自動的に作成し、/ etc/skel(または指定した任意のskelディレクトリ)のファイルをそこに追加するPAMモジュールです。

これは、将来ユーザーリポジトリをLDAPなどのディレクトリサービスに切り替える場合でも、この問題を解決し続けるため、優れたスケーラブルなアプローチでもあります。

9
jgoldschrafe

私の場合、ホームボリュームが破損していて、データがあまりないのでゼロから再構築することにしましたが、ユーザーのログイン情報を保持したいので、次のスクリプトでホームディレクトリを手動で再作成しました。

#!/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モジュールを使用して、最初のログイン時に自動的にホームディレクトリを作成することです。

2
Jenny D

useraddを実行した後の最初のステップは、su - <user>

ホームディレクトリを作成したり、スケルトンをコピーしたりします。少なくとも、私が頻繁に使用するCentOS 4のボックスでは。

0
warren

ユーザーjohnでログインし、シェルから書き込みます。

xdg-user-dirs-update

それでおしまい! Sudoまたはsuを使用しないでください。ディレクトリを作成するためにrootアクセスは必要ありません。 rootアカウントから、以下を使用できます。

Sudo -u john xdg-user-dirs-update

このようにして、コマンドをjohnとして実行します。これは、複数のユーザーと間違えた場合に役立ちます。