기본 HDFS 권한을 읽고 수정하기

빅 데이터Beginner
지금 연습하기

소개

소매업체의 분석가는 상품 데이터셋을 읽어야 하지만 바꿀 수는 없어야 합니다. 파일이 존재하고 블록이 정상이더라도 다른 사용자에게는 Permission denied가 표시될 수 있습니다. 저장 상태와 접근 권한은 서로 다른 질문에 답합니다. 데이터가 사용 가능한지, 그리고 이 계정에 접근이 허용되는지입니다.

HDFS는 소유자, 그룹, 권한 비트로 기본 접근을 결정합니다. 일반 소유자인 labex로 작업하고, bigdata 그룹을 통해 준비된 analyst 계정에 데이터셋을 공유합니다. 별도의 일반 계정인 nobody는 그룹 외부 사용자를 나타냅니다. NameNode는 hdfs로 실행되며 여러분은 HDFS 슈퍼유저가 아닙니다.

기존 권한을 읽고 그룹 읽기 전용 접근을 설정한 뒤 디렉터리 통과 문제를 재현합니다. 이 검사는 로컬 Linux 파일 권한이 아니라 HDFS 권한을 사용합니다. 이 환경은 단순 인증 방식의 학습용 환경이며 Kerberos와 같은 안전한 운영 환경 인증을 보여주지는 않습니다. 모든 실습 데이터는 이전 실습과 독립적입니다. 터미널을 사용하세요.

접근 규칙 읽기

이 단계에서는 비공개 데이터셋의 소유자, 그룹과 접근 모드를 확인합니다.

로컬 프로젝트 디렉터리에서 시작합니다.

cd /home/labex/project

HDFS의 -ls -d 옵션은 디렉터리 내용 대신 디렉터리 항목 자체를 나열합니다. 디렉터리와 파일을 함께 확인합니다.

hdfs dfs -ls -d /user/labex/basic-permissions/team /user/labex/basic-permissions/team/products.txt

주요 필드에는 다음 모드와 계정이 포함되어야 합니다. 크기와 타임스탬프는 달라질 수 있습니다.

drwx------  ... labex labex ... /user/labex/basic-permissions/team
-rw-------  ... labex labex ... /user/labex/basic-permissions/team/products.txt

첫 문자는 객체 유형을 나타냅니다. d는 디렉터리이고 -는 파일입니다. 다음 아홉 문자는 세 개씩 묶여 소유자(owner), 그룹(group), 기타(other) 사용자를 나타냅니다. r은 읽기, w는 쓰기, x는 실행이며 디렉터리에서는 통과를 뜻합니다. 대시는 해당 권한이 없다는 뜻입니다.

파일에서 읽기 권한은 내용을 읽도록 허용하고 쓰기 권한은 내용을 수정하도록 허용합니다. 디렉터리에서 읽기는 이름 목록을 보는 권한이고, 쓰기는 통과 권한과 함께 항목 생성이나 삭제를 제어하며, 실행은 이름을 아는 하위 항목에 접근하기 위해 디렉터리를 통과하는 권한입니다. 따라서 파일을 읽으려면 파일 자체뿐 아니라 경로를 따라가는 권한도 필요합니다.

현재 디렉터리 모드는 labex에 모든 접근을 허용하고 다른 누구에게도 허용하지 않습니다. 파일은 labex에 읽기와 쓰기를 허용합니다. 소유자가 읽을 수 있는지 확인합니다.

hdfs dfs -cat /user/labex/basic-permissions/team/products.txt

예상 텍스트는 다음과 같습니다.

notebook pen
folder notebook

로컬 출력 리디렉션으로 초기 목록을 저장합니다.

hdfs dfs -ls -d /user/labex/basic-permissions/team /user/labex/basic-permissions/team/products.txt > /home/labex/project/output/initial-permissions.txt

없거나 손상된 파일이 아니라 비공개 파일임을 확인했습니다. 다음으로 의도한 그룹에 필요한 접근만 부여합니다.

그룹에 읽기 전용으로 공유하기

이 단계에서는 bigdata 그룹에 디렉터리 통과와 파일 읽기를 허용하고 분석가의 접근을 테스트합니다.

준비된 labex와 analyst 사용자는 모두 bigdata의 구성원입니다. HDFS의 -chgrp는 객체의 그룹을 바꿉니다. 소유자이면서 새 그룹의 구성원이므로 HDFS 슈퍼유저가 되지 않고도 설정할 수 있습니다.

hdfs dfs -chgrp bigdata /user/labex/basic-permissions/team /user/labex/basic-permissions/team/products.txt

-chmod로 모드를 설정합니다. 숫자 각 자리는 한 묶음의 권한을 나타냅니다. r=4, w=2, x=1이며, 소유자, 그룹, 기타 사용자별로 필요한 값을 더합니다.

모드 소유자 그룹 기타
디렉터리의 750 읽기, 쓰기, 통과 읽기와 통과 접근 불가
파일의 640 읽기와 쓰기 읽기 접근 불가

디렉터리 모드를 적용합니다.

hdfs dfs -chmod 750 /user/labex/basic-permissions/team

