티스토리 뷰

find를 사용한 파일 권한 검사

리눅스에서 관리자 및 사용자가 패스워드 변경을 위해 사용하는 명령어가 있다.
 # passwd
해당 passwd 명령어는 /usr/bin/passwd에 위치하는 root 소유의 실행파일이다.
이 파일은 SUID, SGID가 설정되어 있기 때문에 root만이 접근 가능한 /etc/shadow 파일에 접근하여 패스워드를 변경할 수 있다.
이렇듯 SetUID, SetGID권한은 일반 사용자가 특정사용자나 그룹의 권한을 가질 수 있으므로 잘못 설정할 경우에는 아주 위험하므로 조심해야 된다.

보통 해킹당한 시스템에서 root권한으로 실행되는 백도어, 루트킷 등이 관리자 모르게 심겨지고, 악의적인 사용자에 의해서 웬만한 관리자도 모르게 해당 악성파일을 실행해서 root권한을 획득하는 경우가 많다. 그래서 root 비밀번호를 변경하더라도 계속 해킹, 크래킹이 이루어 지고 있다.

 

[ROOT 권한 검사]

root 소유의 SUID, SGID 실행파일을 주기적으로 검사하기 위해서는 find 명령어의 -perm 옵션을 이용하는 것이 유용하다.

다음은  4000권한을 포함하는 suid 설정된 파일들의 검사하는 명령문이다.
 # find . -user root -perm -4000

passwd 실행파일의 경우 확인되어지는 권한 속성은 아래와 같다. 
 -r-sr-xr-x root sys /usr/bin/passwd

소유자(owner) 권한이 r-s 로 setuid 가 설정되어 있으며, other 사용자 권한이 r-x로 실행권한이 있으므로, 모든 사용자가 passwd 명령을 실행 시 소유자인 root 권한으로 수행이 된다.


mail 실행파일의 경우 확인되어지는 권한 속성은 아래와 같다. 
 -r-xr-sr-x root mail /usr/bin/mail  

mail 파일의 경우 그룹(Group) 권한이 r-s 로 setgid 가 설정되어 되어있으므로, 해당 파일을 실행 시 mail 그룹 권한을 가지고 수행된다.

 

[소유자와 그룹 소유자]

- 소유자 변경하기
파일의 소유자 양도를 해야 될 경우 소유자 변경을 할 수 있다.
아래 명령 chown 또는 chgrp 커맨드를 통해 소유자 또는 그룹소유자를 변경할 수 있다.
 #chown [-R] [유저명] [대상]
 #chown [-R] [유저명].[그룹명] [대상] - 비표준 명령
 #chgrp [-R] [그룹명] [대상]

 

 

[디렉토리나 파일만 퍼미션 설정]

- 디렉토리만 퍼미션 설정
 #chmod 퍼미션 $(find 디렉토리 -type d) OR
 #find 디렉토리 -type d -exec chmod 퍼미션 {} +
 예) chmod 755 $(find /app/ora12c -type d) OR
 # find /app/ora12c -type d -exec chmod 755 {} +


- 파일만 퍼미션 설정
 #chmod 퍼미션 $(find 대상디렉토리 -type f) OR
 #find 대상디렉토리 -type f -exec chmod 퍼미션 {} + 
   예) chmod 755 $(find /app/ora12c -type f) OR
 #find /app/ora12c -type f -exec chmod 755 {} +

 

[umask]

- umask는 파일이 생성 될 때 퍼미션 중에 제외될 퍼미션을 지정한다.
- 기본 umask는 022(0022)로 설정 된다.
 > 디렉토리 퍼미션은 755(0755), 파일 퍼미션은 644(0644)
- 파일이나 디렉토리를 생성할 때 기본적으로 권한 값은 파일의 경우 644 디렉토리의 경우 755로 설정된다. 이 값은 umask 값에 의해서 결정되는 값으로 파일은 666에서 umask 값을 not 연산을 수행 후 둘을 and 연산, 디렉토리는 777에서 같은 방식으로 구해진다.
- umask 값은 umask 명령어를 이용해서 변경 가능하며 재부팅하면 초기화된다. 재부팅 후에도 적용을 시키려면 사용자 초기화 파일에 설정해야 한다.

 #umask (umask 확인)
 #umask [제외할 퍼미션] (umask 변경)
  예) umask 077(0077): 생성되는 파일의 퍼미션은 700(0700)으로 변경된다.
