LabHub
배우기 러닝패스 코스

Linux基礎

権限・ユーザ・グループを扱う

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 로 현재 권한을 읽고 기대값과 비교하세요. 결과는 종료 코드로 알리고, 불일치일 때는 현재 권한도 함께 출력합니다.