LOGIN(1)

이름
login - 시스템 접속

사용법
login [ 이름 ]
login -p
login -h 호스트이름
login -f 이름

설명
login 풀그림은 한 시스템에 접속처리를 하는 풀그림이다. 또한 현재 접속 중에서도 한 사용자에서 다른 사용자로 바꾸고자 할 때도 사용될 수 있다. (한편, 대부분의 요즘 만들어진 쉘은 그 쉘 내부적으로 이러한 기능을 제공하고 있기도 하다.)

아무 옵션 없이 사용하면, 사용자 계정을 물어보는 프롬프트가 나타난다.

이때 입력되는 계정이 root가 아니고, /etc/nologin 파일이 있으면 그 파일안에 내용이 보여지고 이 풀그림은 종료된다. 이것은 시스템 검사나 기타 사정상 일반 사용자 접속을 하지 못하도록 할때 사용된다.

/etc/usertty 파일에서 특정 사용자의 로그인 허용과 거부가 지정되어 있을 때, 만일 그 사용자가 접속하고자 할 때는 그에 따른 접속처리를 한다. 이때, 접속거부되면 로그인은 끝나고 syslog 명령이 작동되어 그 상황을 기록한다. 자세한 이야기는 아래 "특별 접근 거부" 부분에서 다룬다.

/etc/securetty 파일에서는 root로 접속할 수 있는 터미날들이 나열되어 있다. 이때 접속 실패가 일어나면 syslog 명령이 작동되어 그 상황을 기록한다.

사용자 계정의 확인 절차가 끝나면, 비밀번호를 물어보는 프롬프트가 나타난다. (그 사용자의 계정에서 비밀번호가 필요하면 나타난다.) 이때, 10번동안 비밀번호를 틀리게 입력하면 login은 종료된다. 그런데, 처음 세번은 바로 다시 물어보지만, 다음부터는 매우 느리게 반복된다. (로그인 과정이) 물론 이 과정들도 syslog 명령에 의해 그 상황이 기록된다.

.hushlogin 파일 $HOME 경로안에 있으면, 새로 도착한 편지가 있을 때 보여주는 메시지와 마지막 로그인한 시간을 알리는 메시지를 보여주지 않는다. 이 파일이 없고, /var/log/lastlog 파일이 있으면, 그 파일에서 마지막 로그인 시간을 읽어 보여주고, 그 파일에, 현재 로그인을 기록한다.

로그인 계정, 비밀번호 확인철자가 끝나면, 다음은 터미날의 UID, GID 설정같은 관리작업들을 무작위로 수행한다. TERM 환경변수가 사용되고 있으면, 이 환경변수를 지정하고, ( -p 옵션이 사용되면 다른 환경변수가 지정된다) HOME, PATH, SHELL, TERM, MAIL, LOGNAME 환경변수들을 지정한다. 일반 사용자라면 경로를 초기값으로 아래와 같이 지정하고,
/usr/local/bin:/bin:/usr/bin:. root라면 초기값으로 아래와 같이 지정한다.
/sbin:/bin:/usr/sbin:/usr/bin
마지막으로 "조용한" 로그인이 아니라면, 그날의 메시지를 출력하고, /usr/spool/mail 경로안에 그 사용자 이름으로 된 파일의 크기가 0이 아닌지 확인해서 0이 아니면, 편지가 있다고 알려준다.

다음 사용자 쉘을 지정하는데, /etc/passwd 파일에서 그 사용자의 쉘이 지정되어 있지 않으면, /bin/sh 쉘을 사용한다. 또한, /etc/passwd 파일에서 홈 경로가 지정되어 있지 않으며, / 경로로 로그인된다.(홈 경로는 위에서 설명한 .hushlogin 파일이 있는지 확인할 때 검사된다.)

옵션

-p  login 실행할 때 이전 환경들을 그대로 사용하도록 getty(8) 명령에 의해 사용된다.

-f  두번째 로그인일 경우에는 그 인증(계정확인절차)을 통과한다. root 계정일 경우에는 작동되지 않으며, 리눅스에서는 바르게 작동되지 않을 수도 있다.

