web-dev-qa-db-ja.com

adduser.conf NAME_REGEXが機能していません

新しいユーザーにルールを設定しようとしています。

次の行を追加して、/etc/adduser.confファイルを変更しました。

NAME_REGEX="[A-Z]{1}[a-z]{5,9}$"

しかし、その後、システムはユーザーを受け入れません。NAME_REGEX内の/etc/adduser.conf

行をコメントすると、すべてのユーザーが受け入れられますが、どちらも必要ではありません!すべてのユーザーに次のポリシーを適用してください。

  1. cAPS-ON-Letterで開始する必要があります

  2. ユーザー名には、最低5文字、最高9文字が必要です。例えば「newuser」は受け入れられ、「newuser」は受け入れられず、「Hereisanewuser」も受け入れられません。

どうすればいいですか?

2
ZelelB

これを使って:

NAME_REGEX="^[A-Z][[:alpha:]]{4,8}$"

これは、名前の先頭で[A-Z]と一致し、名前には任意のアルファベット文字を含めることができます。つまり、[A-Za-z]で、合計文字数は5〜9です。

一方、最初の大文字の後に小文字のみが必要な場合:

NAME_REGEX="^[A-Z][a-z]{4,8}$"

さらに、任意の数字または大文字/小文字が必要な場合(文字クラスを使用):

NAME_REGEX="^[A-Z]([[:alpha:]]|[[:digit:]]){4,8}$"

範囲の使用:

NAME_REGEX="^[A-Z]([A-Za-z]|[0-9]){4,8}$"
2
heemayl

すでに正しい答えがありますが、最終的には、他の答えがすでに示唆していることを正確に行うことを提案しますので、技術的にはこれは重複していますが、ここで説明する方が良いと思います。

NAME_REGEX="[A-Z]{1}[a-z]{5,9}$"

この正規表現は、最後の部分が大文字で始まる6〜10文字の部分文字列である文字列と一致するため、「usErname」、「USErname」、「12Ername」などの文字列と一致します。

これはあなたが期待しているものではないという事実を除けば、ユーザー名が受け入れられないという事実はおそらく(おそらくおそらく残念ですが、 /etc/adduser.confは非常に不十分に文書化されています )事実、正規表現は開始時と終了時の両方に固定する必要があります(他の可能性は、上記の基準に一致しないユーザー名を使用して常にテストしていることです)。

そのため、すでに提案されているように、最初に文字列の先頭を固定します。

NAME_REGEX="^[A-Z]{1}[a-z]{5,9}$"

次に、文字クラスはデフォルトで1つの出現のみに一致するため、文字クラス{1}の後にある出現回数指定子[A-Z]を削除できます。

NAME_REGEX="^[A-Z][a-z]{5,9}$"

次に、5〜9文字の文字列を受け入れるため、出現回数指定子{5,9}から4および8の出現回数の最小値と最大値をデクリメントする必要があります。

NAME_REGEX="^[A-Z][a-z]{4,8}$"
2
kos

これをテストし、動作します。

NAME_REGEX="^[A-Z][a-z]{4,8}$"

同様: 正規表現とチェックの場合、最初の文字が大文字

1
mchid

成功せずにNAME_REGEXの上記の正規表現のいくつかをテストした後(少なくともHTMLコードは\文字を隠しています)、ピリオド記号を含む適切で動作するものを次のように作成しました。

NAME_REGEX="^[a-z][-a-z0-9_\.]*\$?$"

つまり、a-zで始まり、その後に任意の数のダッシュ、a-z0-9、またはアンダースコアまたはピリオドが続き、オプションの$で終わる場合があります。

(いくつかのDebianベースのディストリビューションのadduser.confファイルのデフォルトのコメントアウトされた設定行でさえ、$構文ではなく、\$ではなく\$?$構文を持っていることに注意してください)。

1
Sergio