(이번에도 복습에 가깝긴한데, 아주 조금 더 심화된 내용인듯)
find / -perm -4000
=> 시스템 전체에서 set-uid 설정된 파일들을 모두 출력 (다른 권한이 있어도 상관x)
find / -perm 4000
=> 시스템 전체에서 set-uid만 설정된 파일들을 모두 출력
set-uid가 설정된 파일은 권한상승으로 보안취약점이 될 수 있으므로
주기적으로 검색하여 점검해야 한다
yum -y install man-pages
=> man page 설치. #include <stdlib.h> import 필요.
c언어 소스코드에서 int system(const char *command); 로 쉘 명령어를 실행할 수 있다. exit(); 도 사용 가능...
(const 상수, 변경되지 않는 값)
C언어 함수를 사용한 실습1
#include <sys/types.h> //setuid, seteuid 시스템에서 사용하는 다양한 자료형들
#include <unistd.h> //setuid, seteuid C컴파일러 헤더 파일
#include <stdlib.h> //system 함수를 이용하기 위한 include
printf("uid = %d\n", getuid());
// uid 출력
printf("euid = %d\n", geteuid());
// euid 출력
setuid(geteuid());
// euid값을 system() 함수를 이용해 setuid하여 euid 권한 획득
system("head /etc/shadow");
// system 함수로 /etc/shadow를 읽는다
(자꾸 실습 실행파일 동작이 안돼서 생각해보니 지난번 실습때 /etc/fstab에 /tmp 폴더에 noexec 옵션을 주었었다.
그래서 mount -o remount rw /tmp 로 다시 remount 해주었음)
C언어 함수를 사용한 실습2
// system() 함수를 사용하지 않고
FILE *fp;
char buf[1000];
fp = fopen("/etc/shadow", "r")); //file open. 값이 NULL일 경우 예외처리는 알아서...
fgets(buf, sizeof(buf)-1, fp); //fp를 적정바이트만큼 읽어와 buf에 저장
fclose(fp); //file open 후에는 꼭 close 해준다
printf("/etc/shadow 1 line = %s\n", buf);
//buf 변수에 내용을 담아 printf 등으로 출력할 수도 있다
#include <stdio.h>
=> printf
#include <stdlib.h>
=> exit, fopen, fgets, fclose
(max 3 exit, max fopen 이런식으로 명령어를 사용하면 설명서를 볼 수 있다
man은 여러 섹션으로 나누어져 있는데, 3은 library calls (ex stdio.h)를 의미함.
3번 섹션의 exit. 다른건 그냥 3 없이도 되는데 exit는 중복이 있나보다)
실습1, 실습2
=> set-uid가 설정되어 있을 때는 일반유저로 /etc/shadow를 읽을 수 있지만,
set-uid를 삭제하면 권한상승이 일어나지 않아(set-uid가 설정되어 있을 때만 euid권한이 소유자의 권한이 된다) 일반유저로는 허가 거부가 나게 된다.
[ 디렉터리
r파일목록조회, w파일생성/삭제, x디렉터리내부로접근 ]
r읽기권한 실습 (cat /etc/shadow)
1) 일반파일
- (관리자root는 제약을 받지 않는다)
- 일반유저 : /etc 폴더에 들어갈 수는 있으나, /etc/shadow 파일에 대한 허가거부
+ 내용을 조회할 수 없으므로 파일 복사도 불가능하다 (wx 권한은 관계없음)
2) 디렉터리 (ex mkdir -m000 /tmp/test1/ww)
- (관리자root는 제약을 받지 않는다)
- 일반유저 : 허가 거부 ( ls: cannot open directory ww: 허가 거부 )
w쓰기권한 실습
1) 일반파일
- (관리자root는 제약을 받지 않는다)
- 일반유저 :
파일 수정시, 수정할 디렉토리의 w권한 또는 파일의 w권한 둘 중 하나만 있어도 수정/삭제가능. 그리고 권한이 없어도 본인소유/본인소유그룹의 파일이라면 수정/삭제할 수 있다.
(파일을 수정하고 난 뒤엔, root 소유의 파일도 수정한 사용자의 소유/소유그룹으로 자동 변경된다)
2) 디렉터리 (ex mkdir -m000 /tmp/test1/ww)
- (관리자root는 제약을 받지 않는다)
- 일반유저 : cp 명령어로 복사할 때, 복사할 파일의 r권한이 있어야 하고, 복사될 디렉터리의 other부분 w권한이 있어야 한다. 삭제&생성 : 삭제&생성할 파일의 디렉터리 other부분 w권한이 있어야 한다.
문제 (other 기준, 파일의 소유자는 root 소유그룹도 root 일 때) 파일이 속한 폴더의 권한 : rwx 파일의 권한 : r-- 이 때 일반유저는 파일을 수정할 수있는가? => 폴더의 w 권한이 있으므로 파일을 수정할 수 있다. |
x실행권한 실습
1) 일반파일
- (관리자root도 x권한이 없으면 실행불가능)
- 일반유저 : x 권한이 없으면 허가 거부
2) 디렉터리 (ex mkdir -m000 /tmp/test1/ww)
- (관리자root는 제약을 받지 않는다)
- 일반유저 : x 권한이 없으면 내부 목록 조회 불가능 ( ls: cannot open directory ww: 허가 거부 )
set-gid권한 실습
1) 일반파일
- (관리자root는 큰 의미가 없다)
- 일반유저 :
파일 조회/복사 : 파일의 r권한, 파일 위치의 디렉터리 rx권한, 복사될 디렉터리의 w권한
파일 수정/삭제 : 파일의 w권한 또는 파일이 속한 디렉터리의 w권한, 소유자/소유그룹
디렉터리 조회/복사 : 디렉터리의 x권한, 복사될 디렉터리의 rwx권한
디렉터리 삭제 : 상위 디렉터리의 rwx권한
* 관리자root는 디렉터리 rwx 권한에 제약받지 않는다. 단, 파일의 x권한에는 제약받는다.
일반유저는 모든 권한에 제약받는다.
* 심볼릭링크된 파일/디렉터리의 권한은 의미가 없으며 원본 파일/디렉터리의 권한을 따른다
sticky bit 권한 실습은 다음 시간에.