Apache Hadoop — HDFS 와 YARN 을 한 파드에 세우고 운영한다 · 권한과 사용자 · 실습
재무 폴더를 한 팀에만 열고 다른 사람에게 읽기만 준다
목표
재무 폴더를 alice 와 finance 그룹만 쓰게 잠그고, bob 이 거절되는 것을 본 뒤 ACL 로 bob 에게 읽기만 연다. 기본 ACL 로 새 파일에도 그 권한이 이어지게 하고, 모두가 쓰는 폴더에서 남의 파일을 지우지 못하게 하는 스티키 비트를 시험한다. 마지막으로 단순 인증이 무엇을 믿는지 정리한다.
왜 중요한가
HDFS 의 권한 모델은 POSIX 와 거의 같다 — 파일과 디렉터리마다 소유자·그룹·권한 비트가 있고, 디렉터리 안을 보려면 그 디렉터리의 실행(x) 권한이 필요하다. 다른 점은 누가 누구인지를 누가 정하느냐다. 기본 설정(simple 인증)에서 NameNode 는 클라이언트가 보낸 사용자 이름을 그대로 믿는다. HADOOP_USER_NAME=root 한 줄이면 누구나 슈퍼유저다. 이 실습이 사용자를 바꿔 가며 시험할 수 있는 것도 그 때문이다.
그래서 권한 비트와 ACL 은 '실수로 남의 자료를 건드리지 않게 하는 울타리' 이지 보안 경계가 아니다. 보안 경계가 필요하면 Kerberos 로 인증을 강제해야 한다.
울타리로서의 권한은 여전히 중요하다. 팀마다 폴더를 나누고, 다른 팀에게는 필요한 만큼만 ACL 로 열고, 모두가 쓰는 임시 폴더에는 스티키 비트를 걸어 남의 파일을 지우지 못하게 한다. 기본 ACL 을 걸지 않으면 새로 생기는 파일에는 권한이 이어지지 않아 '어제는 되던 것이 오늘 파일에서는 안 된다' 는 문의가 온다.
단계
1. root 로 /proj/finance 를 만들고 소유자를 alice:finance, 권한을 750 으로 두세요.
2. HADOOP_USER_NAME=alice 로 /data/finance/q1.csv 를 /proj/finance/ 에 올리세요.
3. HADOOP_USER_NAME=bob 으로 /proj/finance/q1.csv 를 -cat 해 보고, 오류 출력을 /root/hdp/perm/bob_denied.txt 에 저장하세요.
4. alice 로 bob 에게 ACL 을 주세요 — /proj/finance 에 user:bob:r-x, /proj/finance/q1.csv 에 user:bob:r--.
5. bob 으로 q1.csv 를 읽어 줄 수를 세고 /root/hdp/perm/bob_lines.txt 에 정수로 적으세요.
6. alice 로 /proj/finance 에 기본 ACL default:user:bob:r-- 를 걸고, /data/finance/q2.csv 를 /proj/finance/ 에 올리세요. 새 파일에 bob 의 ACL 이 이어져야 합니다.
7. root 로 /proj/shared 를 만들어 1777(스티키 비트)로 두고, alice 로 /data/finance/q1.csv 를 /proj/shared/alice-q1.csv 로 올린 뒤, bob 으로 그것을 -rm -skipTrash 해 보고 오류 출력을 /root/hdp/perm/sticky.txt 에 저장하세요.
8. /root/hdp/perm/report.md 에 ## 소유자와 권한 ## ACL ## 단순 인증의 한계 세 절을 쓰세요. 둘째 절에 5단계의 줄 수를, 셋째 절에 HADOOP_USER_NAME 과 Kerberos 를 넣으세요.
참고
- 이 파드의 NameNode 는 root 로 떠 있어 root 가 HDFS 슈퍼유저입니다.
HADOOP_USER_NAME을 비우면 root 입니다. - 그룹은 NameNode 가 자기 쪽 운영체제에서 사용자의 그룹을 찾아 정합니다. 이 파드에는 alice·bob 계정이 없어서 둘 다 그룹이 없습니다 — 소유 그룹(finance)은 이름표로만 쓰입니다.
- ACL 은
hdfs dfs -setfacl -m <항목> <경로>, 확인은-getfacl. 디렉터리의 기본 ACL(default:로 시작)은 그 아래에 새로 생기는 파일에만 이어집니다. - 흔한 실수: 파일에만 ACL 을 주고 디렉터리의 실행 권한을 잊는 것, 이미 있는 파일에 기본 ACL 이 소급된다고 여기는 것, 스티키 비트를
777로 잘못 주는 것(1777). - 공식 문서: [HDFS Permissions Guide](https://hadoop.apache.org/docs/r3.5.0/hadoop-project-dist/hadoop-hdfs/HdfsPermissionsGuide.html) · [FileSystem Shell — setfacl](https://hadoop.apache.org/docs/r3.5.0/hadoop-project-dist/hadoop-common/FileSystemShell.html#setfacl) · [Hadoop in Secure Mode](https://hadoop.apache.org/docs/r3.5.0/hadoop-project-dist/hadoop-common/SecureMode.html) · [WebHDFS — ACL Operations](https://hadoop.apache.org/docs/r3.5.0/hadoop-project-dist/hadoop-hdfs/WebHDFS.html#ACL_Operations)
8단계
- 팀 폴더를 잠그기
- alice 로 올리기
- bob 은 거절된다
- ACL 로 한 사람에게만 열기
- 이제 bob 이 읽는다
- 기본 ACL — 새 파일에도 이어지게
- 스티키 비트 — 모두의 폴더에서 남의 파일 지키기
- 울타리와 자물쇠를 구분해 남기기