RHCSA 뿌수기 3일차
SetUID, SetGID, Sticky bit
SetUID와 SetGID는 비슷하기에 동시에 설명하도록 하겠습니다.
지난 2일차에서 퍼미션의 개념을 배웠다. 사실 퍼미션은 755라고 지정하였지만 사실 0755가 맞는 표현이다.
이를 확장 퍼미션이라고 하는데 우선 SetUID는 0부분을 4로 바꾸어주고, SetGID는 2로 바꾸어주면 확장 퍼미션이 설정된다.
확장 퍼미션의 특징은 각 USER, GROUP 실행권한에 x가 아닌 s가 붙는것이다 (SetUID의 S이다.)
그럼 이 확장 퍼미션의 정의가 뭘까 ?
<SetUID>
- SetUID가 설정된 파일 실행시, 특정 작업 수행을 위하여 일시적으로 파일 소유자의 권한을 얻게된다.
- 즉, 소유자가 root인 파일에 SetUID가 설정되어 있을때, 일반사용자가 그 file을 실행하게 되면 그 순간 잠시동안 파일의 소유자인 root의 권한을 빌려 오는 것이다.
<SetGID>
-SetGID가 설정된 파일 실행시, 특정 작업 수행을 위하여 일시적으로 파일 그룹의 권한을 얻게된다.
잠시 소유자의 권한을 얻는다 이말이 무엇일까 ??
예를들어 패스워드를 바꿀때 /etc/passwd 파일의 내용이 변경된다.
하지만 해당 파일의 권한은 644로 다른 사용자가 읽기만 할수 있지 수정은 못한다.
그럼 어떻게 수정할까 ? 바로 이때 사용하는 기능이 SetUID 이다.
which 명령을 통해 passwd의 실행 경로가 어떻게 되는지 보자
/usr/bin/passwd에 있는것을 볼 수 있다. 해당 파일의 권한을 보자
소유자의 실행권한에 s가 설정되어있고 이는 setuid가 설정된것을 의미한다
즉 passwd를 실행할때 잠시 root의 권한을 빌려와 /etc/passwd의 파일을 수정해 패스워드를 변경할 수 있는것을 의미한다. (setgid도 이와 비슷하다)
그럼 SetUID와 SetGID는 어떻게 설정할까 ?
Setuid는 기본 퍼미션앞에 4를 붙여 만들 수 있다.
(u+s 도 가능)
Setuid는 기본 퍼미션앞에 2를 붙여 만들 수 있다.
(g+s 도 가능)
Sticky bit는 위 2개와 조금 다르다.
예를들어 어떤 파일에 기타사용자에 대한 권한이 읽기, 쓰기, 실행이 다 있다면 모든사용자가 쓸수 있어 편하지만 누구나 삭제가 가능하기 때문에 문제가 발생 할 수 있다.
Sticky bit가 설정된 디렉터리에서는 내가 생성한 파일을 다른 사람이 삭제할 수 없게된다(게시판의 개념)
Sticky bit의 특징은 기타사용자 실행권한에 t가 붙는 것이다.
실습을 해보자
여기 스티키 비트가 설정된 파일a와 스티키비트가 설정된 디렉터리내에 있는 파일 b가 있다 삭제해보자
삭제가 안된다.
lsattr, chattr
이전에는 퍼미션의 개념에 대해서만 공부했다. 퍼미션은 사용자별로 권한을 제어 하는 것인데 파일의 속성에 따라서 유저를 제한할수도 있다. 이 속성의 개념은 파일만이 가지고 있는 개념이다
chattr명령어는 특정파일에 속성을 변경하고자 할때 사용되며,
lsattr명령어는 특정파일에 대한 속성을 확인하고자 할때 사용된다.
lsattr {파일 이름} 을 통해 속성 확인이 가능하고
chattr {옵션} {속성} {파일이름}을 통해 속성변경이 가능하다.
대표적으로 a, i옵션을 알아보도록 하겠다.
a속성(append only)
해당파일을 추가(append mode)만 할수 있다. 파일보안을 위해 주로 사용하는 속성이다.
디렉토리에 설정하면 해당디렉토리에 파일을 생성만 할수 있다.
i속성(immutable)
이 속성이 지정되어 있다면 해당파일의 변경, 삭제, 이름변경뿐 아니라 파일추가 및 링크파일도 만들수 없게된다. 변경추가가 거의 없는 부팅관련 파일들에 설정하면 부팅되지않는 문제로 인한 시스템장애를 줄일수 있다.
실습해보자
현재 test1.txt. 파일에는 어떠한 속성도 있지 않다. 추가시켜보도록 하겠다.
"i" 속성을 설정하면 해당파일에 대해서는 root사용자라도 삭제,변경,추가가 불가능하다.
삭제 불가능
수정 불가능
내용 추가 불가능
이처럼 i는 root포함하여 모든 계정에 대해서 수정 삭제 내용추가가 제한이 된다.
그럼 i 속성을 제거해보자
첫번째 줄부터 i 속성을제거
두번째 줄은 test1.txt의 속성 확인
세번쨰줄은 삭제 명령어
다시하면 test1의 존재를 확인하니 없어진것이 확인 가능하다.
(참고로 >, >> 의 차이는 >는 내용을 덮어씌우는것이고 >>은 추가 시키는것이다.)
이번엔 a 명령어를 사용해보자
a속성이 부여 된것을 확인
삭제와 수정이 안되는 것을 확인
오직 내용 추가만이 가능하다
a속성을 제거하고 삭제가 가능한것을 보았고 해당 파일또한 없어진것을 확인 하였다.
useradd 심화
useradd의 옵션을 사용하면 생성시의 기본값을 변경할 수 있고,
또 생성시 기본 설정들을 바꿀 수 있다
기본값부터 알아보자
useradd -D {옵션} {값} -D라는 옵션을 통해 유저생성시 기본값을 변경할 수 있다.
-b 디렉터리 사용자 생성시 기본 홈디렉터리를 지정한다
-e 만기일 사용자 생성시 expire 필드값을 지정한다
-f 기간 사용자 생성시 inactive필드값을 지정한다
-g GID 기본그룹 gid를 지정한다
-s 쉘 기본 쉘을 지정한다
이런식으로 사용자가 생성되면 홈디렉터리가 바뀌게 된다.
그럼 기본설정말고 사용자 생성시 여라까지 값들으 바꿔보자
-u UID 사용자의 uid 설정
-U 사용자와 같은이름의 그룹 생성
-g GID 주그룹지정
-G 보조그룹지정
-c 주석 사용자 소개 작성
-d 디렉터리 홈 디렉터리 지저아
-s 쉘 기본 쉘 지정
-o uid uid 중복허용
-p 패스워드 패스워드 지정
-m 사용자 홈디렉터리가 존재하지 않을 경우 생성해준다
-e 만기일 만기일을 설정한다
-f 기간 inactive 필드값
이런식으로 변경이 가능하다
chage
chage명령은 패스워드의 속성을 변경하는 명령어이다.
패스워드 파일의 구성을 보면
user : hash : lastchange : min : max : waring : inactive : expire : blank
진한 부분이 수정가능하다.
-l 지정된 사용자의 패스워드 속성을 확인
-d 지정된 사용자의 마지막으로 패스워드를 변경할 날짜를 수정한다. (단위 : 일)
-m 지정된 사용자의 패스워드를 변경할 수 있는 최소 기간을 수정한다 (단위 : 일)
-M 지정된 사용자의 패스워드를 사요할 수 있는 최대 기간을 수정한다 (단위 : 일)
-W 지정된 사용자의 패스워드의 유효기간이 만료하기 전 사용자에게 경고 하는 날짜를 지정 (단위 : 일)
-I 패스워드가 만료된 후 추가 기간을 주어 계정의 패스워드를 변경할 수 있는 날짜를 수정한다 (단위 : 일)
-E 사용자의 마료날짜를 특정 날짜로 바꿈 (단위 YYYY-MM-DD)
user01의 패스워드 기본설정을 확인해 볼 수 있다
user01의 패스워드 최소일수 1 최대일수 90 경고 일수 3 만료날짜 2018-12-31 만료후 패스워드 변경 가능기간 10 패스워드 변경까지 90일로 지정하였다. -
변경이 가능한 것을 볼 수있다.
/etc/sudoers
우리는 sudo 라는 명려을 통해 루트 권한으로 파일을 실행할 수 있다. 하지만 이 sudo는 지정된 사용자만 사용가능한데 sudo명령 수행을 가능하게 하려면 이 파일을 수정거나 wheel 그룹에 포함 시켜주면 sudo 명령이 가능하다.
실습해보다 일단 tom, mart, LEE 사용자를 먼저 생성해준다
해당 파일을 편집할떄는 root계정으로 visudo명령어를 쳐줘야한다.
톰 계정으로 sudo 명령이 가능하다(비번 입력해야함)
mart 계정은 비번없이 sudo가 가능하다.
lee는 권한이 없다고 나온다.
휠 그룹에 LEE를 추가시켜보자
sudo 명령을 사용가능한것을 알 수 있다.