본문 바로가기

Learning/└◆리눅스 서버 보안

리눅스 서버 보안 03_주요정보통신기반시설_계정관리


(고객에게 설명)

root 사용자의 이름은 정해져 있으며, 암호만 맞추면 되기 때문에 원격에서 무작위 대입을

통해 root 사용자의 암호가 크랙당하는 위험성이 존재한다. 


따라서 일반 사용자로 로그인하여 root 사용자로 전환하여 사용하도록 권장하여야 한다.

=> Brute Force Attack, Dictionary Attack


(실무 환경에 대한 예)

중소기업 규모 - 단독서버(일반사용자로 로그인 해서 root 사용자로 switching 해서 사용)

대기업 규모 - Gateway 서버를 통해 서버에 접속

※ IDC(Intergration Data Center) :
통합 전산 센터(Network + Server(Application) + Storage)


[실습] /etc/securetty 파일에 대한 실습

  • /etc/securetty 파일
  • /var/log/secure 로그 파일
  • /etc/sudoers 파일


    (정리) 보안 정책
  • root 사용자로 원격에서 로그인 금지
    -> /etc/securetty 파일은 기본값을 사용한다.

  • 일반사용자로 로그인하여 su 명령어를 통해 스위칭하여 사용한다.
    -> 로그에 남겨지기 때문에, root 사용자의 telnet 로그인이 패킷 스니핑에
    약하기 때문

  • su 명령어를 통해 스위칭할수 있는 사용자 그룹(wheel)을 설정.
    -> /etc/pam.d/su
    -> usermod -G whee | user01

  • sudo 명령어를 사용할 수 있는 사용자/그룹 지정, 명령어의 집합의 지정이 필요
    -> /etc/sudoers

root 사용자 원격 접속 제한

■ 사용 시스템

- firewall

- linux200

- KaliLinux


(linux200)

/etc/securetty 파일에 대해서


# whereis securetty   <-- 파일에 관련된 메뉴얼 페이지 

securetty: /etc/securetty /usr/share/man/man5/securetty.5.gz

Manual Section : (관리자) Section 1(CMD, httpd), Section 5(파일, 설정파일)

       (개발자) Section 2(System Call Lib), Section 3(Application Lib)

[참고]

# man securetty (# man 5 securetty)

login 프로그램 실행시 /etc/securetty를 참조하고

/dev/를 생략해라

[실습]

/etc/security 파일의 목적에 대해서 실습

  • /etc/securetty 파일은 root 사용자로 접속할 때 사용할 수 있는 터미널을 정의할
    때 사용하는 파일.


# cat /etc/securetty

-> pts/1 ~ pts/11 
-> tty(terminal-teletype) : 서버와 연결된 모니터 키보드 등을 통해 사용자가 콘솔
로 직접 로그인
-> pts(pseudo-terminal) : telnet, ssh, 가상터미널 터미널 등을 이용하여 접속

# cp /etc/securetty /etc/securetty.old

# vi /etc/securetty

-> pts1 ~ pts11 삭제


# telnet localhost

Login incrrect
Connection closed by foreign host.
pts 없이 root 사용자로 접속 할 수 없다.


# who

root     :0     2014-09-15.....
root    pts/1  2014-09-15...
root    pts/2  2014-09-15....

:0 gui모드 로그인창으로 root사용자 접속했다.


# init 3

# who

ctrl + alt + f2 

login

# who

ctrl + alt + f3

login

# who

ctrl + alt + f1

# init 5

login

# who

:0 


# vi /etc/securetty

........
pts/3
pts/4

-> 2개의 라인 추가(pts3, pts4)


(KaliLinux)


[TERM1] 칼리리눅스(192.168.20.50)에서 리눅스 서버(192.168.20.200)로 telnet 접속

# telnet 192.168.20.200 

root 사용자로 로그인

# hostname 

# id 

# tty 

/dev/pts/3

root@kali:~# telnet 192.168.10.200

Trying 192.168.10.200...

Connected to 192.168.10.200.

Escape character is '^]'.


    linux200.example.com (Linux release 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:35 EDT 2010) (3)


login: root

Password: 

Last login: Thu Feb 16 17:46:37 on :0

You have new mail.

root[~]# who

root     tty1         2017-02-16 17:46

root     :0           2017-02-16 17:46

root     pts/1        2017-02-16 17:46 (:0.0)

root     pts/2        2017-02-16 17:46 (:0.0)

root     pts/3        2017-02-16 17:48 (192.168.10.50)




[TERM2] 칼리리눅스에서 리눅스 서버로 telnet 접속

# telnet 192.168.20.200

root 사용자로 로그인

# hostname

# id

# tty

/dev/pts/4

[TERM3] 칼리리눅스에서 리눅스 서버로 telnet 접속

# telnet 192.168.20.200

root 사용자로 로그인

-> 접속이 되지 않는다.


칼리리눅스의 모든 접속 해제


