안녕하세요! 오늘 포스팅 할 내용은
"리눅스 rwx", "rwx", "chmod", "8진수란"입니다.
이 포스트를 다 읽으시면 리눅스 파일의 권한에 대해 전부 아시게 되어 원하는데로 파일의
권한을 조정하여, 원하지 않는 사람들이 파일을 사용하지 못하게 하실 수 있으실 겁니다!
--목차--
1. 리눅스의 권한이란?
2. 리눅스 일반 파일 권한 rwx
3. 디렉토리와 일반파이 권한 차이
이 포스트를 다 읽으시면 리눅스 파일의 권한에 대해 전부 아시게 되어 원하는데로 파일의
권한을 조정하여, 원하지 않는 사람들이 파일을 사용하지 못하게 하실 수 있으실 겁니다!
--목차--
1. 리눅스의 권한이란?
2. 리눅스 일반 파일 권한 rwx
3. 디렉토리와 일반파이 권한 차이
4. 디렉토리와 일반 파일 권한 차이 그림으로 설명
5. 디렉토리와 일반파일 권한 실제 예시
6. 디렉토리 권한 'w' 주의점
6. 디렉토리 권한 'w' 주의점
7. 중간정리
8. 8진수와 rwx의 4,2,1
9. 리눅스 "chmod"
10. 총 정리
-----------
여기서 못 찾은 정보는
리눅스 독학 페이지 : https://mamu2830.blogspot.com/p/blog-page_13.html
여기서 찾아보세요!
이렇게 "ll(ls -l)"로 보니 inode 맨 왼쪽에 "drwxr-xr-x"이런 식으로 보이는데 사실 맨 앞은
'파일 형식'이니 제외한 "rwxr-xr-x"가 바로 "파일의 권한"입니다. 주황색으로 표시한 곳
말이죠~
파일의 권한은 소유자(u{user}) , 그룹(g{group}), 그외 사람들(o{other}) 순으로 각 3칸씩
이렇게 총 9 칸이 있습니다.
그리고 각 소유자, 그룹, other의 3칸은 맨 앞은 "읽을 수 있는 권한 r(read)" , 그 다음은 "파일의 내용을 변경할 수 있는 w(write)" , 그리고 마지막으로 "파일을 실행할 수 있는 x(excute)" 순으로 "rwx" 이렇게 배치가 됩니다
그리고 권한이 없는 칸은 "-"으로 표시가 됩니다.
그림을 보시죠
이렇게 말입니다~ 저기서 만약 소유자 권한의 'x(실행권한)'이 없으면 소유자의 'x'칸에 "-"가 들어갈 것입니다.
'그룹' 같은 경우 저희가 그룹 포스트에서 다뤘웠는데, 리눅스는 기본적으로 하나 이상의 그룹에 속해야 있어야 하므로, 일반 유저를 만들면 그 유저의 이름의 그룹이 자동으로 생성되고 그 그룹에 유저가 속하게 된다는 것. 기억나시죠?
8. 8진수와 rwx의 4,2,1
9. 리눅스 "chmod"
10. 총 정리
-----------
여기서 못 찾은 정보는
리눅스 독학 페이지 : https://mamu2830.blogspot.com/p/blog-page_13.html
1. 리눅스의 권한이란?
리눅스의 권한이란 리눅스에 있는 '어떠한 파일'에 대해 어디까지 사용이 가능한가? 입니다
내가 파일을 실행하고 싶어도 '실행할 수 있는 권한(x)'이 없으면 실행을 못하고
파일을 읽고 싶어도 '읽을 수 있는 권한(r)'이 없으면 읽을 수 없는 것 처럼 말이죠
리눅스의 권한은 저희가 처음 파일의 inode에 대해 배울 때 어디에 나오는지 대략 봤듯이
"ls(list) -l(long)"으로 볼 수 있습니다.
이렇게 "ll(ls -l)"로 보니 inode 맨 왼쪽에 "drwxr-xr-x"이런 식으로 보이는데 사실 맨 앞은
'파일 형식'이니 제외한 "rwxr-xr-x"가 바로 "파일의 권한"입니다. 주황색으로 표시한 곳
말이죠~
파일의 권한은 소유자(u{user}) , 그룹(g{group}), 그외 사람들(o{other}) 순으로 각 3칸씩
이렇게 총 9 칸이 있습니다.
그리고 각 소유자, 그룹, other의 3칸은 맨 앞은 "읽을 수 있는 권한 r(read)" , 그 다음은 "파일의 내용을 변경할 수 있는 w(write)" , 그리고 마지막으로 "파일을 실행할 수 있는 x(excute)" 순으로 "rwx" 이렇게 배치가 됩니다
그리고 권한이 없는 칸은 "-"으로 표시가 됩니다.
그림을 보시죠
이렇게 말입니다~ 저기서 만약 소유자 권한의 'x(실행권한)'이 없으면 소유자의 'x'칸에 "-"가 들어갈 것입니다.
'그룹' 같은 경우 저희가 그룹 포스트에서 다뤘웠는데, 리눅스는 기본적으로 하나 이상의 그룹에 속해야 있어야 하므로, 일반 유저를 만들면 그 유저의 이름의 그룹이 자동으로 생성되고 그 그룹에 유저가 속하게 된다는 것. 기억나시죠?
2. 리눅스 일반 파일 권한 rwx
아까 위에서 살짝 언급한 이 "rwx"는
r(read) : 파일을 read, 파일의 내용을 읽을 수 있는 권한
w(write) : 파일을 witre, 쓰다(라는 개념이 좀 헷갈릴 텐데)그냥 파일을 바꿀 수 있는 권한
x(excute) : 파일을 excute, 실행할 수 있는 권한
입니다. 하지만 여기서 여기서 GUI환경의 윈도우 운영체제만 사용해오던 대부분의 분들은 이 "읽다" 라는 개념이 좀 제대로 이해가 안될 겁니다 파일을 "실행" 하는 것과 "읽는 것"을 헷갈린단 말이죠
먼저 이해를 돕기위해 "파일을 읽다"와 "파일을 실행하다" 개념을 제대로 설명하자면
"r(read)"의 "읽다" 라는 개념은 말 그대로 리눅스에서 평범한 글을 "파일의 내용을 볼 수 있냐" 라는 겁니다. 저희가 배운 cat 이나 vi와 같이 파일의 내용을 읽는 개념이죠
하지만 "x(excute)"의 실행이란 "파일이 가진 기능을 실행"할 수 있느냐의 개념입니다.
예를 들어, 프로그래밍 언어로 코드를 짰을 때 컴파일을 안하면 그냥 사실 엄연히 따지면 그냥 문법이 이상한 영어죠?
하지만 그 이상한 문법의 영어 코드를 컴파일하여 2진수로 바꾸는 순간, 그것은 어떠한 명령을 컴퓨터에게 지시하는 기능을 가진 '프로그램'이 되죠.
즉, 이러한 '실행'권한은 기능을 가진 파일(프로그램)의 기능을 사용할 수 있느냐 없느냐의 권한입니다.
즉, 이러한 '실행'권한은 기능을 가진 파일(프로그램)의 기능을 사용할 수 있느냐 없느냐의 권한입니다.
리눅스는 모든 것을 파일로 다루며, 저희가 터미널에서 아무렇지 않게 사용하는 명령어들도 전부다 사실은 '기능을 가진 파일(프로그램)'입니다.
그래서 실제로 이런 명령어들이 들어있는 '/usr/bin' 이나 '/usr/sbin' 디렉토리 내부를 보시면
명령어파일들이 전부 유저들이 사용하기 위해서, 'x'권한을 갖고 있는 걸 볼 수 있습니다.
이렇게 말이죠.
위 사진을 보시면, 우리가 자주 사용하던 'ls'와 'cd'가 사실은 기능을 가진 파일(프로그램)이라는 것을 알 수 있고, 그렇기에 'x'권한이 부여돼 있는 것을 알 수 있습니다.
'chmod'는 저희가 밑에서 배울 권한을 바꿀 명령어입니다. 권한을 바꾸는 명령어 'chmod'도 결국은 똑같이 기능을 가진 프로그램이며 'x'권한을 가졌다는 것이죠~
3. 디렉토리와 일반파일 권한 차이
사실 운영체제에서 '디렉토리(윈도우에선 폴더)'란 무엇일까요? 그렇죠 효율적으로 수 많은
파일들을 분류하고 관리하기 위한 일종의 박스같은 존재죠.
그리고 당연하게도 이러한 박스의 역할 '디렉토리'에도 일반 파일과 똑같이 'rwx'권한이 있습니다.
뭔가 일반파일 권한과 다르다는 느낌에서부터 벌써 외워야 하는 압박 에 짜증이 나실겁니다...
하지만! 제가 쉽게 설명할 것이며, 또 맥락은 비슷하므로, 그 부분만 캐치하시면 외우는데 어렵지 않을겁니다!
먼저 디렉토리에서의 권한 'rwx'는
r(read) : 읽겠다, 즉 디렉토리 내부(파일들)을 볼 수 있는 권한
w(write) : 쓰겠다, 일반파일과 같은 맥락으로 디렉토리 내부 파일들을 변경할 수 있는 권한
x(excute) : 실행하겠다, 디렉토리의 기능(디렉토리 내부로 이동)을 실행할 수 있는 권한
이런 기능을 합니다. 언뜻 보시면 일반파일과 많이 달라보이지만, 맥락을 보시면
일반 파일의 rwx
r(read) : 파일을 read, 파일의 내용을 읽을 수 있는 권한
w(write) : 파일을 witre, 쓰다(라는 개념이 좀 헷갈릴 텐데)그냥 파일을 바꿀 수 있는 권한
x(excute) : 파일을 excute, 실행할 수 있는 권한
w(write) : 파일을 witre, 쓰다(라는 개념이 좀 헷갈릴 텐데)그냥 파일을 바꿀 수 있는 권한
x(excute) : 파일을 excute, 실행할 수 있는 권한
와 거의 비슷함을 알 수 있습니다.
어...비슷한...가..? 싶으실 겁니다! 워낙 처음 배우는 사람들에겐 어렵게 느껴지는 개념이니까요 ㅠㅠ
그래서! 확실한 이해를 돕기 위해 '일반 파일'은 '책'이라 비유하고, 디렉토리는 책이 담겨 있는 '방'라고 치고 그림을 통해 설명해드리겠습니다!
이렇게 디렉토리란 '큰 방'안에 파일(책)들이 있는 것처럼 말이죠!
4. 디렉토리와 일반 파일 권한 차이 그림으로 설명
*일반 파일 rwx*
r(read) : 파일을 read, 파일의 내용을 읽을 수 있는 권한은
그리고
w(write) : 파일을 witre, 쓰다(라는 개념이 좀 헷갈릴 텐데)그냥 파일을 바꿀 수 있는 권한은
이렇게 (파일)책의 내용을 변경할 수 있는 권한이죠.
그리고
x(excute) : 파일을 excute, 실행할 수 있는 권한은
자 그럼 이번엔 디렉토리의 rwx란?
*디렉토리 rwx*
디렉토리
r(read) : 읽겠다, 즉 디렉토리 내부(파일들)을 볼 수(읽을 수) 있는 권한은
디렉토리
w(write) : 쓰겠다, 일반파일과 같은 맥락으로 디렉토리 내부 파일들을 변경할 수 있는 권한은
이렇게 디렉토리(방) 내부를 변경할 수 있는 권한으로, 디렉토리 내부를 변경한다는건 내부에 있는 파일들을 제거하거나, 파일을 추가할 수 있는 권한이죠.
디렉토리
x(excute) : 실행하겠다, 디렉토리의 기능(디렉토리 내부로 이동)을 실행할 수 있는 권한은
이렇게 디렉토리 'x(excute)'란 디렉토리(방)의 기능을 실행할 수 있어, 디렉토리(방) 내부로 들어갈 수 있는 권한입니다.
그런데 여러분들 저희가 방 안에 있는 물건을 사용하려면 당연히 방 안에 들어가야하잖습니까?
그래서 우리가 리눅스를 사용할 때 필수인 '명령어'들도 다 실행파일이고, 이러한 실행파일(명령어)를 저희가 사용할 땐 실제와 마찬가지로 파일이 있는 방(디렉토리)에 들어갈 수 있어야 합니다.
그렇기에 리눅스 명령어들이 들어있는 '/usr/bin'이나 '/usr/sbin' 디렉토리엔 '유저'든 '그룹'이든 'other'든 다 'x'권한이 있는 겁니다.
자 여기까지 그림을 통해 일반파일 'rwx'와 디렉토리 'rwx'를 이해하고 비교해봤습니다.
하지만 인생은 이해만 해선 안되죠.. 확실히 체화시키기 위해 실제 예시를 통해 설명해보겠습니다.
5. 디렉토리와 일반파일 권한 실제 예시
가장 먼저 저희가 저~~~엉 말로 쉽게 볼 수 있는
"디렉토리 파일"과 "그냥 파일"의 기본 권한의 차이를 보여드리겠습니다.
"기본 권한"이란 그냥 저희가 파일을 만들었을 때 "자동으로 부여돼 있는 권한"을 말해요
"mkdir directory ; touch file"이란 명령어로
디렉토리 파일과 그냥 파일을 만들어 주고 "ls -l"로 확인해봅니다.
어?? 첨 보는게 나왔다 그죠? 저 ";" 말입니다.
"기본 권한"이란 그냥 저희가 파일을 만들었을 때 "자동으로 부여돼 있는 권한"을 말해요
"mkdir directory ; touch file"이란 명령어로
디렉토리 파일과 그냥 파일을 만들어 주고 "ls -l"로 확인해봅니다.
어?? 첨 보는게 나왔다 그죠? 저 ";" 말입니다.
저 리눅스 쉘에서 ";" 이라는 기호 뜻은 "앞의 명령어를 잘 완료 했으면 ; 뒤의 명령어를 실행해라" 라는 뜻입니다. 그냥 프로그래밍할 때, 컴파일에게 '여기까지가 한줄이야'를 알려주는 세미콜론과 역활이 같다고 보시면 됩니다!
나중에 "파일의 컴파일"에 대해서 배울 때 자주 사용하게 될거에요~
어쨋든 이렇게 디렉토리와 파일을 만들어 봤습니다. 디렉토리와 일반파일의 기본 권한의 차이가 보이시나요?
이렇게 말입니다.
어쨋든 이렇게 디렉토리와 파일을 만들어 봤습니다. 디렉토리와 일반파일의 기본 권한의 차이가 보이시나요?
이렇게 말입니다.
위에 "디렉토리 파일"은 "rwxr-xr-x" 이렇게 "소유자"는 rwx(읽고,쓰고,실행)권한이 있고
"그룹엔" r-x(읽고,실행), "other"는 r-x(읽고,실행)인데
밑 "그냥 파일"은 "rw-r--r--"로 "소유자"는 rw(읽고,쓰고)권한이고 "그룹"과 "other"는
r--(읽는 권한)밖에 없죠?
왜 "일반 파일"엔 x(excute)(실행)권한이 없고 "디렉토리 파일"엔 있을까요?
그것은 바로 위에서 설명했듯이, '디렉토리 자체의 기능을 실행', 즉 디렉토리 내부로 이동하는데에 'x'권한이 필요하기 때문입니다.
그럼 왜 소유자만 "x"권한을 주면 되지 다른 "그룹, other"에도 주느냐?
그것은 대부분의 유저들이 대부분의 디렉토리를 내부로 이동하고 보는 정돈 괜찮기 때문에, 디렉토리를 만들면 소유자 뿐만이 아니라 그룹 심지어 other도 "x"권한이 자동으로 부여되는 겁니다.
물론 당연히 '일반 유저'가 절대로 이동도, 사용도 보지도 못하게 해야하는 디렉토리는
"x" 권한이 있음 안되겠죠? 일반 유저가 루트의 홈 디렉토리인 /root/ 디렉토리에 이동 할 수 있음 뭐.. 거의 해킹 된거니까요~
또한 위에서 말했듯 명령어들을 유저들이 사용할 수 있게 'x'권한을 주는 것이죠.
그에 반해 그냥 파일은 기능이 있나요? 저희가 touch로 만든 저 일반파일 "file"은
그저 텍스트(글들)을 적을 수 있는 빈 파일일 뿐이죠.
그에 반해 그냥 파일은 기능이 있나요? 저희가 touch로 만든 저 일반파일 "file"은
그저 텍스트(글들)을 적을 수 있는 빈 파일일 뿐이죠.
저희가 저기 안에 스크립트(코드)를 쓰지 않는 한 아~무런 기능이 없는 그저 글만 적힌 파일이란 뜻입니다.
그러니 '일반파일'은 실행 권한을 가질 필요도, 가져도 실행을 못한다는 말입니다.
좀 더 확연한 차이를 느끼기 위해 사진으로 보여드릴게요 그 과정은 아래처럼 진행할
겁니다~
1. 누구나 사용할 수 있는 디렉토리를 "root"계정으로 만든다음
2. 비교를 위해 2개의 유저(mamu, korea)로 그 디렉토리 안에 각자의 파일을 만들고
3. 각 유저들은 다른 유저가 만든 파일을 cat(파일을 읽는 명령어) 명령어로 내용을 읽어봄으로 써 "r"권한의 차이를 느껴보고
4. root로 만든 디렉토리에 "x"권한을 제거함으로써 그 이후에 다른 유저들이 디렉토리에 접근 할 수 있는지를 보고, "x"권한의 차이를 느껴본다.
아! 먼저 , 아무런 설정을 안한 저희들의 기본 리눅스는 유저들의 홈 디렉토리가 있는 "/home"과 최상위 디렉토리 '/'의 other에 "rx"가 있기 때문에, 모든 유저들이 이동하고 파일의 내역을 볼 수 있다는 것을 알아두세요~
root유저로 "mkdir everybody" 명령어를 통해 'everybody' 디렉토리를 만들고 --> 밑에서 배울 "chmod 777 everybody"로 디렉토리에 "rwxrwxrwx"권한을 부여하여, 누구나 사용할 수 있는 공유디렉토리로 변경
--> "ll -d"로 everybody 디렉토리의 권한이 모두 있음(rwxrwxrwx)을 확인합니다
"cd everybody"를 통해 everybody 디렉토리 내부로 이동 --> ll(ls -l)명령어로 확인해서 현재 아무런 파일이 없음을 확인
"su mamu"명령어로 'mamu'란 계정으로 로그인함(su - mamu가 아닌 su mamu로 했기에
원래 있던 위치 그대로 계정변경됨) --> "touch file.mamu"명령어로 'file.mamu'란 파일을 생성--> "ll" 파일이 만들어짐과 'inode' 확인
"su korea"명령어로 'korea'계정에 로그인(앞서 말했다시피 su korea이기 때문에 원래 있던
위치에서 계정변경됨) -->명령어 "ll" 로 파일들 확인후 --> "touch file.korea" 명령어로 'file.korea'란 파일을 생성 --> ll로 다시 확인
자신이 만든 "file.korea"의 권한을 "chmod 660 file.korea"를 통해 "rw-rw----"으로 바꿔' other에겐 아무런 권한이 없게함
---> ll로 "file.korea"의 other엔 아무런 권한이 없고 "file.mamu"의 other엔 r이 있음을 확인
---> echo와 리다이렉션 ">"를 이용해 자신의 파일 "file.korea"에 "wha!"란 내용을 넣음
"su mamu"로 'mamu'로 로그인한 뒤 --> ll로 파일들 권한 확인 --> 파일의 내용을
읽어서 출력하는 "cat"으로 "file.korea"를 읽어보지만 " file.korea의 other"에 "r(read)"
권한이 없어서 못 읽습니다.
이번엔 자신의 파일의 "file.mamu"에 echo와 >를 이용하여 "yee"라는 내용을 넣음
--> ll로 file.mamu는 korea파일과는 다르게 other에 "r"이 있음을 확인
이번엔 korea로 로그인 한 뒤에 --> ll로 파일들 권한 확인 뒤 --> cat으로 other에 "r"권한이 있는 file.korea를 읽어보자 "yee"라고 잘 읽을 수 있는 걸 확인했습니다
여기까지 "r"이 있어야 파일의 내용을 읽을 수 있다는 걸 확인해 본겁니당
이번엔 처음에 root로 만들었던 이 "everybody" 디렉토리에서 other의 "x"권한을
제거하여 다른 유저들이 "everybody"디렉토리 안으로 이동할 수 있는지 확인해보겠습니다.
ll -d로 먼저 everybody 디렉토리 권한을 확인하고 --> chmod 776으로 everybody의
other에서 "x"권한을 제거했습니다.
이제 다른 유저들이 이 everybody 디렉토리 내부로 이동할 수 있을까요?
크으으 네~ 안됩니다~ mamu로 로그인 한 뒤 "cd everybody"로 이동하려 했지만
거부되는 모습이져
그러면!? ls명령어로 디렉토리 내부를 보는 건 어떨까요?
ls로 everybody를 보니 내부에 어떤 이름의 파일이 있는지는 보여주는데 허가 거부라길래
ll로 확인을 해보니 이름만 알려줍니다
어라?? 왜 "x"권한이 없는데 안에 무슨 이름의 파일이 있는진 볼 수 있는거죠!!?
왜일까요 ㅎ 제 그림을 제대로 보신 분들이면 바로 이해가 되실 겁니다!
그건 바로 이 'everybody 디렉토리'의 other엔 "r"권한이 있기 때문입니다.
그래서 저흰 말 그대로 everybody 디렉토리 내부를 "읽어"본 겁니당
물론 "x(실행)"권한이 없기에
그러니 '일반파일'은 실행 권한을 가질 필요도, 가져도 실행을 못한다는 말입니다.
좀 더 확연한 차이를 느끼기 위해 사진으로 보여드릴게요 그 과정은 아래처럼 진행할
겁니다~
1. 누구나 사용할 수 있는 디렉토리를 "root"계정으로 만든다음
2. 비교를 위해 2개의 유저(mamu, korea)로 그 디렉토리 안에 각자의 파일을 만들고
3. 각 유저들은 다른 유저가 만든 파일을 cat(파일을 읽는 명령어) 명령어로 내용을 읽어봄으로 써 "r"권한의 차이를 느껴보고
4. root로 만든 디렉토리에 "x"권한을 제거함으로써 그 이후에 다른 유저들이 디렉토리에 접근 할 수 있는지를 보고, "x"권한의 차이를 느껴본다.
아! 먼저 , 아무런 설정을 안한 저희들의 기본 리눅스는 유저들의 홈 디렉토리가 있는 "/home"과 최상위 디렉토리 '/'의 other에 "rx"가 있기 때문에, 모든 유저들이 이동하고 파일의 내역을 볼 수 있다는 것을 알아두세요~
root유저로 "mkdir everybody" 명령어를 통해 'everybody' 디렉토리를 만들고 --> 밑에서 배울 "chmod 777 everybody"로 디렉토리에 "rwxrwxrwx"권한을 부여하여, 누구나 사용할 수 있는 공유디렉토리로 변경
--> "ll -d"로 everybody 디렉토리의 권한이 모두 있음(rwxrwxrwx)을 확인합니다
"cd everybody"를 통해 everybody 디렉토리 내부로 이동 --> ll(ls -l)명령어로 확인해서 현재 아무런 파일이 없음을 확인
"su mamu"명령어로 'mamu'란 계정으로 로그인함(su - mamu가 아닌 su mamu로 했기에
원래 있던 위치 그대로 계정변경됨) --> "touch file.mamu"명령어로 'file.mamu'란 파일을 생성--> "ll" 파일이 만들어짐과 'inode' 확인
"su korea"명령어로 'korea'계정에 로그인(앞서 말했다시피 su korea이기 때문에 원래 있던
위치에서 계정변경됨) -->명령어 "ll" 로 파일들 확인후 --> "touch file.korea" 명령어로 'file.korea'란 파일을 생성 --> ll로 다시 확인
자신이 만든 "file.korea"의 권한을 "chmod 660 file.korea"를 통해 "rw-rw----"으로 바꿔' other에겐 아무런 권한이 없게함
---> ll로 "file.korea"의 other엔 아무런 권한이 없고 "file.mamu"의 other엔 r이 있음을 확인
---> echo와 리다이렉션 ">"를 이용해 자신의 파일 "file.korea"에 "wha!"란 내용을 넣음
"su mamu"로 'mamu'로 로그인한 뒤 --> ll로 파일들 권한 확인 --> 파일의 내용을
읽어서 출력하는 "cat"으로 "file.korea"를 읽어보지만 " file.korea의 other"에 "r(read)"
권한이 없어서 못 읽습니다.
이번엔 자신의 파일의 "file.mamu"에 echo와 >를 이용하여 "yee"라는 내용을 넣음
--> ll로 file.mamu는 korea파일과는 다르게 other에 "r"이 있음을 확인
이번엔 korea로 로그인 한 뒤에 --> ll로 파일들 권한 확인 뒤 --> cat으로 other에 "r"권한이 있는 file.korea를 읽어보자 "yee"라고 잘 읽을 수 있는 걸 확인했습니다
여기까지 "r"이 있어야 파일의 내용을 읽을 수 있다는 걸 확인해 본겁니당
이번엔 처음에 root로 만들었던 이 "everybody" 디렉토리에서 other의 "x"권한을
제거하여 다른 유저들이 "everybody"디렉토리 안으로 이동할 수 있는지 확인해보겠습니다.
ll -d로 먼저 everybody 디렉토리 권한을 확인하고 --> chmod 776으로 everybody의
other에서 "x"권한을 제거했습니다.
이제 다른 유저들이 이 everybody 디렉토리 내부로 이동할 수 있을까요?
크으으 네~ 안됩니다~ mamu로 로그인 한 뒤 "cd everybody"로 이동하려 했지만
거부되는 모습이져
그러면!? ls명령어로 디렉토리 내부를 보는 건 어떨까요?
ls로 everybody를 보니 내부에 어떤 이름의 파일이 있는지는 보여주는데 허가 거부라길래
ll로 확인을 해보니 이름만 알려줍니다
어라?? 왜 "x"권한이 없는데 안에 무슨 이름의 파일이 있는진 볼 수 있는거죠!!?
왜일까요 ㅎ 제 그림을 제대로 보신 분들이면 바로 이해가 되실 겁니다!
그건 바로 이 'everybody 디렉토리'의 other엔 "r"권한이 있기 때문입니다.
그래서 저흰 말 그대로 everybody 디렉토리 내부를 "읽어"본 겁니당
물론 "x(실행)"권한이 없기에
이 그림처럼 디렉토리의 기능(내부로 들어감)을 실행할 수 없기에 어렴풋이 파일들이 있는것만 확인해 자세한 정보는 모르는거죠
자자 그럼 이번엔 "r"권한 마저 빼볼가요?
다시 root로 로그인 한 뒤 "chmod 772"로 everybody의 "other"에 w실행 말고 전부
제거해줍니다
다시 일반 유저 mamu로 로그인 한 뒤 ls와 ll로 everybody 디렉토리를 읽어보려 하지만
거부되는 모습이죠~
자자 그럼 이번엔 "r"권한 마저 빼볼가요?
다시 root로 로그인 한 뒤 "chmod 772"로 everybody의 "other"에 w실행 말고 전부
제거해줍니다
다시 일반 유저 mamu로 로그인 한 뒤 ls와 ll로 everybody 디렉토리를 읽어보려 하지만
거부되는 모습이죠~
그럼 'r(read)'은 없고 'x(excute)'권한만 있음 어떻게 될까요?
이건 마치, 불이 꺼져 있는 깜깜한 디렉토리(방)에 들어간 것과 같습니다.
디렉토리 내부를 읽을 수가 없으니 디렉토리안에 어떤 파일이 있는지는 못 보지만, 실행 권한은 있으므로
위 파란색으로 나타낸 것 처럼 '/'에서 'everybody' 내부로 이동한 모습입니다!
여기까지 일반파일과 디렉토리의 "r"과 "x" 권한의 차이를 알아봤네요
이렇듯 r(read)와 x(excute)는 아예 다른 개념이란 뜻이죠~
자 그럼 w(write)의 개념도 제대로 설명을 해야죠?
일반파일의 경우 쉽게, 'w'를 "파일을 변경할 수 있는 권한"이라고 아시면 편합니다.
'w'는 파일을 변경할 수 있는 권한이기 때문에 다중 사용자를 지원하는 리눅스에서, 다른 유저가 다른 사람이 만든 파일을 멋대로 바꾸면 상당히 문제겠죠?
그래서 '일반 파일'을 만들면 소유자만 w(write)권한을 갖도록 하는 것입니다.
그리고 디렉토리의 'w'는 "디렉토리를 변경할 수 있는 권한"이라고 아시면 됩니다.
자 그럼 w(write)의 개념도 제대로 설명을 해야죠?
일반파일의 경우 쉽게, 'w'를 "파일을 변경할 수 있는 권한"이라고 아시면 편합니다.
'w'는 파일을 변경할 수 있는 권한이기 때문에 다중 사용자를 지원하는 리눅스에서, 다른 유저가 다른 사람이 만든 파일을 멋대로 바꾸면 상당히 문제겠죠?
그래서 '일반 파일'을 만들면 소유자만 w(write)권한을 갖도록 하는 것입니다.
그리고 디렉토리의 'w'는 "디렉토리를 변경할 수 있는 권한"이라고 아시면 됩니다.
디렉토리 내부 파일들을 추가하든 지우든, 말 그대로 디렉토리(방 내부)를 변경할 수 있는 권한이죠.
마치 '도서관 사서'가 '방(디렉토리)'에 있는 '책(파일)'들을 맘대로 이동하고, 이름 바꾸고, 버리고, 새로 추가하듯 방 내부를 관리할 수 있는 것과 같습니다.
하지만 그 책(파일)의 내용을 변경할 권한이나 마법서의 기능을 실행할 권한은 없죠.
여기까지만 하면 이제 rwx권한은 다 정리한 것 같으....면 얼마나 좋을까 싶지만 리눅스에서 여러 유저로 파일을 만들고 지웠던 분들이면 의아한 현상을 목격한 적이 있으실 겁니다.
바로 'w' 권한이 없는 다른 유저가 파일의 내용을 수정하는 것을 말이죠!
이 경우엔 2가지 경우가 있습니다.
첫 째, 'root'유저는 슈퍼유저이자 관리자기 때문에 모든 게 가능하여 때문에 다른 유저파일의 other에 권한이 없어도 모든 게 가능하다
2번 째인 경우, 파일이 들어있는 디렉토리에 'w'권한이 있는경우, 디렉토리 내부 파일을 관리할 수 있기에, 기존 파일을 덮어버릴 수 있다.
2번 째가 조금 어렵습니다만.. 이 사례가 리눅스 마스터 1급 시험에 나왔었습니다..(충격)
무슨 소리냐, 아까 만든 rwxrwxrwx(즉 모든 권한이 부여된) "everybody"안에
유저인 'mamu'가 other에 아무런 권한을 안 준 'file.mamu'을 만들었다 치면, 원랜 다른 유저 'korea'가 이 'file.mamu'파일을 수정할 수 없는게 정상이죠?
그런데 파일에 속한 디렉토리 other에 "w"권한이 있기 때문에 덮어버리기가 가능합니다.
사진으로 보여드리자면
이렇게 'everybody' 디렉토리의 other에 "w,"권한이 있죠?
그러나 그 내부의 'file.mamu'의 other엔 아무런 권한이 없습니다. 그래서 원랜 이 'mamu'유저가 아닌 다른 유저가 파일의 내용을 수정할 수도 없는게 정상인데
이렇게 파일을 열어서 편집하는 명령어 "vi"를 쓰면, 상위 디렉토리 'everybody'의
other에 "w"권한이 있기 때문에
이렇게 밑에 허용은 안 된다고 적혀있지만...
이렇게 내용을 적을 때도 밑에 "읽기 전용 파일을 고치고 있다"며 경고를 하지만..
이렇게 w(내용을 쓰고 저장하겠다)q(이 vi에서 나가겠다) 하면
이렇게 안된다고 합니다만...
강제로 적용하겠다는 의지 '!'를 붙여주면 파일의 내용이 저장되고 나가집니다
그리고 확인해보면!!!?
으아닛!?
말도 안돼!
놀랍게도.... "korea"라는 유저가 "mamu"유저 소유의 파일을 강제로 수정했기에...
"file.mamu"파일의 소유자와 그룹이 "mamu"에서 "korea"로 변하는 ★매직★을 보여줍니다.
어떻게 된걸까요?
6. 디렉토리 권한 'w'주의점
여기까지만 하면 이제 rwx권한은 다 정리한 것 같으....면 얼마나 좋을까 싶지만 리눅스에서 여러 유저로 파일을 만들고 지웠던 분들이면 의아한 현상을 목격한 적이 있으실 겁니다.
바로 'w' 권한이 없는 다른 유저가 파일의 내용을 수정하는 것을 말이죠!
이 경우엔 2가지 경우가 있습니다.
첫 째, 'root'유저는 슈퍼유저이자 관리자기 때문에 모든 게 가능하여 때문에 다른 유저파일의 other에 권한이 없어도 모든 게 가능하다
2번 째인 경우, 파일이 들어있는 디렉토리에 'w'권한이 있는경우, 디렉토리 내부 파일을 관리할 수 있기에, 기존 파일을 덮어버릴 수 있다.
2번 째가 조금 어렵습니다만.. 이 사례가 리눅스 마스터 1급 시험에 나왔었습니다..(충격)
무슨 소리냐, 아까 만든 rwxrwxrwx(즉 모든 권한이 부여된) "everybody"안에
유저인 'mamu'가 other에 아무런 권한을 안 준 'file.mamu'을 만들었다 치면, 원랜 다른 유저 'korea'가 이 'file.mamu'파일을 수정할 수 없는게 정상이죠?
그런데 파일에 속한 디렉토리 other에 "w"권한이 있기 때문에 덮어버리기가 가능합니다.
사진으로 보여드리자면
이렇게 'everybody' 디렉토리의 other에 "w,"권한이 있죠?
그러나 그 내부의 'file.mamu'의 other엔 아무런 권한이 없습니다. 그래서 원랜 이 'mamu'유저가 아닌 다른 유저가 파일의 내용을 수정할 수도 없는게 정상인데
이렇게 파일을 열어서 편집하는 명령어 "vi"를 쓰면, 상위 디렉토리 'everybody'의
other에 "w"권한이 있기 때문에
이렇게 밑에 허용은 안 된다고 적혀있지만...
이렇게 내용을 적을 때도 밑에 "읽기 전용 파일을 고치고 있다"며 경고를 하지만..
이렇게 w(내용을 쓰고 저장하겠다)q(이 vi에서 나가겠다) 하면
이렇게 안된다고 합니다만...
강제로 적용하겠다는 의지 '!'를 붙여주면 파일의 내용이 저장되고 나가집니다
그리고 확인해보면!!!?
으아닛!?
말도 안돼!
놀랍게도.... "korea"라는 유저가 "mamu"유저 소유의 파일을 강제로 수정했기에...
"file.mamu"파일의 소유자와 그룹이 "mamu"에서 "korea"로 변하는 ★매직★을 보여줍니다.
어떻게 된걸까요?
그것은 사실, 디렉토리에 파일을 생성, 제거가 가능한 권한 'w'가 있기에, 그냥 vi에서 똑같은 이름 'file.mamu'라는 것을 새로 만든 다음, 기존의 "file.mamu"에 덮어씌운겁니다 ㅋㅋ
그냥 말 그대로 기존의 'file.mamu'를 제거하고, 'korea'가 만든 새로운 'file.mamu'란 파일을 만든 셈이죠~
그래서 소유자도 권한도 'korea'란 유저로 돼 있던 겁니다!
이런식으로 파일에 'w'가 없어도 디렉토리에 'w'권한이 있으면, 다른 사람의 파일 쉽게 수정 및 제거가 가능하다는 것~
이런식으로 파일에 'w'가 없어도 디렉토리에 'w'권한이 있으면, 다른 사람의 파일 쉽게 수정 및 제거가 가능하다는 것~
그렇기에 보통 디렉토리를 새로 만들면 "rwxr-xr-x"이런식으로 소유자가 아닌 경우 'w'권한을 빼는 겁니다 ㅎㅎ
7. 중간정리
와... 어렵다 그죠? 뭐가 이리 까다로운지... 그래도 이런 권한에 대해 제대로 알지 못하면
권한 부여를 잘못해서 시스템이 해킹당하는 불의가 발생할 수 있습니다..(물론 실전에서)
긴 내용을 읽느라 몽롱해졌으니 다시 한번 정리해드리겠습니다.
일반 파일의 rwx
r(read) : 파일을 read, 파일의 내용을 읽을 수 있는 권한
w(write) : 파일을 witre, 쓰다(라는 개념이 좀 헷갈릴 텐데)그냥 파일을 바꿀 수 있는 권한
x(excute) : 파일을 excute, 실행할 수 있는 권한
w(write) : 파일을 witre, 쓰다(라는 개념이 좀 헷갈릴 텐데)그냥 파일을 바꿀 수 있는 권한
x(excute) : 파일을 excute, 실행할 수 있는 권한
디렉토리에서의 권한 'rwx'
r(read) : 읽겠다, 즉 디렉토리 내부(파일들)을 볼 수 있는 권한
w(write) : 쓰겠다, 일반파일과 같은 맥락으로 디렉토리 내부 파일들을 변경할 수 있는 권한
x(excute) : 실행하겠다, 디렉토리의 기능(디렉토리 내부로 이동)을 실행할 수 있는 권한
디렉토리에 'w'권한이 있으면, 파일에 'w'권한이 없어도 그냥 덮어버릴 수 있기에 조심해야한다.
8. 8진수와 rwx의 4,2,1
위에서 제가 "chmod"라는 명령어도 파일의 권한을 변경할 때 r,w,x와 같은
문자를 안쓰고 777이니 774니 772니 숫자를 이용해 변경하는 걸 보셨죠?
이 숫자들이 어디서 나왔냐면
요 권한이 8진수로 바꾸자면
각 u,g,o에는 8진수의 공간이 있다고 보시면 됩니다.
그리고 각 자리는 2배씩 되죠. 그래서 맨 첨 "x"는 1이고 그 다음 "w"는 2배인 2이고
그 다음 "r"은 2의 2배인 4가 되는 겁니다 그래서 총 합은 7이죠
그럼 저흰 r(4),w(2),x(1)의 적절한 사용을 통해 0~7까지 수를 만들 수 있습니다
666이면 rw-rw-rw-인 것이고 642이면 rw-r---w-인거죠~ 111이면 --x--x--x이겠고요
네? 000이요? 아무것도 없는 "---------"일 때 이겠죠 ㅎㅎ
이 숫자를 꼭 외워야하느냐? 그건 아니에요 밑에 명령어 chmod에 대해서 배울 때
u,g,o의 기호를 통해서 숫자 없이 권한을 변경할 수 있습니다.ex)chmod u+rx(유저에게 rx권한을 주겠다)
권한을 기호로 주던 번호로 주던 각자의 마음입니당 단지 시험볼 땐 둘다 알아야겠지만
번호를 외우기만 한다면 정말 빠르고 간편하게 권한을 변경할 수 있습니다~
/*************************8진수 모르는 분들만**********************************************/
아 여기서 8진수가 모르시는 분들을 위해 잠깐 설명해드리자면(아시는 분은 넘어가세요)
저희가 사용하는 대다수의 수는 10진수로서 이것의 의미는 숫자가 들어갈 수 있는
한 자리에[]이라치면 , 0~9까지 총 10개의 수가 들어갈 수 있다는 의미입니다.
[0],[1],[2]....[9] 이렇게 올라가다가 그 한자리에 들어갈 수 있는 10개의 경우의 수를 초과했기 때문에 다음 자리에 카운트가 됨으로써 [1][0]이 되는 겁니다.
그럼 2진수는 뭘까요 한 자리에 2개의 숫자가 들어갈 수 있다는 의미겠죠?
자 그럼 우리가 원하는 8진수는 뭘까요? 같은 맥락으로 한 자리에 8개의 숫자가 들어갈
수 있다는 겁니다. 그럼 0부터 시작해서 [0],[1],.....[7] 이렇게 올라가다가 8개의 경우의 수를
다 썻으니 이제 다음 칸에 1이 올라가며 [1][0] 이렇게 되는거죠
이제 8진수가 뭔지 아시겠죠?
/********************************************************************************************/
9. 리눅스 chmod
chmod(change mode) : change(바꾸겠다) mode(모드)인데
사실 "mode" 라는 거 저희들은 외래어마냥 모드모드 자연스럽게 쓰는데 한글로 바꾸라고 하면 뭔가.. 잘 모르겠잖아요? mode라는 영어의 뜻을 잘 모르면 이 "chmod" 명령어가 잘 안 외워지니까
"mode"의 뜻을 영영사전의 뜻, "one of several ways that a machine or device operates" : "장치를 사용하는 여러 방법 중 하나"로 알고 갑시다
그럼 change(바꾸겠다) mode(파일을 사용하는 방법 중 하나) 이렇게 외우면
잘 외워지지 않을까 싶네요...(나만 그런가..)
명령어 형식은 기호를 이용하는 방법과 숫자를 이용하는 방법, 총 2가지가 있습니다.
*기호 방식*
chmod [옵션] {[권한을 바꿀 사용자기호들][연산자][권한]},{.....}... [파일]
입니다
"chmod"의 쓸만한 옵션은 "-R(recurisve)"가 있네요 하도 많이 보는 옵션이라 대충 감이 오시죠? 그 하위 파일까지 전부다 바꾸겠단 의미입니다
"사용자기호"는 위에서 보여드렸던 "u(소유자),g(그룹),o(other)"를 말합니다.
"연산자"는 저희가 아는 연사자 "+" , "-" , "=" 이 있습니다. (* , /이런건 없어요)
이 연산자의 뜻은 그냥 그대로~ 받아들이면 됩니다 "+는" 뒤에 쓴 권한을 주겠다,
"-"는 뒤에 쓴 권한을 빼겠다, "="는 뒤에 쓴 권한처럼 만들겠다 이죠
ex) chmod u(user에게)+(주겠다)x(excute권한을) [파일](이 파일에게)
이렇게 말이죠
권한을 바꿀 때 "chmod ugo+wx" 이렇게나 "chmod uo=rw" 이렇게 사용자 기호를 뭉쳐서
한번에 바꿀 수도 있습니다. 하지만 이렇게 하면 모든 사용자기호에 똑같은 수식을 주니까
세밀하게 권한을 조정하기 힘들죠
그래서 따로따로 사용자기호에게 권한을 줄 수도 있는데
위에 보기 힘들지만 자세히 보시면 {[권한을 바꿀 사용자기호][연산자][권한]}다음에
,{...}... 파일 이렇게 보이실텐데 이건 chmod u+x,g=rwx,o-wx [파일] 이런식으로 각 사용자기호에게 따로따로 줄 수 있다는 뜻입니다.
*숫자 방식*
chmod [옵션] [권한숫자들] [파일] 입니다.
와... 위에보다 훨씬 눈으로 보기 편하다 그죠? 실제로도 편합니다.
옵션은 기호랑 똑같고요
ex) chmod 773(u에 rwx , g에 rwx , o에 wx를 주겠다) [파일](이 파일에)
chmod 552(u에 rx, g에 rx, o에 w를 주겠따) [파일](이 파일에)
와... 진짜 ... 권한 숫자만 외우면 기호보다 몇 배는 훨씬 빠르게 바꿀 수 있겠죠?
그래서 제가 숫자를 외우라고 했던 겁니다. 처음엔 기호가 더 쉽게 외워질 수도 있지만
자꾸 하다보면 숫자 금방 외워지실 겁니다 생각보다 외우기 쉬워요
"ugo"순으로, r(4),w(2),x(1) 기억하세여
10. 총 정리
1. 일반 파일의 rwx
r(read) : 파일을 read, 파일의 내용을 읽을 수 있는 권한
w(write) : 파일을 witre, 쓰다(라는 개념이 좀 헷갈릴 텐데)그냥 파일을 바꿀 수 있는 권한
x(excute) : 파일을 excute, 실행할 수 있는 권한
x(excute) : 파일을 excute, 실행할 수 있는 권한
2. 디렉토리에서의 권한 'rwx'
r(read) : 읽겠다, 즉 디렉토리 내부(파일들)을 볼 수 있는 권한
w(write) : 쓰겠다, 일반파일과 같은 맥락으로 디렉토리 내부 파일들을 변경할 수 있는 권한
x(excute) : 실행하겠다, 디렉토리의 기능(디렉토리 내부로 이동)을 실행할 수 있는 권한
3. 디렉토리에 'w'권한이 있으면, 파일에 'w'권한이 없어도 그냥 덮어버릴 수 있기에 조심해야한다.
기호는 chmod [옵션] [사용자기호들][연산자][권한] [파일] 또는 {[사용자기호][연산자][파일]},{....}... [파일]이 있다
5. chmod 숫자방식은 chmod [옵션] [권한 숫자] [파일] 이다
호우... 진짜 긴 글이였지만 화장실 가는 거 빼고 풀 집중해서 7시간만에 끝냈네요!
ㅎㅎ 오타나 틀린내용 지적해주시면 바로 수정하겠습니다!
도움이 되셨다면 좋겠네요 ㅠㅠ
구글 블로그 팔로우 클릭, 따듯한 댓글은 큰 도움이 되어 제가 더 퀄리티 좋은 포스트를 만들게 도와줍니다!!
-리눅스 공부할 순서 페이지-
https://mamu2830.blogspot.com/p/blog-page_13.html
설명 잘 되어 있네요 ^^ 잘 보고 갑니다
답글삭제도움이 됐다니 다행입니다~~
삭제쩐다..쩐다..쩐다..쩐다..
답글삭제ㅎㅎ 감사합니다~~
삭제글을 읽는데 말로 쉽게 설명해 주는 것 처럼 느껴져 도움 많이 받고 있습니다. 감사합니다 :)
답글삭제말로 설명해주는 것처럼 느껴졌다니 ㅎㅎ 제 글쓰기 스타일이 도움이 돼 정말 다행입니다!
삭제