본문 바로가기

Learning/ └Essential & Admin

리눅스 파일 속성관리_Unit7

 

파일의 속성정보 변경

# ls -l file1

-rw-r--r-- 1 root root 1945 6월 11:42:30 file1

 

File Type :

Permission Mode : chmod (change mod)

Link Count : ln

Owner : chown (change onwer)

Group : chgrp (change group)

File Size :

Mtime : touch -t

File Name : mv

 

 

파일의 소유권/그룹권 변경 명령어

 

chown CMD

파일의 소유주와 그룹을 변경한다

 

OPTIONS

-r    : 경로와 그 하위 파일들 모두를 바꾼다

 

명령어형식

#chown user01 file1                // 오너권한 변경

#chown .other file1                // 그룹권한 변경

#chown user01.other file1        //( # chown user01:other file1) 오너/그룹

#chown -R user01:other dir1     // 오너,그룹 권한 변한 하위 폴더전부 변경

#chown -R user01 dir1            //dir1디렉터리 와 하위 파일들을 전부 변경

 

 

 

실습

 

오너 권한 과 그룹 권한을 변경하는 모습

 

# chown -R root:other dir1 ( -R 옵션 주력 사용)

chown -R 옵션 실습

 

dir1 을 포함하여 그 하위 파일들의 권한을 전부 변경

 

chgrp CMD

 

 

그룹 권한만 변경된다.

(chown cmd 로 오너뿐만 아니라 그룹 권한도 변경할수 있기 때문에

chgrp는 잘 사용하지 않는다)

chown .fedora file1 과 같다

 

파일의 퍼미션 변경

 

chmod CMD

파일의 접근 권한을 변경한다(퍼미션변경)

 

명령어형식

# chmod u+x file1 (심볼릭모드 : 문자변경방식)

# chmod 755 file1 (옥탈 모드 : 숫자변경방식)

 

퍼미션 모드

 

 

 

 

 

 

실습

퍼미션 을 변경하는 방법

심볼릭 모드(Symbolic Mode) : # chmod u+x file1

옥탈 모드(Octal Mode) : # chmod 744  file1

 

심볼릭 모드

 

user/group/other

# chmod u + r file1

# chmod g - w file1

# chmod 0 = x file1

# chmod a file1

          유저 = u

          그룹 = g

다른 사용자 = o

          모두 = a

 

 

 

옥탈모드

 

4 - r     2 - w    1 - x

444 = r--r--r

      755 = rwx-rw-rw-

     777 = rwxrwxrwx

    721 = rwx-w---x

(x 권한이 없으면 rw권한이 있어도 사용불가)

 

 

옥탈모드 주력으로 사용

 

 

 

실습

 

 

 

 

 

하위디렉터리 접근 권한이 있더라도 상위 디렉터리 접근 불가하므로 하위 디렉터리인 dirtest 디렉터리 접근 불가

 

 

 

퍼미션 권한 변경

(chmod 757 /home/fedora) 오류부분 재실행

 

퍼미션 적용 순서

umask CMD

파일/디렉터리를 생성할 때 파일/디렉터리의 기본 퍼미션 을 설정할 때 사용하는 값

명령어 형식

 

기본 퍼미션

Default permission file666    dir777

umask 설정 ex ) umask 002 , umask 022, umask 027 ( 가장많이쓰이는 umask값)

 

명령어형식

# umask

# umask 027

# umask 022

 

실습

 

기본으로 생성하는 파일이나 디렉터리의 퍼미션 값

파일 : 644

디렉터리 : 755

umask 기본값이 022로 되어 있기 때문에

파일 생성시 ( 666 - 022 = 644 )

디렉터리 생성시 ( 777 - 022 = 755 )

가 기본으로 되어 생성된다

 

umask 를 022 에서 002로 변경후 파일과 디렉터리를 생성한다

기존에 파일과 디렉터리는 각각 644 , 755 였지만

umask 값을 변경한 후 생성한 파일과 디렉터리 의 퍼미션은

664 , 775 인 것을 확인할수 있다

 

 

 

gedit /etc/bashrc    // Umask 값 고정

(터미널 변경시 Umask값 초기화)

UID 99번보다 클때 ( other 사용자 ) &&(그리고) id -gn gid번호에 맞는 사용자 = id -un 사용자이름

= 일반 사용자 이면 002 로 설정하고

그게 아니면 022로 설정한다

