Linux/서버 보안(CentOS)

사용자 계정관리

D4tai1 2018. 9. 23.

1. 사용자 계정 관리 원칙

1) 시스템에서 현재 사용하지 않는 계정

 [1] 실수 혹은 악의로 로그인하여 시스템에 접근할 수 있으므로 삭제해야한다.

 [2] 그러나 계정을 삭제해야할지 말아야할지 애매할 경우는 계정을 잠궈야 한다.

 

 - [useradd user1] 명령어로 새 계정을 생성한다.

 - [passwd user1] 명령어로 user1의 계정의 비밀번호를 설정한다.

 - [usermod -L user1] 명령어로 user1 계정의 상태를 Lock 시킨다.

 

 

 - 런레벨 3으로 부팅하면 [Alt+F?] 키를 이용하여 여러 개의 창을 띄울 수 있다.

 - 나의 경우는 [Alt + F2] 키를 이용하여 새 화면을 만들었다.

 - user1 계정으로 로그인을 시도한다.

 - 잠겨있어서 접근이 불가능한 것을 확인할 수 있다.

 

 

 - 원래 화면[Alt + F1]으로 돌아와서 잠긴 계정에 대해 Unlock을 한다.

 

 

 - 아까 접속 실패한 화면[Alt + F2]으로 와서 다시 접속을 시도한다.

 - 접속이 가능한 것을 확인할 수 있다.

 

2) 테스트용 계정

 [1] 일반적으로 서비스를 제공하기 전 테스트를 목적으로 새 계정을 생성한다.

 [2] 테스트용 계정은 보통 쉬운 계정명과 패스워드를 사용하므로 테스트 종료 후 삭제해야 한다.

 

3) 쉘을 사용하지 않는 계정

 [1] 서비스데몬을 구동하기 위해서 계정이 필요하지만 로그인할 필요가 없는 계정은 차단한다.  

 

- 쉘 로그인 할 필요가 없는 계정은 위 그림과 같이 설정하면 로그인 되지 않는다.

- [usermod -s /sbin/nologin user2] 명령어로 user2의 쉘 로그인을 금지하였다.

 + /bin/false로 설정하여도 쉘 로그인을 금지할 수 있다.

 + [usermod -s /bin/bash user2] 이런식으로 쉘을 부여하고 계정명을 적어줘서 쉘 로그인이 가능하도록 할 수 있다.

- /etc/passwd 의 내용을 확인하면 user2의 쉘을 보면 nologin인 것을 확인할 수 있다.

 

 - [useradd -s /sbin/nologin "계정명"] 명령어를 이용하여 계정 생성시에 쉘로그인이 불가능하도록 설정할 수 있다.

 

4) root계정

 [1] ssh 터미널 로그인을 금지할 수 있다.

  - 이전에 정리를 하였지만 간단하게 정리하면

  - [vi /etc/ssh/sshd_config] 에서 42라인의 PermitRootLogin의 설정을 no로 설정하고 주석을 해제하면 된다.

 [2] 콘솔에 로그인이 불가능하도록 설정할 수 있다.

  - 이렇게 하는 이유는 root계정에 대한 사전공격을 막으려는 의도이다.

  - 즉, 일반사용자 계정을 접근하여 su 명령어를 사용한다.

  

  - [echo > /etc/securetty] 명령어로 빈 파일을 하나 생성하면 루트계정의 콘솔로그인이 불가능하다.

  - 콘솔 로그인을 하려면 생성한 빈 파일을 삭제하면 가능하다.

 

 

  - root계정으로 접근을 시도하자 차단이 되어, 일반사용자계정인 user1으로 접근하였다.

  - 이후 su 명령어를 사용하여 root계정으로 접근하였다.

  - 홈디렉토리의 변화는 아래서 확인할 것이다.

 

2. su명령어

 

 - 위와 같이 test1계정을 생성하였다.

 

1) su 와 su -

 [1] su 명령어

  - 기존 사용자의 환경을 유지한 채 root권한을 가지게 된다.

 [2] su - 명령어

  - root계정으로 로그인한 것과 같은 상태이다.

 

