본문 바로가기

Linux

useradd

1. 계정관리 및 원격접속
 

1.1 계정이란 ?

계정(Account)이란 사용자가 리눅스 시스템을 이용할 수 있는 자격을 의미한다. 

 

1.1.1 계정의 구성요소

계정의 구성요소로는 다음과 같으나 반드시 이 4개의 구성요소가 필요한 것은 아니다.


① 로그인명
로그인명은 쉽게 사람이 구별할 수 있는 이름이다. 그러나 리눅스 시스템은 로그인명으로 사용자를 구별하는

것이 아니라 사용자 ID. 즉 UID로서만 구별하게 된다. 따라서 로그인 명과 UID 등의 사용자 정보를 보관할 수

있는 파일이 필요하게 된다. /etc/passwd 파일이 사용자에 대한 정보를 가지고 있는 파일이다.


② 암호(패스워드)
암호(Password)는 시스템을 이용하려는 사용자가 과연 정당한 사용자인가를 판단하는 유일한 자료이다. 새도우

슈트를 사용하는 경우 /etc/shadow 파일에 관련 정보가 저장되게 된다.


③ 홈 디렉토리
홈 디렉토리는 사용자의 활동 공간이라고 볼 수 있으며, 파일 저장 등을 할 수 있는 공간이다.


④ 실행할 수 있는 쉘
쉘은 사용자의 명령을 받아들여 시스템을 사용할 수 있게 해주는 프로그램이다.

 

 

1.1.2 계정의 유형

 

① 로그인 명과 패스워드 이 2개의 구성요소만 주어지는 계정


사용자는 명령어를 내리거나 할 수 없고 허락된 작업. 즉 홈페이지의 내용을 보거나 피동적인 이용만 할 수 있

다. 일반적으로 이러한 계정은 보안을 염두에 두지 않아도 되며 보통 이런 목적으로는 단순히 홈페이지를 보거

나 하는 등의 단순한 용도로 사용하므로 사용자를 시스템에 등록하지 않고 데이터베이스를 이용하여 관리하게

된다. 즉 /etc/passwd 파일을 사용하지 않고 데이터베이스를 활용하여 단순한 회원관리 차원에서 사용자를 관

리하게 되는 것이다.


② 홈 디렉토리가 추가로 주어지는 계정


보통 메일계정을 준다고 하며, 메일을 받고 보관할 수 있는 홈 디렉토리까지 부여하게 되며, 실행할 수 있는

쉘을 주지 않는 것이 적당하다.


③ 쉘까지 주어지는 계정


실행할 수 있는 쉘까지 주어지는 완전한 계정이라고 할 수 있으며, 흔히 말하는 계정서비스가 이것을 의미한다

고 보면 된다. 계정 서비스를 하는 경우 일반사용자라 하더라도 시스템의 리소스를 활용하여 쉘을 실행하는 것

이므로 사용자 관리에 만전을 다하여야 한다.

 

 

1.2 사용자 계정 정보


리눅스에서 사용자는 크게 두부류로 나눌 수 있는데 시스템 관리자인 root와 그 외의 일반 사용자이다. root는

UID 0번으로 한 시스템에 반드시 root 권한을 갖는 사용자가 한 명이어야 한다는 제한이 없다. 외국의 경우 시

스템의 규모가 어느 정도 커지면, 네트워크 관리자, 시스템 관리자, 서버 관리자 등 세분화하여 관리자가 선임

되어 각각 맡은 업무를 실행하게 되나 아직까지 우리나라에선 한 명의 관리자가 시스템 전반에 대한 작업을 혼

자하는 것이 일반적이다.  사용자들에 대한 정보는 /etc/passwd 파일에 저장된다.

 

[ TIP : 가상의 사용자 ]
가상의 사용자란 패스워드가 없는 로그인과정을 거치지 않는 사용자로 다음과 같다.
  
daemon        시스템 서버 프로세스에 의해 사용되는 사용자
bin           실행가능한 명령어 파일을 갖고 있는 사용자
sys           시스템 파일을 갖고 있는 사용자
adm           계정관리에 관한 파일을 갖고 있는 사용자
uucp          uucp에 관한 파일을 갖고 있는 사용자
lp            프린터 명령에 관한 파일을 갖고 있는 사용자
nobody        웹서비스나 NFS 등 서비스를 받는 사용자

 

이들은 모두 자신들과 관련된 프로세스와 파일들에서 사용되는 사용자들이다. 이외에 cron, usenet, audit,

news 같은 사용자들도 시스템의 설정에 따라 존재한다.

 

 

1.3 사용자 정보 변경하기

 

1.3.1 /etc/passwd 파일을 활용한 수정하기


/etc/passwd 파일은 시스템 사용자에 대한 정보가 들어있는 파일이다. 이 파일을 직접 수정하여 정보를 변경할

수 있다.

/etc/passwd 파일은 7개의 필드로 구성되며, 필드를 구분하는 필드 구분자는 : (콜론)이다.


①로그인명 : ②암호 : ③UID : ④GID : ⑤정보 : ⑥홈디렉토리 : ⑦쉘


① 로그인명은 로그인 시 필요한 사용자 명이다
② 암호 필드는 새도우 슈트를 사용하는 경우가 일반적인데, /etc/shadow와 연결해 주는 일종의 토큰으로 X 표

시가 사용된다.
③ UID(User ID)는 시스템이 인식하는 사용자의 ID로, 리눅스에는 미리 지정된 사용자 ID 값이 있다. 예약된

UID는 다음과 같다.
  - 0     : 관리자
  - 1-100 : 시스템 관련 가상의 사용자와 예약된 사용자
  - 500~  : 일반사용자(일반사용자의 경우 별도로 정해주지 않으면 500번부터 자동 할당된다. )
