웹 개발자, 오퍼레이터 등의 사람들은 각자 다른 사용자 계정을 가져야 한다.
계정에 대한 정보를 관리하고 운영하는 몇 가지를 알아보겠다.
사용자 계정과 관련된 파일 (반드시 기억해야 됨)
1) /etc/passwd : 사용자 계정에 대한 정보 포함 (id 등), 삭제하면 정상부팅 되지 않음
2) /etc/shadow : 사용자의 암호가 저장된 파일
3) /etc/group : 사용자의 그룹에 대한 정의가 되어있는 파일
/etc/passwd를 열어 내용을 보자.
위에서 라인 한 개당 사용자 계정 1개이다.
라인의 컬럼을 콜론(:)으로 구분했을 때 무조건 7개이다.
- 1번째 컬럼 : 이름
- 2번째 컬럼 : 암호화된 패스워드
- 3번째 컬럼 : 사용자 번호 (uid)
- 4번째 컬럼 : 소속된 그룹 번호 (gid)
- 5번째 컬럼 : 설명 (보안상 짧은 게 좋기 때문에 보통 비어있다.)
- 6번째 컬럼 : 홈 디렉토리 (계정이 로그인했을 때 처음 위치하는 디렉토리)
- 7번째 컬럼 : 사용하는 쉘 프로세스 (사용자와 커널(OS)을 연결해주는 프로그램)
( /bin/sh : 본쉘 , /bin/bash : 업데이트된 본쉘(bourne again shell) )
대부분은 bash라는 쉘을 사용한다.
위에서 pwunconv(password unconvert)라는 명령어로 passwd의 암호가 보이도록 설정했고, (pwconv로 다시 설정 가능)
passwd라는 명령어(root만 사용 가능)를 사용하여 lee의 암호를 lee로 변경하였다.
하지만 passwd를 보면 lee의 암호가 나와야 할 컬럼에는 'lee'는 없고 이상한 문자열이 있다.
이것은 해쉬로 암호화된 패스워드이다.
(passwd는 관리자,그룹,기타사용자 모두가 읽을 수 있기 때문에 패스워드 암호화됨)
* : 로그인할 수 없는 계정 (서비스 시작, 종료 목적으로 만들어진 계정이기 때문에)
! : 암호가 없는 계정 (계정이 존재하지만 로그인할 수 없는 상태(휴면 계정처럼))
나머지 : 암호화된 패스워드
passwd는 보안상 결함이 존재한다.
passwd 파일은 rw-r--r--(644)의 접근 권한을 가져, 모두 읽을 수 있다.(r)
하지만 위에서 봤듯이 passwd 파일에는 해쉬로 암호화된 패스워드가 있다.
그 말은, 모두가 암호화된 패스워드를 읽을 수 있다는 말이다.
사실 암호화된 패스워드는 C로 루프를 돌려 원래의 패스워드를 구할 수 있다. (with 딕셔너리)
(암호화된 패스워드는 $해쉬알고리즘$난수$암호화패스워드 이렇게 이루어져, 원래 패스워드 구할 수 있음)
이러한 배경에서 /etc/shadow라는 파일이 생성되었다.
/etc/shadow 파일은 r--r-----(440)의 접근 권한으로 기타 사용자는 읽을 수 없기에 passwd파일보다 훨씬 안전하다.
이처럼 암호화된 패스워드를 shadow 파일에서 조회할 수 있다.
- 1번째 컬럼 : 이름
- 2번째 컬럼 : 암호
- 3번째 컬럼 : 계정의 암호를 마지막으로 수정한 날짜 (1970년 1월 1일을 기준으로 지난 일수)
- 4번째 컬럼 : 미니멈 데이(minimum day)
- 5번째 컬럼 : 맥스 데이(max day)
- 6번째 컬럼 : 워닝 데이(warning day)
PASSWORD AGING (특정 일수가 지나면 암호를 만료시킴)
-m 미니멈 데이(minimum day) : 반드시 바꾼 암호를 사용해야 하는 최소 날짜 (이 날짜동안은 못 바꿈)
암호를 변경했다가 만료된 암호를 바로 다시 사용하는 것을 막기 위해 미니멈 데이 설정.
-M 맥스 데이(max day) : 암호가 만료되는 날짜
-W 워닝 데이(warning day) : 만료되기 전에 알려주기 시작하는 날짜
(만료 전 warning day 전부터 사용자 로그인 시 D-day 출력)
- 1번째 컬럼 : 그룹 번호
- 2번째 컬럼 : 그룹 암호
- 3번째 컬럼 : 번호
- 4번째 컬럼 : 그룹 멤버
그룹 소속
1) primary group (기본 그룹) (/etc/passwd 파일에 적혀있다.)
2) secondary group (보조 그룹) (/etc/group 파일에 적혀있다.)
gid에 적혀있는 것이 primary group, groups에 적혀있는 것이 secondary group이다.