LabHub
배우기 러닝패스 코스

Apache Hadoop — Stand up and run HDFS and YARN in one pod

Open the finance folder to one team only and give someone else read-only access

LabHub 에서 이어서 보기

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

목표

재무 폴더를 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/financeuser:bob:r-x, /proj/finance/q1.csvuser: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_NAMEKerberos 를 넣으세요.

참고

팀 폴더를 잠그기

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/financeuser:bob:r-x, /proj/finance/q1.csvuser: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/financedefault: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_NAMEKerberos 를 넣으세요.

셋째 절이 핵심입니다. 이 실습에서 사용자를 바꾼 방법이 운영에서 무엇을 뜻하는지, 그래서 운영 클러스터에는 무엇이 필요한지를 적으세요.