Debianパッケージはどのようにユーザーアカウントを作成すべきですか?


33

パッケージqqq.debは、ユーザーアカウントqqqから実行するプログラムをインストールしuqqqます。パッケージは、qqqプログラム、構成qqq.confファイル、および/etc/init.d/qqqinitscript で構成されています。

パッケージはユーザーの作成をどのように管理する必要がありますuqqqか?これに関するベストプラクティスや公式ガイドラインはありますか?

  1. uqqqpostinstでユーザーを自動的に作成するだけです。
  2. /etc/init.d/qqqスクリプトからの最初の起動時に自動的にユーザーを作成します。
  3. qqqプログラムの最初の起動時に自動的にユーザーを作成します(引数なし)
  4. ユーザーアカウントを作成しないでください。ユーザーが管理者によって明示的に作成されない限り(たとえば、を使用してqqq --create-user)、開始を拒否してください。
  5. ユーザーアカウントを作成しないでください。デフォルトでは、ルートから安全に実行できません。
  6. qqqユーザーを作成するかどうかをpostinst、init.dスクリプト、またはそれ自体でインタラクティブに確認します。

パッケージはアンインストール時にユーザーアカウントを削除する必要がありますか?


7
最も簡単な方法は、この質問の答えに到達することです。公式Debianパッケージのインストール前/インストール後のスクリプトを調べることです。grep adduser /var/lib/dpkg/info/*.postinstDebianベースのシステムで実行して、多くの例を入手してください。
ジョフェル

adduserを使用する場合は、パッケージに依存する必要もあります。参照:lintian.debian.org/tags/...
Lekensteyn

回答:


22

Debian wikiには、前述のDebianポリシーマニュアルよりも包括的かつ具体的なガイダンスがあります。AccountHandlingInMaintainerScriptsを参照してください。

--userオプションで呼び出された場合、adduserプログラムは正しいことを行います。したがって、通常、呼び出す必要があるのは

adduser --system $ USERNAME

postinstでログインを無効にしたアカウント、nogroupのプライマリグループ、/ homeの下にホームディレクトリを作成します。他のオプションが必要な場合は、必要に応じて追加します。

通常、adduser --systemが正しいことを行うため、アカウントが既に存在するかどうかをgetentとクロスチェックする必要はありません。そうでない場合は、adduserに対するバグを報告して、メンテナースクリプトをシンプルにしてください。

アカウントの削除に関するアドバイスは決定的ではありません。ただし、対応するfedoraのアドバイスは曖昧ではないことに注意してください。

ユーザーまたはグループ削除しないでくださいパッケージによって作成されたユーザーまたはグループを削除することはありません。それらのユーザー/グループが所有するファイルが取り残されているかどうかを確認する正しい方法はありません(そして、もしあるとしても、私たちはそれらをどうしますか?)意味的に無関係なユーザー/グループが後で作成され、UID / GIDを再利用する場合。また、一部のセットアップでは、ユーザー/グループの削除が不可能または望ましくない場合があります(たとえば、共有のリモートユーザー/グループデータベースを使用する場合)。未使用のユーザー/グループのクリーンアップは、システム管理者が必要に応じて処理できるようにします。


12

パッケージをインストールする管理者として、preinstまたはpostinstで必要なユーザーをパッケージが自動的に作成し、ユーザーが所有する必要のあるファイルをプログラムの実行前に作成できるようにすることを期待します。

プログラムは、必要な場合(たとえば、特権ポートにバインドする場合)にのみrootとして実行する必要があり、理想的には、必要なrootの実行が完了したら特権をドロップする必要があります。

以下を使用して、他の(インストール済み)パッケージがこれをどのように処理したかを見ることができます。

grep -l adduser /var/lib/dpkg/info/*postinst /var/lib/dpkg/info/*preinst

リストされたファイルの読み取り(ほとんどの場合、1行以上のオプションが必要です)。

奇妙なことに、ユーザーを作成する私のインストール済みパッケージの1つを除くすべてがユーザーのadduser追加に使用されますが、adduserパッケージは必須のパッケージではないため、それに依存するようにパッケージをビルドする必要があります。このuseraddプログラムはlibuuid1パッケージで使用され、passwd必須パッケージであるパッケージの一部です。


1
それはひどいです。手動でハッキングするのではなく、preinstスクリプトを生成する適切な方法を確認してください。
LtWorf

--quietアプローチは非常に人気のようだ
vidstige

6

セクション10.9。Debianポリシーマニュアルの許可と所有者には、あなたが探しているものがあります(「バージョン3.9.5.0、2013-10-28」から):

パッケージに新しいユーザーまたはグループを作成する必要がある場合、2つの可能性があります。まず、バイナリパッケージの一部のファイルをこのユーザーまたはグループが所有する必要がある場合があります。または、ユーザーまたはグループID(名前だけではなく)をバイナリにコンパイルする必要がある場合があります(ただし、この場合、静的に割り当てられたIDが必要なので、可能です。

静的に割り当てられたIDが必要な場合はbase-passwd' maintainer, and must not release the package until you have been allocated one. Once you have been allocated one you must either make the package depend on a version of the/etc/passwd' or / etc / group 'に存在するIDを持つbase-passwd'パッケージからユーザーまたはグループIDを要求するか、正しいユーザー/グループを作成するようにパッケージを調整する必要がありますid(可能な場合はadduser') in itspreinst 'またはpostinst'. (Doing it in thepostinst' を使用することをお勧め します。そうでない場合は、 `adduser 'パッケージで事前依存関係が必要になります。)

注: debian-develリストは非常にアクティブであり、そのような質問に回答しています(ただし、その例は2003年のものです)。


3
だから、短い簡素化答えは「使用あるadduserpostinst」。
Vi。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.