시스템 보안
운영체제 공격에 대한 대응 방안이고 공격자의 최종목적은 root 권한탈취입니다.
시스템 공격 + 대응방안 ==> 시스템 보안
특수권한
(실습)
Cent OS에서 실행합니다.
[user@localhost 바탕화면]$ su - root
[root@localhost ~]# cd /test
[root@localhost test]# ls -l
# ls -l 명령어를 입력했을 때 안에 파일이 있으면 전체 삭제
[root@localhost test]# rm -rf ./*
[root@localhost test]# nano test01.sh
[파일 작성]
echo "===================="
date +%Y-%m-%d
echo "===================="
[root@localhost test]# ls -l
[root@localhost test]# ./test01.sh #권한 없음
[root@localhost test]# chmod 744 test01.sh #권한 부여
[root@localhost test]# ./test01.sh #확인가능
[root@localhost test]# cp test01.sh test02.sh #복사
[root@localhost test]# cp test01.sh test03.sh
[root@localhost test]# ls -l
[root@localhost test]# chmod 4744 test02.sh
[root@localhost test]# chmod 4755 test03.sh
[root@localhost test]# ls -l
test02와 test03은 특수권한이 설정되었습니다.
새로운 터미널을 열어줍니다. (user)
[user@localhost 바탕화면]$ cd /test
[user@localhost test]$ ls -l
[user@localhost test]$ ./test01.sh #실행 안됨
[user@localhost test]$ ./test02.sh #실행 안됨
[user@localhost test]$ ./test03.sh #실행됨
test01은 이 파일의 소유자만 실행할 수 있습니다. test02는 이 파일을 실행하는 동안에는 root 권한을 부여받을 수 있지만, 실제 실행되지는 않는다. test03은 실행됩니다. 이 파일을 실행하기 위해서는 그룹과 아더에도 실행권한이 있어야 합니다.
root 터미널로 돌아와서 입력합니다.
[root@localhost test]# ls -l /usr/bin/passwd
[root@localhost test]# ls -l /etc/passwd
user 터미널에서 passwd 명령어가 실행되는 것은 root의 권한을 잠시 빌려서 실행하는 것입니다. 여기서 입력하는 내용들은 /etc/passwd를 수정하게 됩니다. 원래 /etc/passwd는 관리자만 변경할 수 있습니다.
Sticky Bit
(실습)
Cent OS에서 실행합니다.
계정을 만들어봅니다.
[root@localhost test]# useradd hong
[root@localhost test]# passwd hong
폴더를 생성합니다
[root@localhost test]# rm -rf ./* #이전 파일 삭제
[root@localhost test]# mkdir DIR01
[root@localhost test]# mkdir DIR02
[root@localhost test]# ls -l
[root@localhost test]# chmod 777 DIR01
[root@localhost test]# chmod 1777 DIR02
[root@localhost test]# ls -l
DIR01은 특수권한이 없고, DIR02는 특수권한이 부여되어 있습니다.
[root@localhost test]# su hong
su 뒤에 하이픈을 찍고 안 찍고의 차이가 있습니다. 하이픈이 있으면 세션 다 끊고 새로 들어가는 것이고, 하이픈을 안 쓰면 이전 작업 다 가지고 들어가는 것입니다.
hong 터미널과 user 터미널에서 동시 신행 @앞부분을 보고 터미널 확인하기
[hong@localhost test]# whoami
[hong@localhost test]# ls -l
[user@localhost test]# whoami
[user@localhost test]# ls -l
[hong@localhost test]# cd DIR01
[hong@localhost test]# touch aaa
[user@localhost test]# cd DIR01
[user@localhost test]# touch bbb
[hong@localhost test]# ls -l
[user@localhost test]# ls -l
위를 실행해 보면 aaa의 소유주는 hong이고, bbb의 소유주는 user입니다. 그럼 여기서 hong이 bbb파일을 지우고 user가 aaa파일을 지울 수 있을까요?? 가능합니다.
Sticky Bit는 자료실, 게시판에서 주로 사용합니다. 다수의 사용자들이 글을 남기는데, 일반 사용자들은 읽을 수 있으나 삭제할 수는 없어야 합니다. 소유자만이 파일을 삭제할 수 있습니다.
리눅스도 작업을 하다 보면 여러 사람들이 공통으로 사용할 수 있는 공유장이 있어야 합니다. 공유공간이 있어야하기는 하지만 소유자만 파일을 삭제할 수 있어야합니다.
DIR01을 보면 모든 사람들이 들어가서 사용할 수 있는 공간으로 만들어놨습니다. rwxrwxrwx는 소유자가 아닌 사람들도 삭제 권한이 있다는 의미입니다. 우리가 필요한 것은 모든 사람이 사용할 수 있지만 삭제는 소유자만이 가능한 것을 원합니다. 그렇게 만들 때 필요한 것이 Sticky Bit입니다.
이번에는 DIR02 폴더로 가서 파일을 작성하고 삭제해 보겠습니다.
[hong@localhost test]# cd DIR02
[hong@localhost test]# cat > aaa
[파일작성] Hello aaa
[user@localhost test]# cd DIR02
[user@localhost test]# cat > bbb
[파일작성] Hello bbb
[hong@localhost test]# ls -l
[user@localhost test]# ls -l
[hong@localhost test]# cat bbb #읽을 수 있음
[hong@localhost test]# rm -rf bbb #삭제불가
[user@localhost test]# cat aaa #읽을 수 있음
[user@localhost test]# rm -rf aaa #삭제불가
읽을 수는 있지만 삭제는 불가합니다.