(linux200)

# rm /etc/securetty
# ls /etc/securetty
-> 파일은 없다.

# telnet localhost
root 사용자로 로그인
-> 로그인 가능

# exit

#


# cp/etc/securetty.old /etc/securetty


[참고] GateWay Server(EX: Linux)

# for VAR in `seq 1 200`

> do

> echo "pts/$VAR" >> /etc/securetty

> done



■ su 명령어에 대한 실습 (/var/log/secure)


# cp/etc/securetty.old /etc/securetty

# vi /etc/securetty

-> pts/1 ~ pts/11 모두 삭제


[TERM2] # tail -f /var/log/secure


[TERM1] 작업용 윈도우

# telnet localhost

user01 로그인


$ id

$ cat /etc/shadow

# su - root


# id

# exit


$ su -root

-> 잘못된 암호입력


$ exit

# exit


로그 파일 분석 (tail -f /var/log/secure)

Sep 15 17:01:37 linux249 login: pam_unix(remote:session): session opened for user user01 by LOGIN(uid=0)

Sep 15 17:02:37 linux249 su: pam_unix(su-l:session): session opened for user root by user01(uid=500)

Sep 15 17:05:50 linux249 su: pam_unix(su-l:session): session closed for user root

Sep 15 17:05:54 linux249 su: pam_unix(su-l:auth): authentication failure; logname=user01 uid=500 euid=0 tty=pts/3 ruser=user01 rhost=  user=root

May 18 10:56:39 linux200 login: pam_unix(remote:session): session closed for user user01



■ sudo 명령어


$ su - root

# CMD


$ sudo CMD


이 두가지 방법의 차이점!!

관리자의 계정으로 백업을 한다고 가정한다.

사용자는 장치 제어권이 없기 때문에 관리자가 권한을 부여해야 할 수 있다.

혹은 setuid 가 되어 있어야 한다.(매우 위험)


관리자 -> 사용자 su -root 사용시 관리자의 암호를 넘겨 주어야 한다.

따라서 root 관리자 암호가 공개되는 것을 방지하기 위해 sudo 를 사용한다.


  • sudo 명령어 (# su -c "CMD" root)

  • /etc/sudoers 파일

/etc/sudoers 파일에 선언되어 있는것에 따라 root 권한을 부여한다.

sudo CMD 사용시 root password 가 아닌 사용자 패스워드 입력.
(sudoers - list of which users may execute what)


# vi /etc/sudoers

se nu8
## This file must be edited with the 'visudo' command.


se nu13,14

# Host_Alias     FILESERVERS = fs1, fs2

# Host_Alias     MAILSERVERS = smtp, smtp2

se nu71

##  user    MACHINE=COMMANDS


se nu86
# %wheel    ALL=(ALL)   NOPASSWD: ALL
whell 그룹 모든 권한.

가장 하단에 내용 추가

#

# (1) Sfecific Configuration

#

user01  ALL=(ALL)   ALL



# telnet localhost
user02 사용자로 로그인

$ id
$ /sbin/shutdown -r now

$ sudo /sbin/shutdown -r now
<<fedora is not in the sudoers file.  This incident will be reported.>>

$ telnet localhost
user01 사용자로 로그인

$ id
$ sudo /sbin/shutdown -r now

서버가 재부팅 된 이후에 관리자(root 사용자)로 로그인!!

$ telnet localhost
user01 사용자 로그인

$ sudo su -
-> 관리자의 암호를 물어보는가? No!

#

#exit



제한적으로 사용해보기


# vi /etc/sudoers

가장 하단에 내용추가

user02    ALL=bin/cat    /etc/shadow

sudo 명령어는 주지 않지만 필요한 부분만 제한적으로 사용할 수 있도록 설정하기



(정리) 보안 정책

  • root 사용자로 원격에서 로그인하면 안된다.
    -> /etc/securetty 파일은 기본값을 사용

  • 일반사용자로 로그인하여 su 명령어를 통해 스위칭하여 사용한다.
    -> 로그에 남겨지기 때문에, root 사용자의 telnet 로그인이 패킷 스니핑에 약하기 때문

  • su 명령어를 통해 스위칭할수 있는 사용자 그룹(wheel)을 설정
    -> /etc/pam.d/su
    -> usermod -G whee | user01

  • sudo 명령어를 사용할 수 있는 사용자/그룹 지정, 명령어의 집합의 지정이 필요하다.
    -> /etc/sudoers


(관련 스크립트 안에 들어가는 내용)


grep pts /etc/securetty > /dev/null 2>&1

if [ $? -eq 0 ] ; then

echo "비정상"

else

echo "정상"

fi


or


cat << EOF >> check.log

##############################################################

###### /etc/securetty 파일 내용 ##############################

###### (ㄱ) /etc/securetty 파일에 pts/# 들어 있으면 취약하다.# 

##############################################################

EOF

cat /etc/securetty >> check.log