Apache Hadoop — 1つのPodにHDFSとYARNを立てて運用する
財務フォルダーを一つのチームだけに開き、別の人には読み取りだけを与える
한국어 원문으로 표시합니다.
목표
재무 폴더를 alice 와 finance 그룹만 쓰게 잠그고, bob 이 거절되는 것을 본 뒤 ACL 로 bob 에게 읽기만 연다. 기본 ACL 로 새 파일에도 그 권한이 이어지게 하고, 모두가 쓰는 폴더에서 남의 파일을 지우지 못하게 하는 스티키 비트를 시험한다. 마지막으로 단순 인증이 무엇을 믿는지 정리한다.
왜 중요한가
HDFS 의 권한 모델은 POSIX 와 거의 같다 — 파일과 디렉터리마다 소유자·그룹·권한 비트가 있고, 디렉터리 안을 보려면 그 디렉터리의 실행(x) 권한이 필요하다. 다른 점은 누가 누구인지를 누가 정하느냐다. 기본 설정(simple 인증)에서 NameNode 는 클라이언트가 보낸 사용자 이름을 그대로 믿는다. HADOOP_USER_NAME=root 한 줄이면 누구나 슈퍼유저다. 이 실습이 사용자를 바꿔 가며 시험할 수 있는 것도 그 때문이다.
그래서 권한 비트와 ACL 은 '실수로 남의 자료를 건드리지 않게 하는 울타리' 이지 보안 경계가 아니다. 보안 경계가 필요하면 Kerberos 로 인증을 강제해야 한다.
울타리로서의 권한은 여전히 중요하다. 팀마다 폴더를 나누고, 다른 팀에게는 필요한 만큼만 ACL 로 열고, 모두가 쓰는 임시 폴더에는 스티키 비트를 걸어 남의 파일을 지우지 못하게 한다. 기본 ACL 을 걸지 않으면 새로 생기는 파일에는 권한이 이어지지 않아 '어제는 되던 것이 오늘 파일에서는 안 된다' 는 문의가 온다.
단계
- root 로 /proj/finance 를 만들고 소유자를
alice:finance, 권한을750으로 두세요. HADOOP_USER_NAME=alice로/data/finance/q1.csv를 /proj/finance/ 에 올리세요.HADOOP_USER_NAME=bob으로 /proj/finance/q1.csv 를-cat해 보고, 오류 출력을 /root/hdp/perm/bob_denied.txt 에 저장하세요.- alice 로 bob 에게 ACL 을 주세요 — /proj/finance 에
user:bob:r-x, /proj/finance/q1.csv 에user:bob:r--. - bob 으로 q1.csv 를 읽어 줄 수를 세고 /root/hdp/perm/bob_lines.txt 에 정수로 적으세요.
- alice 로 /proj/finance 에 기본 ACL
default:user:bob:r--를 걸고,/data/finance/q2.csv를 /proj/finance/ 에 올리세요. 새 파일에 bob 의 ACL 이 이어져야 합니다. - root 로 /proj/shared 를 만들어
1777(스티키 비트)로 두고, alice 로/data/finance/q1.csv를 /proj/shared/alice-q1.csv 로 올린 뒤, bob 으로 그것을-rm -skipTrash해 보고 오류 출력을 /root/hdp/perm/sticky.txt 에 저장하세요. - /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 · FileSystem Shell — setfacl · Hadoop in Secure Mode · WebHDFS — ACL Operations
팀 폴더를 잠그기
root 로 HDFS /proj/finance 를 만들고 hdfs dfs -chown alice:finance, hdfs dfs -chmod 750 을 적용하세요.
750 은 소유자 rwx, 그룹 r-x, 나머지 --- 입니다. 소유자를 바꾸는 chown 은 슈퍼유저만 할 수 있습니다 — 그래서 root 로 합니다.
alice 로 올리기
HADOOP_USER_NAME=alice hdfs dfs -put /data/finance/q1.csv /proj/finance/ 로 alice 가 파일을 올리게 하세요.
단순 인증에서는 환경 변수 하나로 사용자가 바뀝니다. 새 파일의 소유자는 올린 사용자, 그룹은 상위 디렉터리의 그룹을 따릅니다(BSD 규칙). -ls 로 확인하세요.
bob 은 거절된다
HADOOP_USER_NAME=bob hdfs dfs -cat /proj/finance/q1.csv 를 실행해 보고, 표준 오류 출력을 /root/hdp/perm/bob_denied.txt 에 저장하세요.
거절 메시지에는 누가(user=), 무엇을 하려다(access=), 어느 아이노드에서 막혔는지(inode=)가 다 들어 있습니다. 파일의 읽기가 아니라 디렉터리의 실행 권한에서 막힌 것을 보세요 — 들어갈 수 없으면 안의 파일은 볼 수 없습니다.
ACL 로 한 사람에게만 열기
alice 로 /proj/finance 에 user:bob:r-x, /proj/finance/q1.csv 에 user:bob:r-- ACL 을 주세요(hdfs dfs -setfacl -m).
권한 비트로는 '소유자·그룹·나머지' 셋밖에 표현하지 못합니다. ACL 은 이름 붙은 사용자와 그룹을 더합니다. 디렉터리에는 실행(x)이 있어야 안의 파일에 닿을 수 있습니다. ACL 을 바꾸는 것은 소유자(또는 슈퍼유저)의 일입니다.
이제 bob 이 읽는다
HADOOP_USER_NAME=bob 으로 /proj/finance/q1.csv 를 -cat 해 줄 수를 세고 /root/hdp/perm/bob_lines.txt 에 정수로 적으세요.
ACL 이 있는 파일의 권한 검사는 이름 붙은 사용자 항목과 마스크를 함께 봅니다. -getfacl 의 #effective: 표시가 실제로 적용되는 권한입니다.
기본 ACL — 새 파일에도 이어지게
alice 로 /proj/finance 에 default:user:bob:r-- 를 걸고, HADOOP_USER_NAME=alice 로 /data/finance/q2.csv 를 /proj/finance/ 에 올리세요. 새 파일 q2.csv 에 user:bob:r-- 가 이어져 있어야 합니다.
기본 ACL 은 디렉터리에만 걸리고, 그 아래 새로 만들어지는 것에 복사됩니다. 이미 있는 q1.csv 에는 소급되지 않습니다. 기본 ACL 을 걸면 새 파일의 나머지(other) 권한도 기본 ACL 을 따르는 것을 -getfacl 로 보세요.
스티키 비트 — 모두의 폴더에서 남의 파일 지키기
root 로 /proj/shared 를 만들어 hdfs dfs -chmod 1777 로 두고, alice 로 /data/finance/q1.csv 를 /proj/shared/alice-q1.csv 로 올린 뒤, HADOOP_USER_NAME=bob hdfs dfs -rm -skipTrash /proj/shared/alice-q1.csv 의 오류 출력을 /root/hdp/perm/sticky.txt 에 저장하세요.
777 인 디렉터리에서는 누구나 누구의 파일이든 지울 수 있습니다(지우기는 디렉터리의 쓰기 권한이므로). 스티키 비트가 있으면 파일의 소유자와 디렉터리의 소유자만 지울 수 있습니다. /tmp 가 그렇게 되어 있는 이유입니다.
울타리와 자물쇠를 구분해 남기기
/root/hdp/perm/report.md 에 ## 소유자와 권한 ## ACL ## 단순 인증의 한계 세 절을 쓰세요. 둘째 절에 5단계의 줄 수를, 셋째 절에 HADOOP_USER_NAME 과 Kerberos 를 넣으세요.
셋째 절이 핵심입니다. 이 실습에서 사용자를 바꾼 방법이 운영에서 무엇을 뜻하는지, 그래서 운영 클러스터에는 무엇이 필요한지를 적으세요.