-h  리모트 호스트 로그인시(가령, telnetd(8) 사용) 계정 입력을 통과한다. 물론 utmp, wtmp 기록은 있다. 이 옵션은 단지 root만이 사용할 수 있다.

특별 접근 거부
/etc/securetty 파일에는 root가 접속 할 수 터미날이 나열되어 있다. 이 터미날 이름은 /dev/ 글자를 생략한 터미날 이름만이다. 이 파일이 없다면 root는 모든 터미날에서 접속이 가능하다.

/etc/usertty 파일에는 특정 사용자의 접속에 대한 특별한 설정 내용이 있다. 이 파일이 없다면, 어떠한 특정 사용자의 접속 거부같은 없다. 이 파일의 세부분으로 구성되어 있는데, 각각 그 부분들의 이름은 CLASSES, GROUPS, USERS 이다. CLASSES 부분에서는 터미날의 클래스와 호스트이름 패턴이 정의되고, GROUPS 부분에서는 그룹 단위의 허락되는 터미날과 호스트가 정의되고, USERS 부분에서는 사용자 단위의 허락되는 터미날과 호스트가 정의된다.

이 파일의 각 줄은 255 문자를 넘을 수 없으며, # 문자로 시작하는 그 줄 전체는 주석으로 처리된다.

  CLASSES 섹션
CLASSES 섹션은 대문자로 첫칸부터 CLASSES라고 씀으로 정의된다. 이 부분은 다음 섹션이 정의되기 전까지 모든 부분이 포함된다. 각 단어의 구분은 공백문자나 탭문자로 한다. 각 줄에는 터미날과 호스트 패턴의 클래스가 정의된다.

각 줄의 처음은 관리자가 정의하는 클래스 이름이 오고, 그 다음에는 그 클래스에서 사용하는 터미날과 호스트 패턴이 온다. 이 클래스 이름은 다음에 오는 GROUPS, USERS 섹션에서 사용될 수 있다.

CLASSES 섹션 예제:

CLASSES
myclass1		tty1 tty2
myclass2		tty3 @.foo.com

윗 예제는 myclass1 과 myclass2 클래스를 오른쪽 부분과 같이 정의한 것이다.

  GROUPS 섹션
GROUPS 섹션에서는 유닉스 그룹 단위의 허락되는 터미날과 호스트가 정의된다. 접속하는 사용자의 그룹이(이것은 /etc/passwd 파일과 /etc/group 파일에서 확인됨)이 /etc/usertty 파일의 GROUPS 섹션 부분에서 정의된 그룹이라면, 그에 해당되는 터미날과 호스트에만 접속이 가능해 진다.

GROUPS 섹션은 첫칸에 대문자로 GROUPS 이라고 씀으로 정의가 시작되고, 다음섹션의 정의가 나타나기 전까지 이 섹션으로 가정한다. 각 단어의 구분은 공백문자나 탭문자로 하며, 각 줄의 처음에는 그룹이 오고 다음에는 그 그룹에서 접근할 수 있는 터미날과 호스트가 온다. 또한 허락되는 터미날과 호스트 부분에서 앞 CLASSES 섹션에서 정의한 클래스 이름이 사용될 수도 있다.

GROUPS 섹션의 예제:

GROUPS
sys		tty1 @.bar.edu
stud		myclass1 tty4

윗 예제는 sys 그룹의 사용자는 bar.edu 도메인을 가진 호스트에서, tty1로만 접속이 가능하다. stud 그룹의 사용자는 myclass1 클래스 또는 tty4로만 접속이 가능하다.

  USERS 섹션
USERS 섹션은 첫칸에 USERS 라고 대문자로 씀으로 정의된다. 각 단어의 구분은 공백문자와 탭문자로 하며, 첫칸에는 사용자 계정, 다음에는 그 계정 사용자가 접속 할 수 있는 터미날과 그 사용자가 접속 시도하는 호스트가 정의된다. 물론 터미날과 호스트 정의부분에서 앞 CLASSES 섹션에서 정의한 클래스가 사용될 수도 있다.

USERS 섹션 예제:

USERS
zacho		tty1 @130.225.16.0/255.255.255.0
blue		tty3 myclass2

