Chapter 5. Unix Basic Commands _ 파일 속성 정보 변경 명령어
■ 파일의 속성 정보 변경(File Attribution Chaging)
■ chown CMD
■ chgrp CMD
■ chmod CMD
# ls -l filename
-rw-r--r-- 1 user01 staff size mtime filename
Filetype :
Mode/Perm : chmod
Link Count : ln
Ownership : chown
Groupship : chgrp
Filesize :
mtime : touch
filename : mv
chown CMD
__________________
change file ownership // 소유권 변경
The chown utility will set the user ID of the file named by
each file to the user ID specified by owner, and, option-
ally, will set the group ID to that specified by group.
If chown is invoked by other than the super-user, the set-
user-ID bit is cleared.
Only the owner of a file (or the super-user) may change the
owner of that file.
# ls -l filename
-rw-r--r-- 1 user01 staff ..... filename
(명령어 형식)
# chown user02 filename (# chown UID filename)
# chown user02:other filename (# chown user02.other filename: X)
# chown -R user02 dir01
// -R recursive : 하위로~부터
[EX] chown 명령어 실습
(실습 준비)
# cd /test
# rm -r *
# touch file1
# ls -l file1
-rw-r--r-- 1 root other ..... file1
(chown user01 filename 형식 실습)
# chown user01 file1
# ls -l
(chown user01:staff filename 형식 실습)
# chown user02:staff file1
# ls -l
[EX] chown -R 명령어 실습
(실습 준비)
# cd /test
# mkdir dir1
# mkdir -p dir1/dir2/dir3
# touch dir1/file1
# touch dir1/file2
(chown -R user01:other dir 형식 실습)
# chown -R user01:other dir1
# ls -lR
chgrp CMD
__________________
change file group ownership // 파일의 소유 그룹권을 변경
The chgrp utility will set the group ID of the file named by
each file operand to the group ID specified by the group
operand.
# ls -l filename
-rw-r--r-- 1 user01 staff ..... filename
(명령어 형식)
# chgrp other filename (# chgrp GID filename)
[EX] chgrp 명령어 실습
# cd /test
# ls -l file1
-rw-r--r-- 1 user02 staff ..... file1
# chgrp other file1
# ls -l
chmod CMD
__________________
change the permissions mode of a file // 파일의 권한을 변경
The chmod utility changes or assigns the mode of a file. The
mode of a file specifies its permissions and other attri-
butes. The mode may be absolute or symbolic.
# ls -l filename
-rw-r--r-- 1 user01 staff ..... filename
- : file type (-, d, l)
rw- : owner perm.
r-- : group perm.
r-- : other perm.
1 : link count(hard link)
user01 : ownership
staff : groupship
size : bytes
mtime : modify time
[참고] rw-r--r-- : 퍼미션 모드(Permission Mode)
퍼미션 변경 방법
■ 심볼릭 모드 방법(Symbolic Mode)
■ 옥탈 모드 방법(Octal Mode, Absolute Mode)
(1) 심볼 모드 방법(Symbolic Mode)
심볼들의 정의
-> u(user), g(group), o(other), a(all)
-> +(plus), -(minors), =(equal)
-> r(read), w(write), x(eXcution)
chmod u + r filename
g - w
o = x // other 권한을 기존의 값과 상관없이 x만으로 셋팅이 된다.
a
[EX] 심볼 모드를 사용한 퍼미션 변경 실습
# touch file1
# ls -l file1
-rw-r--r-- 1 root other 0 mtime file1
# chmod u+x file1
# chmod g-r file1
# chmod a=rwx file1
# chmod u-r,g+x file1
(2) 옥탈 모드 방법(Octal Mode)
rwx : 7
rw- : 6
r-x : 5
r-- : 4
-wx : 3
-w- : 2
--x : 1
--- : 0
chmod 755 filename (rwxr-xr-x)
[EX] 옥탈모드(Octal Mode)를 사용한 퍼미션 변경 방법 실습
# touch file1
# ls -l file1
-rw-r--r-- 1 root other 0 mtime file1
# chmod 744 file1
# chmod 754 file1
[참고] chmod -R (Recusive)
chmod 명령어에 -R 옵션을 사용하는 경우는 잘 사용되지 않는 경우이며 반드시 사용해야 하
는 경우 ls 명령어의 -lR 옵션을 통해서 백업을 받아 두어야 한다.
(특정 디렉토리 하위의 모든 퍼미션 변경의 경우)
# ls -lR > perm.txt
# chmod -R 755 dir01
(특정 디렉토리 하위의 특정 파일 퍼미션 변경의 경우)
/test/dir01
- file1
- file2
- dir02 - file3
- dir03
file* => 640(rw-r-----)
# cd /test
# find /test/dir01 -type f -exec chmod 640 {} \;
# find /test/dir01 -type f –name “*.log” -exec chmod 640 {} \;
[참고] File & Directory permission 의미
___________________________________________________________________________________
file r read 파일의 read권한은 파일안을 볼 수 있거나 복사할 수 있음
w write write 권한은 파일안의 내용을 추가 하거나 삭제, 변경 가능
x execution execution 권한은 파일을 실행할 수 있다는 의미
Dir. r ls read 권한은 디렉토리 하위 내용을 ls 할 수 있음
w add, delete write 권한은 디렉토리 하위의 내용을 삭제, 추가, 변경 가능
x cd execution 권한은 디렉토리 하위로 cd 할 수 있음
___________________________________________________________________________________
[EX] 파일 퍼미션 실습
반드시 user01, user02 사용자가 존재해야 한다.
[TERM1] user01 사용자 윈도우
# telnet localhost
user01 사용자로 로그인
$ touch file1
$ ls -l
-rw-r--r-- 1 user01 staff 0 mtime file1
[TERM2] user02 사용자 윈도우
# telnet lcoalhost
user02 사용자로 로그인
$ cd ~user01
$ vi file1
Test for user02
:wq! (파일의 내용을 넣을 수 없다.)
-rw-r--r-- 1 user01 staff 0 mtime file1
A A
| |
V |
user02 V
user02's group
[EX] 디렉토리 퍼미션 실습
[TERM1] user01 사용자 윈도우
$ mkdir dir1
$ ls -ld dir1 (rwxr-xr-x user01 staff)
$ chmod 775 dir1
$ ls -ld dir1 (rwxrwxr-x user01 staff)
$ touch dir1/file2
[TERM2] user02 사용자 윈도우
$ cd ~user01
$ cd dir1
$ rm file2 (파일을 지울수 있다.)
$ mkdir dir2 (디렉토리를 지울수 있다.)
umask CMD
__________________
get or set the file mode creation mask
# touch file1
# mkdir dir1
# ls -l file1 (644,rw-r--r--)
# ls -ld dir1 (755,rwxr-xr-x)
* 002, 022, 027
* default permission
file : 666 (Max Perm)
dir : 777 (Max Perm)
# umask
# umask 002
# umask
# touch file2
# ls -l file2 (664, rw-rw-r--)
# mkdir dir2
# ls -ld dir2 (775, rwxrwxr-x)
# umask 027
# umask
# touch file3
# mkdir dir3
# ls -l
---------------------------
File Dir.
---------------------------
666 777
umask 022 022
---------------------------
644 755
---------------------------
비트의 and 연산 è - 연산과 같음
비트의 or 연산 è 특정비트 mask 할시
[참고] /etc/profile의 umask 정의
umask 022
(3). 특수 퍼미션(SetUID, SetGID, Sticky Bits)
■ SetUID, SetGID 의미(SetUID, SetGID Means)
■ Sticky Bits 의미(Sticky Bits Means)
■ 특수 퍼미션 설정(Special Permission configuration)
(3-1) SetUID, SetGID 의미(SetUID, SetGID Means)
일반 사용자가 자신의 패스워드를 변경하기 위해 passwd 명령어를 사용할 수 있다. 하지만 passwd 명령어의 원 권한자는 root인데 파일을 실행 하는 동안 setuid를 가짐으로서 root의 역할을 가질 수 있는 것이다.
$ passwd
$ ls -l /etc/passwd (r--r--r-- root sys, 444)
r--r--r--
$ ls -l /etc/shadow (r-------- root sys, 400)
r--------
$ ls -l /usr/bin/passwd
r-sr-sr-x root sys
[user01]
$ passwd
===================
[root] /etc/passwd (root, sys)
/etc/shadow
===================
$ id
[user01]
$ ls -l /usr/bin/su
r-sr-xr-x root sys
[user01]
$ su -
====================
....
ksh(fork) (root)
....
====================
$ id
[user01]
ksh (user01)
-------------------+ +-----------------
| |
| ksh(root) |
+----------------------+
[참고] 해킹 기법(Hacking Tech.)
// 임시파일 추적할 때 pfiles 를 이용 프로세스가 생성 시킨 file을 추적할 수 있다.
- Stack Buffer Overflow
- Heap Buffer Overflow
- Race Condition
- IP Spoofing
- etc
[Race Condition]
- SetUID filename
- tmp file make
- Hacker known a tmp filename
$ ./su.sh (user01, SetUID root)
---- su.sh --------- ------ crack.sh ------
(root)
/tmp/.tmp1
----------------------
------ test.sh -------
--------------------- ----------------------
[Backdoor]
# cp /usr/bin/ksh /tmp
# chmod 4755 /tmp/ksh
(-rwxr-xr-x 1 root other 209268 3월 15 10:37 /tmp/ksh*)
(-rwsr-xr-x 1 root other 209268 3월 15 10:37 /tmp/ksh*)
# telnet localhost
user01 사용자로 로그인
$ cd /tmp
$ ./ksh
# id -a
- File Name for Backdoor
# touch " " (blank :4)
# touch ". "
# touch /dev/rdsk/c0t0d0p7
# touch /tmp/.Rx2Pailb
(3-2). Sticky Bits 의미(Sticky Bits Means)
Sticky bit는 일반적으로 디렉토리에 주어지는 의미이다. 디렉토리에 sticky bits가 주어지면 그 디렉토리 하위의 모든 파일과 디렉토리들은 다른 사용자가 볼 수 있지만 지우거나 수정을 할 수 없다.
예로 게시판을 들 수 있다.
# ls -ld /tmp
drwxrwxrwt 7 root sys 336 1월 14 19:35 /tmp
/export/home/user01 <=======> /tmp
user02
......
(3-3). 특수 퍼미션 설정(Sfecial Permission Configuration)
SetUID : 4 r
SetGID : 2 w
Sticky Bits : 1 x
(a). SetUID 설정 방법
# chmod 4755 filename
rwxr-xr-x => rwsr-xr-x
# chmod 4100 filename(Min Permission) --x------ -> --s------
# chmod 4655 filename(-rwSr-xr-x) rw-r-xr-x -> rwSr-xr-x
(b). SetGID 설정 방법
# chmod 2755 filename
rwxr-xr-x => rwxr-sr-x
# chmod 2010 filename(Min Permission) -----x--- -> -----s---
# chmod 2765 filename(-rwxrwlr-x) rwxrw-r-x -> rwxrwlr-x
[참고] Solaris(Public Writable Directory)
디렉토리에 관련해서 SetGID를 설정하는 것은 Symbolic Mode 방식으로만 가능하다.
# chmod g+s dirname (# chmod u+s filename)
g+s
o+t
======= dirname ========== (rwxrwsr-x) root class1
user01 make -> file1 (user01:class1)
user02 make -> file2 (user02:class1)
==========================
======== dirname ========== (root class2) rwxrwxr-x
user01 make -> file1 (user01:staff1)
user02 make -> file2 (user02:staff2)
===========================
# groupadd class2
# usermod -G class2 user01
# usermod -G class2 user02
(d). Sticky Bits 설정 방법
# chmod 1777 dirname
rwxrwxrwx -> rwxrwxrwt
# chmod 1001 dirname(Min Permission) --------x -> --------t
# chmod 1776 dirname(drwxrwxrwT) rwxrwxrw- -> rwxrwxrwT
(e). SetUID / SetGID 파일 검색(SetUID/SetGID Search)
# find / -perm -4000 -type f
# find / -perm -2000 -type f // -2000 : 최소 2000을 만족하는~
# find / ( -perm -4000 -o -perm -2000 ) -type f (올바른 형식 X)
# find / \( -perm -4000 -o -perm -2000 \) -type f (올바른 형식 0)
[참고] -o : OR, -a : AND
[EX] SetUID / SetGID 관리자의 정책
- 홈디렉토리(/export/home) 하위에는 SetUID, SetGID는 존재하면 안된다.
- 홈디렉토리(/export/home) 하위에 SetUID, SetGID 파일 존재 유무를 정기적으로 찾아서
점검한다.
사용자 홈디렉토리 : /export/home/user01......
(정책1) SetUID, SetGID 검색하는 경우
# find /export/home \( -perm -4000 -o -perm -2000 \) -type f
(정책2) SetUID, SetGID 검색하고 삭제하는 경우
# find /export/home -perm -4000 -exec rm {} \;
(정책3) SetUID, SetGID 생성시키는 사용자 경고 메세지 출력
- 사용자(user01)가 현재 로그인 되어 있는 상태 (who, w, talk 명령)
- 사용자(user01)가 현재 로그인 되어 있지 않은 상태 (/etc/profile)
# cat /etc/warnning.txt
Warnning
# vi /etc/profile
.....
if [ $LOGNAME = user01 ] ; then # # echo $LOGNAME
/bin/cat -s /etc/warnning.txt
fi
.....
[EX] WAS(Web Application Server)
- 상용 : Tmaxsoft JEUS, BEA Web Logic, IBM WebSphere, Oracle WAS, Sun WAS, .....
- 무료 : Jserv, Tomcat, Resin
Webserver (80, 8080) -> root 권한 필요
-> UNIX Port 번호 : Well-known Port(~1024)
Web Daemon(Example : httpd)
PORT 1 ~ 1023 : 반드시 root 권한 필요
PORT 1024 ~ : 일반사용자 권한으로도 가능
httpd (80) : 반드시 root 권한 필요
httpd (8080) : 일반사용자 권한으로도 가능
위의 경우 문제가 생길수 있다. 실제 실무에서는 서버 시스템에 root 사용자와 WAS 서비스
사용자가 구분되어 있는 경우가 많다. 일반사용자인 wasuser로서 WAS 프로그램을 설치하고
운용하기 때문에 데몬을 시작하는 스크립트가 wasuser 사용자의 권한으로 되어 있어서 이
사용자가 웹 데몬을 띄우게 되면 "Permission Denied"가 발생한다.
WAS -> wasuser 사용자
-------------------------
OS -> root 사용자
데몬 : httpd
데몬 띄우는 스크립트 : startup (예: # service httpd restart)
* wasuser가 httpd(80) 데몬을 띄울수 있도록 설정하는 관리자의 설정이 필요
# chown root:sys /was/bin/startup (root sys rwxr-xr-x -> rws-----x)
# chmod 4701 /was/bin/startup (root sys rwx-----x -> rws-----x)
or
# vi startup.c
main()
{
system(/was/bin/startup);
}
# gcc -o startup_C startup.c
# chmod 4701 startup_C
출처 : http://cafe.daum.net/bscsolaris