Arch Linuxでホームディレクトリなしでユーザーを作成すると、useradd -M test
次の項目が作成されます/etc/passwd
。
test:x:1001:1001::/home/test:/bin/bash
しかし/home/test
、存在しないため、shadow.service
失敗が発生します。ホームディレクトリを空白のままにすると、同じエラーが発生します。私が見つけた古い糸推奨されますが、/dev/null
これが最善の解決策であるかどうかはわかりません。 ATMを無視するのが最善の解決策であるようですが、より良い方法があるかもしれません。
shadow.service
それは次のように要約さpwck
れますgrpck
。
### [...]
ExecStart=/bin/sh -c '/usr/bin/pwck -r || r=1; /usr/bin/grpck -r && exit $r
### [...]
答え1
Debian ベース
Debianベースのシステムを使用している場合、新しい - 複数のDebianベースのディストリビューションに既に既に存在する(次のパッケージバージョンのソースコードにすでに含まれていますpwck
)login.defs
はshadow-utils
、存在しないケースのホームディレクトリを/nonexistent
次のように正しく解釈します。道。
最新のパッケージを入手したら、次のオプションを設定してshadow-utils
追加(またはコメントアウト)できます。/etc/login.defs
man 8 pwck
最新のコミットの新しい内容は次のとおりです。
NONEXISTENT (string) If a system account intentionally does not have a home directory that exists, this string can be provided in the /etc/passwd entry for the account to indicate this. The result is that pwck will not emit a spurious warning for this account.
実際のオプションはこれ/etc/login.defs
です
# The [string] can be whatever word/path you want to use in your /etc/passwd file to
# correspond to a nonexistent directory. However, /nonexistent should be used as the default
# nonexisting home directory, as that is already in use in many distributions.
NONEXISTENT [string]
pwck
このオプションは、存在しないホームディレクトリをアカウントするために特別に追加され、使用されているshadow.service
構成の有効性と整合性を確認するための基本的なコマンドです。/etc/passwd
/etc/login.defs
この設定オプションを使用している場合、sudo adduser -M -d /nonexistent [username]
次に使用するとpwck -r
エラーは発生しません。
その他のディストリビューション
多くのDebianベースのディストリビューションがすでにこの特定の場合にこのアプローチを使用していますが、存在しないホームディレクトリを処理するために独自のシステムを使用する他の変形もあります。
ただし、通常、次の手順を実行して、ディストリビューションが存在しないホームディレクトリの状況をどのように決定するかをテストできます。
sudo grep nobody /etc/passwd
許可されていない特定のユーザーはデフォルトで独自のホームディレクトリパスを持っていませんが、ファイルに見つかった値は/etc/passwd
システムがどのように処理するかについての手がかりを提供します。
たとえば、
RHEL/CentOS は
/
ホームディレクトリをセーフデバイスとして使用しますが、次のようにnobody
ログインシェルを無効にします。/sbin/nologin
Debianベースのディストリビューションは現在の
/nonexistent
ホームディレクトリと/usr/sbin/nologin
シェルに使用されています。SUSE Linuxは少なくとも2019年半ばまで
/var/lib/nobody
ディレクトリと/bin/bash
シェルで使用されますが、一部のセキュリティ対応メモでは/var/lib/nobody
、/bin/false
OSxは使用されており、今後も引き続き使用できます
/var/empty
。/usr/bin/false
nobody
/nonexistent
シェルを使用するが使用を許可する他のディストリビューションが見つかりました/bin/sh
使用時の問題sudo useradd [username]
は、システムプリセットオプション/etc/login.defs
に違反しても実行時に無視できることです/etc/passwd
。
テストしてからかなり時間が経ってuseradd
もソースコードに大きな変化がない限り、オプションフラグ-d
のバリデータには多くの制限があります。もちろん、optarg[0]
提供されたパスが実際にあり、パスが含まれているかどうかを/
確認するタスクがありますが、:
実行するすべてのテストを使用しているので、*
実際にエラーなしで実行しても驚くことはありません。sudo useradd -d /home/my:base [username]