user01 의 gid값이 501 따라서 umask값이 002로 설정된다

 

 

 

 

SetUID/SetGID 그리고 sticky bit

파일에 대한 소유권을 잠시 다른 사용자에게 빌려 줌으로 인해 소유권이 없는 사용자가

잠시 동안 파일에 대한 소유권으로 권한을 행사 할 수 있는 것을 말함

 

공유한 디렉터리나 파일에 대한 특별한 퍼미션을 부여하는 것으로서 파일 소유자 나 슈퍼유저만이 파일에

대해서는 setuid와 setgid를 설정하고 디렉터리에 대해서는 setgid 퍼미션을 설정 할 수 있다. absolute mode나

symbolic mode를 사용하여 지정하거나 해지할 수 있다.

 

 

프로세스가 사용자 보다 높은 수준의 접근을 요구 할 때 파일 접근 제한 떄문에 원할 한 기능을

제공 할 수 없고 이를 해결하기 위해 SetUID 와 SetGID를 사용한다

 

실행 권한(x)이 주어진 프로그램에 setuid 퍼미션이 주어지면 누구에게나 그 프로그램의 소유자

처럼 그 프로그램을 실행할 권한이 주어지고, 또한 어느 누구에게나 그 프로그램의 그룹에 속한 것처럼

할 수 있다. 즉, 실행 권한(x)을 가진 프로그램이 setuid와 setgid 퍼미션이 주어지면

그 프로그램의 owner나 group으로부터 UID와 GID를 얻는다. 이는 해당 프로그램이 시작될 때 프로세스

로부터 UID와 GID를 상속받는 것과는 다르다.

 

 

SetUID를 가진 파일의 예시

패스워드를 변경할 수 있는 권한을 root의 권한이다. 그렇기에 일반 사용자는 패스워드 권한을

변경할 수 없다. 일반 사용자도 패스워드를 변경할 때 만큼은 root가 되도록 만들어 주어야 한다.

그렇기 위해선 /usr/bin/passwd 실행 파일의 권한이 root의 SetUID 권한이 부여되어 있으면 된다.

(사용자 유저에게 패스워드 변경 권한을 가진 운영자 권한을 부여)

 

 

 

SetUID

8진수 4000 or u+s

setuid비트를 실행 파일에 적용하면 실 사용자(프로그램을 실제 실행 중인 사용자)에서 프로그램

소유자의 ID로 유효 사용자(EUID)가 변경됨

 

root만 접근할 수 있는 파일이나 명령에 대해, 일반 사용자로 접근하는 것이 필요할때 사용

(setuid 가 설정된 파일은 실행 순간만 그 파일의 소유자 권한으로 실행)

일반 사용자가 setuid설정된 프로그램을 실행시 setuid root 가 된다

 

setuid 설정시 보안 취약점

 

명령어형식

# chmod 4000 file1

# chmod u+s file1

 

setuid 비트가 설정되어 있으면 사용자 접근권한의 실행 권한 자리에 실행 권한이

있으면 소문자 s , 실행권한이 없으면 대문자 S로 표시됨

 

SetGID

8진수 2000 or g+s

유효 그룹 ID를 사용자의 실제 그룹 ID에서 파일 소유자의 그룹 ID로 변경함

디렉터리에 설정되어 있으면, 이 디렉터리에 새로 설정된 파일들은 디렉터리 그룹 소유권 보다

파일 생성자의 그룹 소유권을 얻게 될 것

 

- 일반 파일 그룹의 멤버가 파일 소유자의 그룹과 상관없이 디렉터리 내의 모든 파일에 접근이 필요한

공유 디렉터리에 유용

 

명령어형식

# chmod 2000 file1

# chmod g+s file1

 

 

 

실습

 

 

 

 

 

SetUID 확인

/usr/bin/passwd 의 SetUID 권한을 풀면

다른 사용자가 passwd 변경 권한을 가질수 없다

  chmod 4755 /usr/bin/passwd  ->  chmod 755 /usr/bin/passwd

 

 

 

 

fedora가 user01 사용자의 권한을 빌리는 경우

user01 사용자가 touch라는 파일을 생성한다

(user01 디렉터리 퍼미션775 부여)

 

 

touch 파일에 SetUID 권한 부여

fedora 사용자로 user01 디렉터리에 file2를 생성하고

ls -l 확인 결과 그룹권한에 fedora 확인

 

touch 파일에 SetGID 권한 부여