윗 예제는 zacho 계정 사용자는 IP 주소가 130.225.16.0 부터 130.225.16.255 범위 안의 호스트에서 이 컴의 tty1로 접속 하고자 할 때만 접속을 할 수 있다. blue 계정 사용자는 myclass2에서 정의된 환경과 tty3으로만 접속할 수 있다.

USERS 섹션안에서 사용자 계정 부분에 * 문자가 올 수도 있다. 이것은 초기값 지정이며, 모든 사용자에게 적용된다.

접속하고자 하는 사용자의 계정과 그룹이 USERS, GROUPS 섹션 두 부분에서 모두 적용되면 각 섹션에서 정의된 모든 터미날/호스트가 적용된다.

  Origins
터미날과 호스트 정의 부분에는 클래스, origin이라고 부르는 일군의 문자열이 사용된다. 이 origin 문자열은 다음과 같은 형식을 취한다.

o   터미날의 이름에는 /dev/ 부분이 빠진다. 즉, tty1, ttyS0 형식으로 사용된다.

o   @localhost 문자열은 로칼 호스트에서 telnet/rlogin으로 접속하는 사용자를 의미한다. 즉 `xterm -e /bin/login' 명령같은 것이 실행된다는 것을 의미한다.

o   @.some.dom 문자열은 리모트 호스트 접속시 그 사용자가 rlogin/telnet으로 도메인이 .some.dom로 끝나는 호스트에서만 접속할 수 있다는 것을 의미한다.

o   IP 주소의 영역은 @x.x.x.x/y.y.y.y 이런 식으로 정의하는데, 이것은 x.x.x.x 에서 y.y.y.y 범위의 IP 주소를 가진 호스트에서만 접속이 가능하다. 예를 들어, @130.225.16.0/255.255.254.0 으로 정의하면, IP의 범위가 130.225.16.0 - 130.225.17.255인 호스트에서만 접속이 가능하다.

기타 origin 에서 사용되는 문자열로 시간을 정할수 있는데, 그 형식은 다음과 같다.

timespec    ::= '[' <day-or-hour> [':' <day-or-hour>]* ']'
day         ::= 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | 'sun'
hour        ::= '0' | '1' | ... | '23'
hourspec    ::= <hour> | <hour> '-' <hour>
day-or-hour ::= <day> | <hourspec>

예를 들어, [mon:tue:wed:thu:fri:8-17]tty3 문자열은 월요일부터 금요일까지, 오전 8시 00분부터 오후 5시 59분까지만 tty3으로 접속할 수 있음을 의미한다. 시간 지정에서는 단지, a-b 식으로 정의되면 a시 00분 부터 b시 59분까지를 의미하며, 단지 단일 숫자만 있으면(가령 10) 그 시간만(10시 00분부터 10시 59분까지)을 의미한다.

시간부분의 설정이 지정되지 않으면 어떠한 시간에도 접속이 가능하다. 각 요일별로 그 시간을 따로 정하고 싶으면 각 요일 정의다음에 시간을 각각 따로 정의 할 수도 있다. 시간지정에서는 공백문자를 사용할 수 없다.

만약 /etc/usertty 파일에서 각 정의들이 바르지 못하게 정의된다면, 모든 사용자의 특별 접속 거부 같은 것은 없다.

관련 파일
/var/run/utmp
/var/log/wtmp
/var/log/lastlog
/etc/motd
/etc/passwd
/etc/nologin
/etc/usertty
$HOME/.hushlogin

관련 항목
init(8), getty(8), mail(1), passwd(1), passwd(5), environ(7), shutdown(8)

벌레
리눅스에서는 다른 옛날 운영체제와 달리 한 사용자의 중복 로그인을 제한하지 않는다.

설명되지 않은 BSD의 -r 옵션은 지원되지 않는다. 이 옵션은 어떠한 rlogind(8) 풀그림에서 필요할 지도 모른다.

만든이
Derived from BSD login 5.40 (5/9/89) by Michael Glad (glad@daimi.dk) for HP-UX
Ported to Linux 0.12: Peter Orbaek (poe@daimi.aau.dk)