파일 모드를 적용합니다.

hdfs dfs -chmod 640 /user/labex/basic-permissions/team/products.txt

이제 실제 분석가 계정으로 테스트합니다. sudo -u analyst는 이 명령만 준비된 일반 사용자로 실행합니다. HDFS 클라이언트의 절대 경로는 같은 도구를 선택합니다. 이것은 다른 계정을 테스트하는 것이며, 일반 파일 작업을 관리자로 하라는 지시가 아닙니다.

sudo -u analyst /usr/local/bin/hdfs dfs -cat /user/labex/basic-permissions/team/products.txt

같은 두 줄의 상품 텍스트가 나타나야 합니다. 그룹은 디렉터리를 통과하고 파일을 읽을 수 있습니다.

쓰기 여부도 테스트합니다. -appendToFile은 접근이 허용되면 로컬 파일의 내용을 HDFS 파일 뒤에 추가합니다. /tmp에 제공된 읽기 전용 테스트 파일에는 신뢰하는 데이터셋에 추가되어서는 안 되는 상품 이름이 들어 있습니다. 일반 테스트 계정이 읽을 수 있도록 비공개 로컬 홈 디렉터리 밖에 두었습니다. 덕분에 HDFS 쓰기 권한만 분리해 테스트할 수 있습니다. 다음 명령은 실패하는 것이 정상입니다.

sudo -u analyst /usr/local/bin/hdfs dfs -appendToFile /tmp/labex-hdfs-write-probe.txt /user/labex/basic-permissions/team/products.txt

Permission denied와 쓰기 접근을 가리키는 내용을 찾으세요. 실패가 원하는 결과입니다. 분석가는 읽을 수 있지만 추가할 수 없습니다. 의도적으로 접근이 거부되는 상황에서는 0이 아닌 종료 상태가 정상입니다. 다음 단계로 진행하세요. 파일을 모든 사용자가 쓸 수 있게 하면 이 보호가 사라집니다.

디렉터리 통과 문제 진단하기

이 단계에서는 권한 비트 하나를 바꾸고 그로 인한 접근 실패를 관찰한 뒤 필요한 접근만 복원합니다.

파일은 현재 그룹 읽기를 허용합니다. 디렉터리에서 그룹 구성원이 이름을 나열할 수는 있지만 통과할 수는 없게 하면 어떻게 될지 예상해 보세요. 740은 소유자 접근과 그룹 읽기를 유지하면서 그룹의 x를 제거합니다.

hdfs dfs -chmod 740 /user/labex/basic-permissions/team

같은 분석가로 같은 파일을 읽습니다. 다음 명령은 실패하는 것이 정상입니다.

sudo -u analyst /usr/local/bin/hdfs dfs -cat /user/labex/basic-permissions/team/products.txt

접근 거부 메시지에서 디렉터리의 통과 권한이 없다는 점을 확인할 수 있어야 합니다. 파일에 읽기 권한을 더 준다고 해결되지 않습니다. 먼저 경로를 통과할 수 있어야 합니다. 연습한 모드로 돌아가 디렉터리의 그룹 x 비트를 복원합니다.

hdfs dfs -chmod 750 /user/labex/basic-permissions/team

분석가가 다시 읽을 수 있는지 확인합니다.

sudo -u analyst /usr/local/bin/hdfs dfs -cat /user/labex/basic-permissions/team/products.txt

원래의 두 줄이 다시 나타나야 합니다. 마지막으로 공유 그룹 밖의 일반 계정을 테스트합니다. nobody는 이 실습에서 관련 없는 계정으로만 사용합니다. 다음 명령은 실패하는 것이 정상입니다.

sudo -u nobody /usr/local/bin/hdfs dfs -cat /user/labex/basic-permissions/team/products.txt

접근 거부는 그룹 공유가 데이터셋을 공개하지 않았음을 확인해 줍니다. 최종 목록을 저장합니다.

hdfs dfs -ls -d /user/labex/basic-permissions/team /user/labex/basic-permissions/team/products.txt > /home/labex/project/output/final-permissions.txt

결과를 읽습니다.

cat /home/labex/project/output/final-permissions.txt

디렉터리는 drwxr-x---, 파일은 -rw-r-----를 보여야 하며 소유자는 labex, 그룹은 bigdata여야 합니다. 초기 비공개 모드와 의미를 비교해 보세요. 권한 검사를 끄거나 777을 사용하지 않고 특정 그룹에 필요한 최소 접근만 허용했습니다.

요약

HDFS 소유자, 그룹, 기타 사용자 모드를 읽고 공유 그룹을 지정했으며 디렉터리와 파일에 서로 다른 모드를 사용했습니다. 실제 계정 테스트로 분석가는 읽을 수 있지만 쓸 수 없고, 관련 없는 사용자는 읽을 수 없음을 확인했습니다.

디렉터리 통과 권한을 제거하고 복원하면서 파일 자체는 읽을 수 있어도 경로 때문에 접근하지 못할 수 있는 이유를 배웠습니다. 다음 도전 과제에서는 비슷한 공유 문제의 위치를 찾고 독립적으로 수정합니다.