- 위 그림에서 su와 su - 각각 홈 디렉토리의 위치가 다름을 확인할 수 있다.

 - 두 명령어의 차이는 이것보다 환경변수에서 차이가 난다.

 - 즉, su는 기존 사용자의 환경변수를 그대로 계승받는다.

 - 그러나 su -는 root계정의 환경변수를 사용한다.

  + 환경변수는 OS전용 자료구조이며, 라이브러리와 PATH 등이 있다.

  + 환경변수는 id의 환경변수를 부른다.

  + 이 말을 하는 이유는 환경변수에 악성코드를 심는데 사용되기 때문이다.

  - 그림에서 보면 프로그램을 하나 실행해서 메모리에 올리면 위와 같이 올라가는 것을 확인할 수 있다.

  - 즉, 프로그램을 실행한 사용자의 환경변수 자료구조와 elf헤더가 앞에 붙어서 주기억장치에 적재된다.

 

2) 접근제어

 [1] su(Switch User) 명령어의 사용

  - 누구나 su 명령어를 사용할 수 있기 때문에 접근제어를 한다.

  - 즉, 그룹을 만들어서 특정 그룹만 su 명령어를 사용할 수 있도록 한다.

 - [vi /etc/pam.d/su] 명령어를 사용하여 su 명령어를 사용할 수 있는 계정그룹을 생성한다.

 

- 6 라인에 주석을 제거하여 wheel그룹에 등록된 사용자만 su 명령어를 사용할 수 있도록 생성하였다.

 

 - userx라는 일반사용자계정으로 su 명령어를 사용하자 사용할 수 없었다.

 

 - 다시 root계정으로 접근하여 [usermod -G wheel test1] 명령어로 test1계정을 wheel그룹에 속하도록 설정한다.

 

 - test1 계정은 su 명령어를 사용할 수 있게 되었다.

 

3. sudo

- 특정 명령어에 대해서만 root권한으로 실행할 때 사용한다.

- 일반사용자에게 root패스워드를 노출하지 않고 사용할 수 있다.

 - 현재 사용자의 권한으로는 shutdown 명령어가 사용이 불가능하다.

 

 - [vi /etc/sudoers] 명령어로 특정 그룹만 sudo명령어를 사용할 수 있도록 한다.

 

 - [/etc/sudoers] 파일은 수정이 되지 않으므로 root만 쓰기가 가능하도록 수정한다.

- 위 그림과 같이 [계정명 호스트명=(실행계정명) 허용명령어] 의 방식으로 맨 아래줄에 추가해준다.

 - [test1 ALL=(ALL) /sbin/shutdown] 명령어를 사용하여 sudo를 사용하여 shutdown 사용이 가능하도록 설정한다.

 

- 위 그림과 같이 shutdown명령어를 사용할 수 있으며 test1의 비밀번호를 물어본다.

- root패스워드를 노출시키지 않고 특정사용자에게 특정 명령어에 대한 root권한을 부여하는 방식이다,

- SetUID 방식보다는 안전하다.

 

※ 여기서 사용하는 이 접근제어방식을 RBAC이라고 한다.

 - RBAC은 역활기반의 접근제어방식으로 자신의 역활에 따라 사용할 수 있는 명령어를 제어하는 방식이다.

 

※ su와 sudo는?

 - su명령어는 root계정의 패스워드를 이용하여 root 계정으로 전환하는 것을 말한다.

 - sudo명령어는 현재 사용자계정의 패스워드를 이용하여 단일명령어에 대해서 root계정의 권한으로 실행하는 것을 말한다. 

 

 

 

'Linux > 서버 보안(CentOS)' 카테고리의 다른 글

패스워드 기간 관리  (0) 2018.09.30
시스템 시간관리  (0) 2018.09.23
프로세스와 명령어 모니터링  (0) 2018.09.16
패키지 설치  (0) 2018.09.15
서버 부팅과정  (0) 2018.09.09

댓글