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. CAPS-ON-Letter로 시작해야 합니다.

  2. 사용자 이름은 최소 5자, 최대 9자여야 합니다. 예를 들어. "Newuser"는 허용되어야 합니다. "newuser"는 허용되지 않으며 "Hereisanewuser"도 허용되지 않습니다!

어떻게 진행해야 하나요?

답변1

위의 정규식 중 몇 가지를 NAME_REGEX성공하지 못한 채 테스트한 후(html 코드는 \적어도 일부 문자를 숨기고 있음) 다음과 같이 마침표 기호를 포함하여 적절하고 작동하는 정규식을 작성했습니다.

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

이는 다음을 의미합니다. 로 시작하고 a-z그 뒤에 대시, 밑줄 또는 마침표가 여러 개 올 수 a-z있으며 0-9선택 사항으로 끝날 수 있습니다 $.

(일부 데비안 기반 배포판의 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}그런 다음 문자 클래스 뒤에 있는 발생 횟수 지정자를 제거할 수 있습니다 [A-Z]. 기본적으로 문자 클래스는 단 한 번의 발생과 일치하기 때문입니다.

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

그런 다음 5~9자 길이의 문자열을 허용하려면 발생 횟수 지정자의 최소 및 최대 발생 횟수를 and {5,9}로 줄여야 합니다.48

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

답변4

이것을 테스트했는데 작동합니다.

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

비슷한:첫 번째 문자가 대문자인지 확인하는 정규식

관련 정보