fedora 사용자로 user01 디렉터리에 file3을 생성하고

ls -l 확인 결과 user권한에 fedora 확인

 

 

 

 

bash쉘의 setuid 권한 부여

 

 

쉘(/bin/bash) 을 /test에 복사

(원래는 SetUID 권한이 없는 755 퍼미션)

 

 

bash 확인

 

 

퍼미션 모드 4755 부여 후 fedora 사용자로 ./bash 확인

(현재는 gcc설치후 bash가 되는 과정 이지만 원래는 불가능하다)

 

커널 2.6버전부터는 쉘은 SetUID/GID권한 부여 막음

 

 

gcc프로그램 설치(GNU CC)

(gcc프로그램이 설치되어 있지 않을시 확인 및 설치과정)

#which gcc

# rpm -qa | grep gcc

# yum install gcc

 

gedit backdoor.c 생성후 코딩

cat backdoor.c 로 작성한 코딩 확인

 

 

 

 

 

 

 

id 명령어 입력후 권한이 높아지지는 않는것을 확인

 

 

 

 

 

 

 

 

 

 

쉘 권한을 얻으면 다른 모든 권한을 root 처럼 행동 할수 있다. (bash 의 퍼미션 변경)

 

 

[참고]특수 퍼미션을 가진 파일 찾기

# find / -perm -4000 -type f    SetUID 검색

# find / -perm -200- type f    SetGID 검색

# find / \( -perm -4000 -o -perm -2000 \) -type f     두가지 동시검색

( -o : OR, -a : AND)

 

find / -perm -4000 -type f > SetUID.txt

파일의 목록이 늘어나면 안되기 때문에 (해킹우려)

 

 

 

 

 

 

sticky bit(공유모드)

8진수 1000 or o+t

리눅스는 파일의 sticky bit는 무시

특정 디렉터리를 누구나 자유롭게 사용 할 수 있게 하기 위함 (공용 디렉터리에서 사용)

단 디렉터리에 적용되면 디렉터리 소유자나 파일 소유자 또는 슈퍼유저가 아닌 사용자들은 파일을

삭제하거나 이름을 변경하지 못하도록 막음, 파일 또는 디렉터리 생성은 누구나 가능

 

명령어형식

# chmod 1000 file1

# chmod o+t file1

 

 

SetUID/SetGID/Sticky Bit

------------------------------------------

File    Directory 

------------------------------------------

SetUID        O            X

SetGID        O            O

Sticky Bit     X            O

-------------------------------------------

 

 

 

실습

ls -ld /tmp    skicky bit가 걸려있음

 

 

아무나 업로드 할수 있지만 본인이 올린 것만 삭제할수 있음

 

 

sticky bit로 파일 삭제 권한 제거

 

 

 

 

 

 

복사는 가능(읽기) 허나 다른 사용자의 파일을 지우거나 이동시킬수 없다

복사를 하면 같은 파일이지만 복사를 한 사용자의 소유가 된다

 

자신이 소유권을 가지지 않을 파일에 대해서 원본 파일을 수정할 수 없다

 

tmp directory-

cd /tmp

mkdir ". " 닷지 디렉터리 생성

mkdir "    " 공백 디렉터리 생성

touch "         " 공백 파일 생성

SetUID 권한을 공백 파일에 부여

 

-------------------------------------------------------------------------------------------------------------------------------------

SetUID/SetGID/Sticky Bit 의미

SetUID/SetGID/Sticky Bit 설정

# chmod 4755 file1

# chmod 2755 file1

# chmod 1777 dir1

SetUID/SetGID/Sticky Bit 관리

검색) # find / \( -perm -4000 -o -perm -2000 \) -type f

목록) # find / \( -perm -4000 -o -perm -2000 \) -type f > setuid.txt

제거) # chmod 755 /usr/bin/passwd

 

 

 

검색 방벙

# find / -perm -4000 -ls

# find / -perm -2000 -ls

# find / \( -perm -4000 -o -perm -2000 \) > setuid.txt

# find / \( -perm -4000 -o -perm -2000 \) | wc -l > setuid.txt

 

# diff /setuid.txt setuid.old.txt

 

특수퍼미션 관리 기법

관리자만 암호를 변경할 수 있고, 사용자는 암호를 변경할 수 없다.

# chmod 755 /usr/bin/passwd

#

 

'0(Zero) day attack'을 암시적으로 방어하기 위해서