家なしでユーザーを作成する正しい方法(shadow.serviceの場合)

家なしでユーザーを作成する正しい方法(shadow.serviceの場合)

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ベースのディストリビューションに既に既に存在する(次のパッケージバージョンのソースコードにすでに含まれていますpwcklogin.defsshadow-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/falsenobody

  • /nonexistentシェルを使用するが使用を許可する他のディストリビューションが見つかりました/bin/sh


使用時の問題sudo useradd [username]は、システムプリセットオプション/etc/login.defsに違反しても実行時に無視できることです/etc/passwd

テストしてからかなり時間が経ってuseraddもソースコードに大きな変化がない限り、オプションフラグ-dのバリデータには多くの制限があります。もちろん、optarg[0]提供されたパスが実際にあり、パスが含まれているかどうかを/確認するタスクがありますが、:実行するすべてのテストを使用しているので、* 実際にエラーなしで実行しても驚くことはありません。sudo useradd -d /home/my:base [username]

おすすめ記事