LabHub
배우기 러닝패스 코스

Linux Fundamentals

Working With Permissions, Users and Groups

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

사용자와 그룹을 만들고, 공유 디렉터리에 필요한 특수 비트를 걸고, 권한이 기대대로인지 스스로 점검하는 스크립트까지 만듭니다.

왜 중요한가

권한 사고의 대부분은 "파일 권한"만 보고 "디렉터리 권한"을 잊어서 생깁니다. 파일을 지우는 데 필요한 것은 그 파일에 대한 쓰기 권한이 아니라 그 파일이 들어 있는 디렉터리에 대한 쓰기 권한입니다. 그래서 읽기 전용 파일도 남이 지울 수 있고, 유닉스는 그 구멍을 막으려고 sticky 비트를 따로 뒀습니다. 같은 이유로 여러 사람이 쓰는 디렉터리에는 setgid 가 필요합니다 - 안 걸면 각자 자기 기본 그룹으로 파일을 만들어 서로 못 읽는 상황이 반복됩니다.

단계

  1. /root/secret.txt 를 만들고 권한을 600 으로 맞추세요.
  2. student1 사용자를 만드세요.
  3. devs 그룹을 만들고 student1 을 그 그룹에 넣으세요(기존 그룹은 유지).
  4. /root/shared/report.txt 를 만들고 소유자:그룹을 student1:devs 로 바꾸세요.
  5. /root/shared 디렉터리의 그룹을 devs 로 하고 권한을 2770 으로 맞추세요.
  6. /root/shared/incoming 디렉터리를 만들고 권한을 1777 로 맞추세요.
  7. /root/shared/run.sh 를 만들고 권한을 750 으로 맞추세요.
  8. /root/shared/checkmode.sh <파일경로> <기대권한> 을 만드세요. 실행 권한이 있어야 하고, 권한이 일치하면 종료 코드 0, 다르면 0이 아닌 코드로 끝나면서 현재 권한을 출력해야 합니다. 파일이 없을 때도 0이 아닌 코드여야 합니다.

참고

비밀 파일 권한 잠그기

/root/secret.txt 를 만들고 권한을 600 으로 맞추세요.

8진수 세 자리는 소유자/그룹/기타 순서입니다. 소유자만 읽고 쓸 수 있게 하려면?

사용자 만들기

student1 사용자를 만드세요.

useradd 로 만듭니다. id 명령으로 확인할 수 있습니다.

그룹 만들고 사용자 넣기

devs 그룹을 만들고 student1 을 그 그룹에 넣으세요(기존 그룹은 유지).

groupadd 로 그룹을 만들고, usermod 로 보조 그룹에 추가합니다. -a 를 빼면 기존 그룹이 날아갑니다.

소유자와 그룹 바꾸기

/root/shared/report.txt 를 만들고 소유자:그룹을 student1:devs 로 바꾸세요.

chown 은 소유자:그룹 형식을 한 번에 받습니다. 파일이 먼저 있어야 합니다.

공유 디렉터리에 setgid 걸기

/root/shared 디렉터리의 그룹을 devs 로 하고 권한을 2770 으로 맞추세요.

8진수 네 자리에서 맨 앞자리가 특수 비트입니다. 그룹 상속을 담당하는 값을 찾으세요.

업로드 디렉터리에 sticky 걸기

/root/shared/incoming 디렉터리를 만들고 권한을 1777 로 맞추세요.

/tmp 의 권한을 ls -ld 로 확인해 보세요. 같은 형태로 만들면 됩니다.

실행 스크립트 권한 정리

/root/shared/run.sh 를 만들고 권한을 750 으로 맞추세요.

소유자는 읽기·쓰기·실행, 그룹은 읽기·실행, 기타는 아무것도 없는 조합입니다.

권한 점검 스크립트 만들기

/root/shared/checkmode.sh <파일경로> <기대권한> 을 만드세요. 실행 권한이 있어야 하고, 권한이 일치하면 종료 코드 0, 다르면 0이 아닌 코드로 끝나면서 현재 권한을 출력해야 합니다. 파일이 없을 때도 0이 아닌 코드여야 합니다.

stat -c %a 로 현재 권한을 읽고 기대값과 비교하세요. 결과는 종료 코드로 알리고, 불일치일 때는 현재 권한도 함께 출력합니다.