adduser.conf NAME_REGEX が機能しない

adduser.conf NAME_REGEX が機能しない

新規ユーザー向けのルールを設定しようとしています。

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

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

しかし、その後、システムはユーザーを受け入れなくなり、常に「NAME_REGEXin に一致しない」と表示されます/etc/adduser.conf

行をコメントアウトすると、すべてのユーザーが受け入れられますが、これも望んでいません。すべてのユーザーに次のポリシーを適用したいのです。

  1. 大文字で始まる必要があります

  2. ユーザー名は、最低 5 文字、最大 9 文字にする必要があります。たとえば、「Newuser」は受け入れられますが、「newuser」は受け入れられず、「Hereisanewuser」も受け入れられません。

どうすればいいでしょうか?

答え1

上記の正規表現をいくつかテストしましたがNAME_REGEX成功しませんでした (\少なくとも HTML コードでは一部の文字が隠れています) が、次のようにピリオド記号を含む適切で機能する正規表現を記述することができました。

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

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

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

答え2

これを使って:

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}$"

答え3

すでに正しい回答があり、私が提供する回答は、最終的には他の回答ですでに提案されていることをそのまま実行することを提案しているため、技術的には重複していますが、説明をするにはここで行う方が良いと思います。

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}48

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

答え4

これをテストしたところ、動作しました。

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

似ている:最初の文字が大文字かどうかを確認する正規表現

関連情報