참고서적 - 모의 해킹으로 알아보는 리눅스 서버 해킹과 보안
drwxr-xr-x라고 나오는 부분: 파일 형식과 권한을 표시
young seoyoung : 해당 파일과 디렉터리의 사용자와 그룹의 소유권을 표시
1번째 필드 | 2~4번째 필드 | 5~7번째 필드 | 8~10번째 필드 |
파일 형식 | 사용자(user) 권한 | 그룹(group) 권한 | 기타 사용자 권한 |
-: 파일 | r: 읽기 권한 | r: 읽기 권한 | r: 읽기 권한 |
d: 디렉터리 | w: 쓰기 권한 | w: 쓰기 권한 | w: 쓰기 권한 |
s: 소켓 파일 | x: 실행 권한 | x: 실행 권한 | x: 실행 권한 |
▲ 파일 권한 설명
종류 | 파일 | 디렉터리 |
r(읽기 권한) | 파일 읽기, 복사(cp 명령어) 가능 | ls 명령어로 디렉터리 내 목록 조회 가능 |
w(쓰기 권한) | 파일 수정, 이동, 삭제 가능(rm, mv 가능) | 디렉터리 내 파일을 생성, 삭제 가능 |
x(실행 권한) | 파일 실행 가능(실행 파일, 셸 스크립트) | cd 명령어로 디렉터리 접근 가능(읽기 권한이 없다면 ls는 불가) |
▲ 파일, 디렉터리 권한 종류
유형 | 설명 | 소유자 변경 명령어 |
사용자 | 파일의 소유자 | chown |
그룹 | 해당 파일의 그룹 정보 | chgrp |
기타 사용자 | 소유자, 그룹에 속하지 않는 모든 사용자 |
▲ 파일 소유자 유형
다음 예시로 사용자와 권한 종류를 알아보자.
drwxr-xr-x
첫 번째 필드 d -> 파일 형식이 디렉터리.
2~4번째 사용자 권한은 rwx -> 사용자가 읽기, 쓰기, 실행 권한을 가지고 있음.
5~7번째 그룹 권한, 8~10번째 사용자 권한 모두 r-x -> 그룹과 기타 사용자는 읽기와 실행 권한만 가지고 있음.
1. whoami, 현재 사용자 확인
2. adduser/useradd, 사용자 추가
명령어 형식: adduser <사용자명>
-d 옵션: 홈 디렉터리 변경
-g <그룹ID> 또는 -G <그룹명>: 추가 사용자의 그룹 지정
*사용자의 추가, 제거, 확인 등의 명령은 일반 사용자는 실행할 수 없는 명령으로 sudo 명령어를 이용해 root 권한으로 실행해야 함.
▲ useradd 이용해 testuser 사용자 생성, 그룹 ID를 1로 지정한 testuser2 사용자 생성
▲ 맨밑에 testuser 사용자 확인 가능, 그룹 ID가 1로 지정된 testuser2 사용자 확인 가능.
* /etc/passwd 파일엔 사용자의 정보가 사용자 id로 정렬된 상태로 저장되어 있음.
구조: [ 사용자명:비밀번호:사용자 ID:그룹 ID:코멘트:홈 디렉터리:기본 셸 ]
비밀번호는 암호화되어 x로 나오고, /etc/shadow 파일에 저장됨.
* cat 명령어는 파일 내용을 간단하게 출력하기 위해 사용하는 명령어. 파일 내용을 볼 수 있다는 점에서 more(페이지 단위 출력), tail(맨 마지막 페이지부터 출력) 명령어와 유사.
3. userdel, 사용자 삭제
$ sudo userdel 사용자명
4. usermod, 사용자 변경
사용자 설정(홈 디렉터리, 비밀번호, 그룹명 등)을 변경할 때 사용.
주요 옵션: -d(홈 디렉터리 변경), -g(그룹 id 변경), -p(비밀번호 변경)
# usermod 명령어 실행 형식
$ usermod <옵션> <사용자명>
# testuser 사용자의 그룹 ID로 홈 디렉터리를 /tmp로 변경
$ sudo usermod -g 1 -d /tmp testuser
5. chmod, 파일 권한 변경
파일과 디렉터리의 소유자별 읽기, 쓰기, 실행 권한을 변경할 때 사용.
# chmod 명령어 실행 형식
$ chmod <권한> <파일명>
방식 두 가지
(1) r, w, x 기호를 이용해 표현
: ex) chmod u+rw abc.txt -> 소유자 권한에 읽기, 쓰기 권한을 추가한다는 것.
(2) 2진수의 비트 형태로 표현
: 아홉 자리로 앞에 세 자리는 사용자, 중간 세 자리는 그룹, 마지막은 기타 사용자에 대한 권한
권한 | 기호 | 숫자 값 |
읽기 | r | 4 |
쓰기 | w | 2 |
실행 | x | 1 |
없음 | - | 0 |
▼ 실습
# copy2.txt에 대한 권한 확인 후, 소유자(u)에 쓰기 권한 제거(-w) -> -rw가 -r로, 3번째 w가 -로 변경됨.
▼ 실습
# 비트를 이용해 소유자, 그룹, 기타 사용자 권한 변경
# 6(rw-), 4(r--), 4(r--)로 파일 권한 변경
* 6 (4 + 2) (읽기 + 쓰기)
6. chown, 파일 소유권 변경
$ sudo chown <변경사용자> <파일명>
7. chgrp, 파일 그룹 변경
$ sudo chgrp <변경그룹> <파일명>
8. umask, 초기 파일 접근 권한 설정
옵션 없이 실행하면 현재 초기 파일 접근 권한이 출력됨.
-S 옵션: 비트로 출력되는 접근 권한 값을 r, w, x와 같은 문자로 출력 가능.
# 초기 파일 접근 권한 변경할 때
$ umask <마스크값>
umask의 비트 계산 방법: 파일의 최대 권한(666) - 디렉터리 최대 권한(777) = 결과 비트값이 기본 파일 접근 권한이 됨.
① 파일의 최대 권한 설정
rw- rw- rw- (666)
110 110 110 (666, 2진수로 변환)
② unmask 값을 설정 (예: 022)
umask 값 022를 2진수로 변환하면:
000 010 010 (022)
③ 최대 권한에서 umask 값을 빼기
110 110 110 (666) # 최대 권한
000 010 010 (022) # umask 값
-------------------
110 100 100 (644)
rw- r-- r-- (644)
즉 최종적으로 적용되는 파일 권한은 rw- r-- r--