# 문자 "#username"이 앞에 붙은 여러 계정이 포함된 Solaris 11 서버의 계정 목록을 받았습니다. (LDAP는 사용하지 않으며 모든 계정은 로컬 Solaris 서버 계정입니다.)
서버 관리자는 앞에 #이 붙은 Solaris 계정을 사용하여 로그인할 수 없다고 말했습니다. 나는 이 주장을 뒷받침하는 몇 가지 문서를 찾으려고 노력했지만 겨우 찾았습니다.https://forums.gentoo.org/viewtopic-t-513008.html기여자 중 한 명은 etc/passwd에 한 줄을 접두어로 붙이면 계정의 첫 번째 문자에 #이 붙는다고 썼습니다. (이 논의는 2005년에 나온 것이며 솔라리스나 다른 Unix 기반/파생 운영 체제와 관련이 있는지는 확실하지 않습니다.)
그렇다면 #이 붙은 Solaris 계정을 사용하여 로그인하는 것이 가능합니까? 아니면 OS가 성공적인 로그인을 방해합니까?
답변1
~에 따르면passwd(5)
수동, 알파벳이 아닌 문자로 시작하는 사용자 이름은 경고를 생성해야 합니다(아마도 passwd
데이터베이스에 액세스할 때).
관리자는 로그인이 허용되지 않아야 하는 사용자 항목이 단지 로그인이 허용되지 않는다는 사실에 의존할 수 있습니다.보기 흉한 것(참고로 시설은 없습니다.댓글 달기파일의 줄 passwd
).
잘못된 항목에 의존하지 말고 대신 로그인을 허용해서는 안 되는 사용자에 대해 올바른 제한을 사용하는 것이 좋습니다 passwd -N username
(참조passwd(1)
) 또는 유사한 메커니즘을 통해. 또는 사용자가 시스템에 존재하지 않아야 하는 경우 삭제될 수도 있습니다.
답변2
예, 비밀번호 테이블에는 주석이 포함될 수 있습니다...
...그러나 Illumos, OpenBSD 또는 Linux에서는 그렇지 않습니다.소스 양식. Gentoo Linux WWW 사이트에 글을 쓰는 사람들은 다양한 운영 체제를 충분히 경험하지 못했습니다.
파일 형식아니 똑같다모든 운영 체제에서. FreeBSD에서는 /etc/master.passwd
파일을 읽을 때 줄 주석을 허용합니다. 이는 Linux, OpenBSD 및 Illumos /etc/passwd
또는 /etc/master.passwd
파일 파서의 경우에는 해당되지 않습니다.
보시다시피 처음 몇 줄은초기 FreeBSD /etc/master.passwd
파일주석 라인입니다. 여기서FreeBSD 프로그램에서는 pw_mkdb
명시적으로 무시됩니다.. OpenBSD에는 pw_mkdb
이것이 부족하며 /etc/master.passwd
기본적으로 주석이 없습니다.
물론 pw_mkdb
프로그램이 소스 코드를 시스템 계정 데이터베이스에서 항목을 찾는 라이브러리 루틴이 사용하는 실제 데이터베이스로 컴파일하면 주석은 필터링됩니다. 실제로컴파일된데이터베이스 형식은 Berkeley DB이며 주석이 없습니다.
BSD와 달리 Linux 사용자 계정 데이터베이스 하위 시스템은 색인화되고 컴파일된 데이터베이스 파일을 사용하지 않습니다. 그러나 원본 플랫 테이블을 구문 분석하는 조회 라이브러리 루틴은 주석을 허용하지 않습니다. Illumos와 그 이전의 OpenSolaris도 마찬가지입니다.
아니요, 사용자 이름에는 실제로 # 문자가 포함될 수 없습니다.
POSIX 지정가지고 다닐 수 있는계정 이름에는 소위 문자만 포함될 수 있습니다.이식 가능한 파일 이름 문자 집합, 이름의 첫 번째 문자에 대한 추가 제한이 있습니다. 이 세트에는 이 문자가 포함되어 있지 않습니다 #
.
첫 번째 문자에 대한 추가 제한은 #
계정 이름에 문제를 일으키는 원인과 관련이 있으므로 중요합니다. 계정 이름은 프로그램에 대한 매개변수로 사용되며, -
일반적으로 다음 으로 시작하는 매개변수는옵션논쟁. (예, 계정 이름이 옵션 매개변수로 처리되는 것을 방지할 수 있는 방법이 있지만 이는 보편적이거나 표준화되지 않습니다.)
이것이 문제의 핵심입니다. 테이블의 실제 소스 형태는그 자체␊
계정 이름을 사용하여 필드 구분 기호( ), 레코드 구분 기호( :
) 또는 (FreeBSD의 경우) 줄 끝 주석 리더( )를 제외한 레코드의 첫 번째 필드에 모든 문자의 사용을 허용합니다.#
다른 많은 경우에는더 많은 제한이 적용되었습니다.
- C 라이브러리 루틴은 이러한 필드를
␀
로 끝나는 문자열로 처리하므로 해당␀
문자를 포함할 수 없습니다. - 앞서 언급했듯이 계정 이름은 명령 인수로 사용되며, 특히
getty
프로그램에서login
이전 운영 체제로 전달되는 인수로 사용됩니다. (Illumos는 Unices 계열에 속하며,getty
이 프로그램은 1988년에 취소되었습니다.,틀림없이. )␀
문자 및 이니셜 은 제외됩니다-
. - 계정 이름은 의 설정에서 변수 할당을 사용하여 셸 스크립트(또는 그 근사치)에서 구성되므로
/etc/rc.conf
해당 스크립트를 손상시키는 셸 메타 문자가 사용되지 않습니다. 따라서 쉘 메타 문자로는 사용되지 않습니다./etc/sysconfig/wibble
#
- 계정 이름은 환경 변수와 쉘 변수에 저장됩니다. 따라서
␀
문자 및 (분석 과정에서 모호성을 유발할 수 있는) 문자는 사용되지 않습니다.=
- 계정 이름은 .INI 파일에 구성되므로 , 및 를 포함한 .INI 파일의 메타 문자를 사용하지
=
않습니다#
.;
- … 등.
따라서 다음을 사용하더라도 #
아무 것도 주석 처리되지 않습니다.비밀번호 파일에Illumos에서는 이를 사용하면 꽤 많은 문제가 발생합니다.다른 곳에서.
특수 계정 이름의 경우 다음을 사용하십시오.
... FreeBSD의 초기 문자 규칙 _
, 데비안의 접두사 규칙과 유사 Debian-
, 또는다니엘 J. 번스타인 컨퍼런스첫 글자는 대문자입니다 G
.
계정을 잠그려면 다음을 사용하세요.
...먼저 올바른 레코드 필드를 확인하세요! 이것은 이름 필드가 아닙니다. 비밀번호 입력란입니다.Illumos의 잠긴 계정과 로그인하지 않은 계정에 대한 특수 값이 포함되어 있습니다..
답변3
사용자 이름
사용자의 로그인 이름입니다.
로그인 및 역할 필드에는 영문자, 숫자, 마침표(.), 밑줄(_) 및 하이픈(-)으로 구성된 8바이트 이하의 문자열을 허용합니다. 첫 번째 문자는 문자여야 하며 필드에는 알파벳 소문자가 하나 이상 포함되어야 합니다. 이러한 제약 조건이 충족되지 않으면 경고 메시지가 표시됩니다.
#
a로 시작하는 사용자 이름으로 로그인할 수 없다는 문서는 없습니다 .
이러한 보안 관련 상황에서 그러한 행동을 뒷받침하는 문서가 없는 상황에서 로그인이 허용되지 않는 계정에 의존하는 것은 유능한 시스템 관리자의 행동이라고 할 수 없습니다.
시스템 관리자는 다음과 같습니다.희망이러한 행위는 앞으로도 계속될 것입니다. 희망매우 낮은 안전 한계입니다.