개발놀이터

리눅스 파일, 폴더 권한 부여 본문

배포/리눅스

리눅스 파일, 폴더 권한 부여

마늘냄새폴폴 2024. 6. 3. 20:44

리눅스에는 파일 혹은 폴더에 권한을 부여하고 관리할 수 있습니다. 정확히는 유닉스라고 해야겠네요. 

 

이번 포스팅에선 파일 혹은 폴더에 권한을 부여하고 관리하는 방법에 대해서 공부한 내용을 정리해보도록 하겠습니다. 

 

파일, 폴더 권한 부여

파일, 폴더에 권한을 부여하는 방법에는 두가지 방법이 있습니다. 777과 같이 숫자로 부여하는 방법과 u+x와같이 문자로 부여하는 방법입니다. 

 

먼저 숫자로 부여하는 방법에 대해서 알아보도록 하겠습니다. 

 

 

기본적으로 파일이나 폴더를 만들면 상태는 rwxr-xr-x입니다. 폴더를 소유한 ec2-user와 폴더를 소유한 그룹인 ec2-user는 이 파일에 대한 권한을 나눠받습니다. 

 

소유자인 ec2-user는 읽고, 쓰고, 실행할 권한이 있고, 그룹인 ec2-user는 읽고, 실행할 권한을 부여받습니다. 그리고 그 외의 사용자는 읽고, 실행할 권한을 가지고 있죠. 

 

실행할 권한은 chmod로 변경할 수 있습니다. 

 

sudo chmod 777 test

 

 

폴더에 슈퍼권한을 부여하는 방법입니다. 

 

이처럼 숫자를 이용하면 간편하게 사용자, 그룹, 그 외 사용자를 관리할 수 있습니다. 

 

숫자의 의미는 다음과 같습니다. 

 

  • chmod 7 = rwx
  • chmod 6 = rw-
  • chmod 5 = r-x
  • chmod 4 = r--
  • chmod 3 = -wx
  • chmod 2 = -w-
  • chmod 1 = --x
  • chmod 0 = ---

 

이제 상황을 가정해보고 실습해보도록하죠!

 

상황1)

test라는 폴더를 보유한 사용자에겐 읽고, 쓰고, 실행할 권한을 주고 그룹에겐 읽고, 쓸 권한, 그 외의 사용자에겐 아무 권한도 부여하지 않을 것입니다. 

 

그럼 chmod는?

 

맞습니다. 760입니다. 

 

상황2)

사용자에겐 읽고, 쓰고, 실행할 권한을 그룹에겐 읽을 권한만, 그외의 사용자에게도 읽을 권한만을 부여하고싶습니다. 

 

그럼 chmod는 뭘까요? 

 

맞습니다. 744로 설정하면됩니다. 

 

 

이렇게 숫자로 설정하면 사용자, 그룹, 그 외 사용자를 편하게 바꿀 수 있습니다. 제 개인적인 생각으로는 4 아래로는 잘 사용하지 않을 것 같습니다. 그래서 4, 5, 6, 7 만 집중적으로 공부했습니다. 

 

 

이제 문자로 부여하는 방법입니다. 이건 더 직관적이라 더 이해하기 간단했습니다. 

 

먼저 사용자에게 읽는 권한을 빼보겠습니다. 

 

chmod u-r test

 

이런식으로 직관적으로 권한을 설정하는 것입니다. 

 

맨 앞에는 u (사용자), g (그룹), o (그 외) 이고 가운데는 + (추가), - (빼기) 마지막은 r (읽고), w (쓰고), x (실행) 입니다. 

 

즉, 그룹에게 w권한을 빼고싶다?

 

chmod g-w test

 

그 외 사용자에게서 모든 권한을 뺏고싶다?

 

chmod o-rwx test

 

어때요 간단하죠? 

 

 

이론은 끝났습니다. 이제 본격적으로 파일 혹은 폴더를 권한변경을 해가면서 어떤것이 막히는지 어떤것이 되는지 알아보겠습니다. 

 