- /etc/profile에 설정된다.

 

 

참고)  
umask 를 실행해보면, 0022라고 네자리 숫자가 나오는데
ㄴ디렉토리 = 777에서 022를 빼면 되고
ㄴ 파일 = 666에서 022를 빼면 된다.
ㄴ 0022라고 되어 있는 숫자를 바꿔주면 처음 디렉토리나 파일을 만들었을 때 자동으로 부여되는 권한을 변경할 수 있다.
ㄴㄴ umask 배울때 세자리 숫자를 배웠으나 원래는 4자리 숫자이다.
ㄴㄴ 이는 특수권한을 포함한 숫자이다.
ㄴㄴ 특수권한은 다음 장에서 배울 예정임.

파일과 디렉토리 신규 생성 시, 파일과 디렉토리의 최초 권한이 서로 다르게 설정되어 있는 것을 확인 할 수 있는데, 보안적 관점에서 봤을 때 파일은 실행되었을 때 어떤 일이 생길 수 있는 위험이 따르지만, 디렉토리는 실행만으로 큰 문제가 생기진 않기 때문에 보통 디렉토리보다 파일이 좀 더 보수적으로 권한이 설정되어 있다.

 

[파일 속성 변경]

- 파일의 특성(속성)은 여러 가지가 있다. 
a: 추가 모드로만 오픈 가능
i: 변경, 삭제, 링크 금지
s: 안전한 삭제
A: atime 갱신 불가
c: 커널에 의하여 압출 상태로 저장
d: dump 명령으로 백업 금지
j: 저널링
t: 하위 결합 불가
u: 삭제시 내용 저장
D: 디렉토리 실시간 동기화
S: 파일 수정 시 실시간 동기화


- lsattr 커맨드는 파일의 속성을 확인할 때 쓰인다.
 #lsattr [옵션] [대상]
  * 옵션
  -d: 파일 형식으로 출력 (대상이 디렉토리인 경우 사용)
  -R: 하위의 모든 파일에 대한 속성 확인
  -a: 숨김 파일 출력

[파일 속성 attribute]
파일 자체에 대한 허가를 말하며, 파일 속성은 각각의 사용자 또는 그룹이 갖는 파일의 퍼미션과는 아무 연관이 없음. 
- 속성의 설정 및 변경 chattr
- 파일 속성 확인 lsattr
 a : append only , 해당 파일을 추가(append mode)만 할 수 있음. root만 사용 가능
 b : no dump , dump 프로그램(명령어)로 백업되지 않는다.
 i : immutable , 해당 파일의 변경, 삭제, 이름변경뿐만 아니라 파일 추가 및 링크 파일도 만들 수 없음. 변경 및 추가가 거의 없는 부팅 관련 파일들에 설정하면 부팅되지 않는 문제로 인한 시스템 장애를 줄일 수 있음. a속성과 함께 사용하면 유용함. root만 사용가능함. 
 A : no atime updates , access가 발생하더라도 파일 시스템의 파일 정보에 저장되는 atime값(atime record)이 갱신되지 않는다. 
 D : sysnchronous directory updates , 디렉토리에 설정하는 속성으로서 D속성이 설정된 디렉토리는 동기화 시킨다. 
 T : top of directory hierarchy , 디렉토리에 설정하는 속성으로서 이 속성이 설정된 디렉토리는 최상위 디렉토리로 인식되어 간주된다. 

 

- chattr 커맨드는 파일의 속성을 변경할 때 쓰인다.
 #chattr [속성 연산] [옵션] [대상]
 + 속성 연산:
 +: 속성 추가
 -: 속성 삭제
 =: 해당 속성만 갖도록 설정(나머지 설정은 삭제)
 -R: 하위의 모든 파일에 대한 속성 변경

 

 

 


 - 다음 "사용자 계정 비밀번호 작성규칙" -   

 

 

[리눅스][초보][보안][내 비밀번호가 안전하지 않다고?]

우리중에는 컴퓨터 메모장 및 에버노트(Ever Notes)에 비밀번호를 저장해 놓는 사람이 있을 것이다. 또한, “password” 혹은 “123456”와 같은 너무나 단순한 비밀번호로 설정하는 사람도 있을 것이

modu4you.com