Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

기본 원칙

리눅스 유저 보안을 위한 기본 원칙이다. 아래의 원칙을 만족하는 최적의 솔루션을 찾는게 목적이다.
  1. root 권한은 한번에 얻을 수 없다
  2. 특정 유저만 su를 수행할 수 있다
  3. 일반 유저는 특수한 목적에 한해 제한된 방식으로 root 권한을 획득할 수 있어야 한다
  4. 패스워드는 유추하기 힘들어야 한다

테스트 환경

  1. 운영체제 : centos6.3 1, ubuntu13.10
  2. ssh : telnet는 무시

root 원격 접속 막기

원격 유저의 경우 한번의 경로로 root 권한을 획득할 수 없도록 한다. 예컨데, 일반유저로 접근을 한 다음 su를 통해서 루트권한을 획득할 수 있다.

ssh 설정을 변경한다.
# cat /etc/ssh/sshd_config
PermitRootLogin no

특정 유저만 su를 수행 하도록

sysadmin 그룹에 속한 유저만 su 를 수행할 수 있도록 변경했다.

sysadmin 그룹을 만든다.
# addgroup sysadmin

yundream 유저를 sysadmin 그룹에 포함한다.
# usermod -G sysadmin yundream
# cat /etc/group
sysadmin:x:1201:yundream

su 명령을 sysadmin 그룹에 허용한다.

/bin/su는 root user 에 대해서 +s퍼미션이 붙어 있다. su를 실행하는 유저는 root 유저 권한으로 su를 실행한다.
# ls -al su
-rwsr-xr-x 1 root root 36832  9월 13  2012 su
other 유저에게서 실행권한을 뺏고, sysadmin에게 그룹 권한을 주면 된다.
# chmod o-x su
# chgrp sysadmin su
# chmod g-s su
sysadmin 그룹에 포함되지 않은 일반유저는 su를 실행할 수 없다.
[guest01@localhost ~]$ su -
-bash: /bin/su: 허가 거부

이제 root 권한을 획득하려면
  1. ssh를 이용해서 yundream 계정으로 접근 한 다음
  2. root로 switch user 해야 한다.

특정 명령 단위로 root 권한 획득

현재 시스템에는 3개 계층의 유저가 있다.
  1. root : 뭐든지 다 할 수 있다.
  2. yundream : sysadmin 그룹에 포함돼 있으며, 필요에 따라 root로 switch user할 수 있다. 일단 root 권한을 획득하면 root와 동등한 권한을 가진다.
  3. 일반유저 : 제한된 권한만을 가진다.
3개 계층으로 하기에는 다양한 목적의 유저를 수용할 수 없다.

애플리케이션 중에는 루트권한을 필요로 하는 것들이 있다. 현재 계정 정책에서는 yundream으로 접근한다음 root로 su(switch user) 해야 하는데, 보안상 좋지 않다. 가장 좋은 방법은 애플리케이션을 실행할 별도의 계정을 만든 다음, 이 계정이 root 권한으로 애플리케이션을 실행하도록 하는 거다. 리눅스의 sudo를 이용하면 명령단위로 권한을 조정할 수 있다.

sudo의 설정파일은 /etc/sudoers다.
# appadmin 유저는 /mnt/dir에 대해서 mount, umount 명령을 수행할 수 있다. 
appadmin ALL=/sbin/mount /mnt/dir, /sbin/umount /mnt/dir

# guest01 유저는 /et/test (루트권한을 가지고)파일을 삭제할 수 있다.
guest01 ALL=/bin/rm /etc/test

# musician 그룹에 포함된 유저는 cdrom을 mount, unmount 할 수 있다. 
%musician  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

sudoers에 대해서 좀 더 살펴보자. sudoers의 형식은 다음과 같다.
<USER>  <HOSTNAME>=(USER)<NOPASSWD>:<COMMAND>
  • User : 권한설정을 할 유저 아이디. 앞에 %가 있으면 그룹아이디.
  • HOSTNAME : hostname혹은 cidr을 기준으로 원격 접근 설정을할 수 있다.
  • NOPASSWD : 옵션으로 이 값을 지정할 경우 패스워드 입력없이 명령을 실행할 수 있다.
  • COMMAND : 허용할 명령
아래는 좀 더 복잡한 예다.
sysadmin 192.168.100.0/255.255.255.0=(root)NOPASSWD:/usr/bin/apt-get 
sysadmin 유저에 대한 설정이다. 192.168.100.1에서 192.168.100.254 IP에서의 접근을 허용한다. 이 유저는 /usr/bin/apt-get 을 root권한으로 실행할 수 있는데, 이때 패스워드를 물어보지 않는다. 한마디로 /usr/bin/apt-get은 언제든지 자유롭게 사용할 수 있다.

예에서 sysadmin유저는 apt-get의 모든 기능을 사용할 수 있다. install 뿐만 아니라 삭제도 가능한데, 애플리케이션 기능별로 권한을 제어하고 싶을 수도 있다. 예컨데 apt-get upgrade만 허용하고 싶다면, 아래와 같이 설정하면 된다.
sysadmin 192.168.100.0/255.255.255.0=(root)NOPASSWD:/usr/bin/apt-get upgrade 
이 유저는 install, remove 등의 작업은 할 수 없다.

패스워드는 유추하기 힘들어야 한다

패스워드는 유추하기 힘들어야 한다는 말은 하나마나한 말이다. 유추하기 힘들다는 말은 곧 기억하기 힘들다는 말이고, 이 경우 사용자는 포스트잇을 사용하거나 pc에 파일형태로 저장을 한다. 개인적으로 유추하기 힘든 패스워드를 외어서 사용한 적은 한번도 없다.

따라서 패스워드를 유추하기 힘들게 만드는 걸로는 보안 강도를 높이기가 힘들다.

차라리 ssh 인증키를 이용하는게 낫지 싶다. 물론 key를 사용하려면, key를 로컬시스템에 복사해 두고 사용해야 하기 때문에 누출될 가능성이 있기는 하다. 하지만 패스워드 역시 누출될 가능성있다. 패스워드 방식의 또다른 문제는 Brute force 공격에 취약하다는 점이다. - 현실적으로 패스워드를 16자 이상으로 설정할 수는 없는 노릇이라서 그렇다. 10자만 되도 외우는거 불가능 한 사람이 태반이다. - ssh key파일은 brute foce 공격에 강하니 그냥 ssl key 파일을 사용한다. 덤으로 로그인도 편하다.

PasswordAuthentication no

관련문서

  • http://blog.keun.kr/470

히스토리

  • 작성일 :