[Linux/리눅스] /etc/passwd, shadow 로그인 과정

1. /etc/passwd
1) 로그인을 하는 과정
  • 사용자가 로그인 버튼을 눌리면 사용자 계정명은 중복이 불가능(명령어를 사용할 때)하므로, 위에서부터 차례대로 읽어서 입력된 사용자 계정명을 찾는다. (계정명은 하나라고 인식하고 있다.)
  • x를 보면 사용자 계정명을 가지고 /etc/shadow 파일로 넘어간다. 위에서부터 해당 계정명을 찾고 암호화된 비밀번호와 입력된 비밀번호가 맞는지 대조함. 그래서 맞으면 다시 /etc/passwd 파일로 넘어가고 그렇지 않으면 로그인 실패 창이 뜨게 된다.
  • 그 다음 Uid, Gid, 홈 디렉터리(로그인했을 때 있는 장소)를 세팅하고, 마지막 부분은 Uid를 가지고 실행하려고 함. 즉, Uid를 가지고 /bin/bash를 실행하므로 여기서 최고 관리자와 일반 사용자로 결정돼서 로그인이 된다.
2) x가 없다면?
x는 /etc/shadow 파일을 참조하라는 의미를 가진다. 그래서 만약 x가 없다면 참조를 안 하므로 비밀번호를 안 물어본다. 단, 리눅스에 직접 접속했을 때만 가능하다. 원격이면 무조건 비밀번호를 물어본다.
예) abc : : 9005:9005:/home/abc:/bin/bash
이 경우라면 비밀번호를 물어보지 않는다는 의미이다.
3) vi 편집기를 사용해서 passwd 파일을 직접 수정한다면?
명령어로는 동일한 계정명, Uid를 가질 수가 없는데, 파일을 직접 수정하면 가능하다. 아무 계정에다가 Uid를 0으로 바꾸면 최고 관리자가 될 수 있다. 0은 최고 관리자, 나머지는 일반 사용자다.
4) /bin/bash 를 지워버리면?
-sh-4.1# 으로 실행이 되는데 -sh는 리눅스의 기본 기능이다. shell 자리에 아무것도 없으면 기본 기능으로 shell을 수행한다. -4.1은 버전이다.

abc : x : 0 : 0 : : /root : ^c 제일 마지막 shell의 자리는 무조건 실행한다. ^c을 계속 실행하려고 하니 로그인은 불가능하다. 마지막 자리는 shell의 경로가 오든지 비워둬야 한다. 만약 뒤에 ^c 문자가 무조건 붙어서 지울 수가 없다면 홈 디렉터리쪽에 붙여버리면 된다. abc : x : 0 : 0 : : /root^c 이렇게 해서 제일 마지막인 shell의 위치를 지워서 로그인을 성사시킨다.
5) 실행 부분에 /sbin/nologin 를 넣어버리면?
로그인을 못 하게 차단시켜버리는 것. 한 번 실행하고 바로 빠져나가버린다. 계정 전환도 안 되고, 최고 관리자도 절대 로그인 못 한다.

관리자에 /sbin/nologin 을 걸었다면, 로그아웃해버리면 관리자로 접속을 못 하기 때문에, 불안하다면 /bin/bash를 여러 개를 실행해놓자.


2. /etc/shadow

1) 암호화 방식?
'$숫자'로 어떤 암호 방식인지 파악할 수가 있다. '$5'인 경우는 md5를 사용하여 암호화를 시킨다. 실제 리눅스에서는 'md5 + 알파'라서 암호화된 코드가 바뀐다.
2) 사용자들끼리 비밀번호를 바꾸려면?
앞에 있는 계정명을 바꾼다. abc의 계정 비번이 123인데 root와 abc의 계정명만 바꿔치기하면, root로 로그인을 할 때 비밀번호를 123으로 인식을 한다.

root 사용자로 로그인을 하고 싶다면 abc의 계정을 원래 root보다 더 위쪽에 올려두고 계정명을 root로 바꾸면 된다. 위에서부터 차례대로 읽어 내리고 동일한 계정은 존재할 수 없다는 이유로, 위에서 내려오면서 해당 계정명을 찾으면 바로 그걸로 비밀번호 대조를 한다.

Comments