파일, 폴더를 따로보도록 하겠습니다. 

 

파일

우선 파일을 하나 만들어보겠습니다. 

 

touch deploy.sh

vi deploy.sh

그 파일 안에 echo "hello" 를 입력합니다.

 

 

자 이제 본격적으로 권한을 설정해보죠. 

 

먼저 r 권한을 뺏어보겠습니다. 

 

 

현재 권한 상태는 이러하구요. 한번 vi 편집기를 이용해서 들어가보겠습니다. 

 

 

읽기 권한이 거부당했습니다. 

 

이제 쓰기 권한을 빼앗아보죠. chmod 5로 설정해줄겁니다. 

 

sudo chmod 500 deploy.sh

 

vi 편집기로 들어가면 들어가는 것 까지는 성공이지만 쓰려고하면?

 

 

readonly 파일이라고 뜨네요. 

 

이제 실행 권한을 없애보겠습니다. 6으로 설정하면 되겠죠?

 

sudo chmod 600 deploy.sh

 

vi 편집기로 들어가는 것도 가능하고 쓰는 것 까지 가능합니다. 

 

 

하지만 실행하려고 하면?

 

 

실행 권한이 막혀버린 것을 볼 수 있습니다. 

 

파일은 나름 권한이 직관적이라 이해하기 쉬웠던 것 같습니다. 이제 폴더로 넘어가보죠. 

 

 

폴더

폴더의 읽기 권한을 먼저 없애보겠습니다. 

 

 

이렇게 하고 cd로 안으로 들어간 뒤 ls 명령어를 치면 막힙니다. 

 

 

이제 쓰기 권한을 없애보죠. 

 

 

 

이렇게 폴더 안에 무언가를 쓰려는 모든 행동이 막힙니다. 

 

이제 실행 권한입니다. 

 

 

 

이렇게 폴더에 접근하려는 것이 불가능하고 설령 접근한다고 하더라도 ls -l 과 같은 실행 명령이 불가능합니다. 

 

자 여기까지 권한을 부여하고 실습까지 해봤습니다. 그런데 저는 여기서 의문이 들더군요. 

 

sudo

생각해보면 우리는 개발자에게 sudo 권한을 부여합니다. sudo는 루트권한을 부여하는 것인데 굳이 이렇게 권한을 부여하고 난리법석하는 의미가 뭘까요? 

 

권한을 부여하는 것은 다음과 같은 이점을 얻을 수 있습니다. 

  • 순간적으로 실수해서 파일을 지워버리려고 해도 권한 관리를 한다면 아차! 하고 실수를 미연에 방지할 수 있습니다. 
  • 만약 공격자가 서버에 침투하더라도 인가되지 않은 사용자 혹은 그룹의 권한을 획득하지 않는이상 파일 혹은 폴더를 보호할 수 있습니다. 
  • 권한을 관리하면 시스템의 무결성을 지킬 수 있습니다. 신뢰성이 올라간다는 이야기죠. 

 

원래대로라면 sudo라는 명령어는 남발해선 안됩니다. 이상적인 애플리케이션은 sudo를 쓰지 않아도 사용이 가능 해야하고 sudo를 쓰는 순간은 매우매우 중요한 순간이라는 것을 명시해야합니다. 

 

시스템의 설정을 바꿔야한다거나, 시스템을 재시작한다거나 배포하는 과정에서 손 부들부들 떨면서 sudo를 입력하는 것이지 sudo를 너무 남용하면 권한에 대한 인식이 흐려지고 실수가 나올 수 있다는 것입니다. 

 

저도 이제 권한을 적극적으로 사용해야겠네요. 

 

 

마치며

이번 포스팅에서 리눅스 파일, 폴더에 권한을 부여하고 관리하는 방법에 대해서 알아봤습니다. 개발자는 어쩔 수 없이 sudo를 사용하게 되기 때문에 sudo에 막중한 무게감을 가진 회사가 얼마나 될까 잘 모르겠습니다. 

 

긴 글 읽어주셔서 감사합니다. 오늘도 즐거운 하루 되세요~