④ GID는 그룹 ID로 여러 사용자가 공동 작업을 한다거나 하면 한 그룹으로 묶어 파일이나 시스템에 접근하게

하는 것이 편리할 것이다. 레드햇 계열의 배포판에서는 보안상의 이유로 한 사용자가 한 그룹을 구성하게 설정

되어 있다.
⑤ 정보 필드는 GECOS 정보, 혹은 핑거 정보라고도 하며 사용자에 대한 관련 정보가 들어가는 곳이다. 보안상

root 의 정보는 생략하는 것이 좋으며, 일반 사용자의 경우 본명이나 연락처 등의 정보를 기입하게 된다.
⑥ 홈 디렉토리 필드는 사용자가 로그인하면 머물게 되는 작업공간으로 root 라면 /root 디렉토리이고, 일반사

용자라면 /home/로그인명이 된다.
⑦ 쉘 필드는 사용자가 사용할 수 있는 쉘을 지정하는 필드로 리눅스에 설치된 쉘을 선택해서 사용할 수 있다.

쉘 뿐만아니라 명령어 등도 지정이 가능하며 쉘을 주지 않으려면 이 필드를 공란으로 비워두거나 /bin/false

등의 가짜 쉘을 지정하게 된다.

 

[ Tip ] /etc/passwd 파일과 보안

 

ㆍ 패스워드 없이 로그인하기
   시스템 보안 상 두 번째 필드를 유의해서 관리해야 한다. 두 번째 필드는 원래 암호화된 패스워드가 보관되

는 곳이었으나 새도우 슈트를 사용하므로 토큰인 x가 존재한다고 하였다. 그러면 이 두 번째 필드를 공란으로

만들면 어떻게 될까 ? 패스워드 입력없이 로그인 명으로만 로그인할 수 있다.


ㆍ 특정사용자 접속 금지시키기
   첫 번째 필드인 로그인 명이나 두 번째 필드에 임의의 문자를 첨가하면 어떻게 될까? 해당 사용자는 로그인

하지 못할 것이다. 로그인 명이 바뀌었거나 패스워드 토큰이 전달되지 않기 때문이며, 이 경우는 시스템 관리

자가 특정 사용자를 로그인 못하게 할 때 많이 사용된다. 즉, 일정기간 동안 시스템 사용을 Disable 시키는 방

법이며, 보통 기억하기 쉽게 * 를 추가하게 된다. 다른 방법으로는 passwd 명령어에 계정 잠금 옵션을 사용함

으로써 해당 사용자를 시스템에 접근시키지 않을 수도 있다.
  
[root@localhost root]# passwd -l user01
   
   이 경우 user01라는 사용자는 시스템에 로그인할 수 없다.


ㆍ 일반사용자가 root로 둔갑하기
   세 번째 필드에 만약 일반사용자의 UID를 0번으로 지정해주면 어떻게 될까? 물론 root 권한을 갖게 될 것이

다. UID 0번은 root 이므로 root 가 되는 위험한 현상이 발생하며, 보안상 주의깊게 관리해야 할 것이다.


ㆍ 쉘 사용 못 하게 하기
   쉘을 지정하는 마지막 필드에 /bin/bash 부분을 /dev/null로 바꾸어버리면, 해당 사용자는 쉘을 사용할 수

없게 된다. 이 경우 ftp 서비스 등 다른 서비스는 정상적으로 받을 수 있기 때문에 계정 서비스를 하지 않는다

면 사용할 만 하다고 할 수 있다. 보통은 쉘 권한을 주지 않고 사용하게 할 때 /dev/false를 주기도 한다.

 

1.3.2 /etc/shadow 파일


/etc/shadow는 사용자의 패스워드만을 보관하는 역할만 하는 것이 아니라 패스워드 에이징과 패스워드 잠금 등

추가적인 기능을 제공하는 새도우 슈트의 사용자 정보 파일이다.

 

형식은 :를 필드 구분자로 하여, 9개의 필드로 구성되어 있다. 다음 표는 /etc/shadow 의 필드를 요약한 내용

이다.


①로그인명 : ② 암호 : ③ : ④ : ⑤ : ⑥ : ⑦ : ⑧ : ⑨

③ last Day : 1970년 1월 1일을 기준으로 계산해서 최근에 패스워드를 변경한 날짜의 일수.
④ Minday : 다시 패스워드를 바꿀 수 있는 날까지의 남은 일수. 잦은 패스워드 변경을 막아준다.
⑤ Maxday : 반드시 패스워드를 바꿔야만 하는 날까지 남은 날수. 주기적으로 패스워드를 변경하게 한다.
⑥ Warnday : 패스워드가 만료도기 전에 경고하는 날수
⑦ 필드는 잘 사용되지 않는다.

 

root의 경우를 살펴보자
  
root : $1$blm0O2GCkbL1 : 11621 : 0 : 99999 : 7 :  :  :

 

1970년 1월 1일 이후 패스워드를 변경한 날까지의 수가 11621일이며, 아무 때나 패스워드를 변경할 수 있고,

99999일이 경과했을 때 반드시 패스워드를 바꿔야 한다. 즉, 패스워드를 안바꿔도 된다는 말이다. 만료 7일 전

에 경고하므로 패스워드를 변경하고 99999일 되었을 때 경고를 받게 된다. 이러한 값은 /etc/login.defs 파일

에서 변경할 수 있다.
  
# Password aging controls :
PASS_MAX_DAYS      99999
PASS_MIN_DAYS       0
PASS_MIN_LEN         5
PASS_MAX_LEN        16
PASS_WARN_AGE      7

 

이부분을 시스템 관리자의 판단에 따라 변경해주자.