/* 테스트 1 버전 - 성능 최적화 적용 */ 마무: 리눅스1

블로그 소개


*여러분들의 따듯한 댓글은 5%, 팔로우는 10% 블로그 포스팅 속도와 퀄리티를 높여줍니다.*

프로필

팔로우 해주시면 포스트할 때 큰 힘이 됩니다!!! 사실 저도 이 팔로우가 무슨 기능이 있는지는 모르겠습니다만, 팔로우 수가 늘면 '날 응원해주는 사람들이 있구나' 생각이 들어서 큰 힘이 됩니다.

팔로어

다른 페이지로 이동


리눅스 독학 페이지 운영체제 독학 페이지 네트워크 독학 페이지 시스템 해킹 하드웨어 독학 페이지 프로그래밍 독학 페이지 보안 페이지

오스 페이지 다이어트 정보 페이지 게임 정보 페이지 인생 꿀팁


****사진을 클릭하시면 페이지로 이동할 수 있습니다!****

<===***===↓↓↓You can use translate using chrome ↓↓↓===***===>

레이블이 리눅스1인 게시물을 표시합니다. 모든 게시물 표시
레이블이 리눅스1인 게시물을 표시합니다. 모든 게시물 표시

2019년 9월 22일 일요일

리눅스 rwx, chmod, 8진수 매우 자세히!

안녕하세요! 오늘 포스팅 할 내용은 "리눅스 rwx", "rwx", "chmod", "8진수란"입니다.

이 포스트를 다 읽으시면 리눅스 파일의 권한에 대해 전부 아시게 되어 원하는데로 파일의
권한을 조정하여, 원하지 않는 사람들이 파일을 사용하지 못하게 하실 수 있으실 겁니다!

--목차--

1. 리눅스의 권한이란?

2. 리눅스 일반 파일 권한 rwx

3. 디렉토리와 일반파이 권한 차이

4. 디렉토리와 일반 파일 권한 차이 그림으로 설명

5. 디렉토리와 일반파일 권한 실제 예시

6. 디렉토리 권한 'w' 주의점

7. 중간정리 

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, 실행할 수 있는 권한

와 거의 비슷함을 알 수 있습니다.

어...비슷한...가..? 싶으실 겁니다! 워낙 처음 배우는 사람들에겐 어렵게 느껴지는 개념이니까요 ㅠㅠ

그래서! 확실한 이해를 돕기 위해 '일반 파일'은 '책'이라 비유하고, 디렉토리는 책이 담겨 있는 '방'라고 치고 그림을 통해 설명해드리겠습니다!




이렇게 디렉토리란 '큰 방'안에 파일(책)들이 있는 것처럼 말이죠!



4. 디렉토리와 일반 파일 권한 차이 그림으로 설명



*일반 파일 rwx*

r(read) : 파일을 read, 파일의 내용을 읽을 수 있는 권한은 


이렇게 파일(책)의 내용을 읽을 수 있는 권한이죠.
그리고 
w(write) : 파일을 witre, 쓰다(라는 개념이 좀 헷갈릴 텐데)그냥 파일을 바꿀 수 있는 권한은


이렇게 (파일)책의 내용을 변경할 수 있는 권한이죠.

그리고
x(excute) : 파일을 excute, 실행할 수 있는 권한은



이렇게 기능이 있는 파일(마법책)을 실행할 수 있는 권한을 말합니다.

자 그럼 이번엔 디렉토리의 rwx란?

*디렉토리 rwx*

디렉토리
r(read) : 읽겠다, 즉 디렉토리 내부(파일들)을 볼 수(읽을 수) 있는 권한은



이렇게 말 그대로 디렉토리(방)의 내부를 볼 수(읽을 수) 있는 권한이고.

디렉토리
w(write) : 쓰겠다, 일반파일과 같은 맥락으로 디렉토리 내부 파일들을 변경할 수 있는 권한은


(오타네요, '파일2'새로 추가해줘!가 아니라 '파일4' 새로 추가해줘!가 원래 쓰고자 했던 내용입니다)

이렇게 디렉토리(방) 내부를 변경할 수 있는 권한으로, 디렉토리 내부를 변경한다는건 내부에 있는 파일들을 제거하거나, 파일을 추가할 수 있는 권한이죠.

디렉토리
x(excute) : 실행하겠다, 디렉토리의 기능(디렉토리 내부로 이동)을 실행할 수 있는 권한은



이렇게 디렉토리 'x(excute)'란 디렉토리(방)의 기능을 실행할 수 있어, 디렉토리(방) 내부로 들어갈 수 있는 권한입니다.

그런데 여러분들 저희가 방 안에 있는 물건을 사용하려면 당연히 방 안에 들어가야하잖습니까?

그래서 우리가 리눅스를 사용할 때 필수인 '명령어'들도 다 실행파일이고, 이러한 실행파일(명령어)를 저희가 사용할 땐 실제와 마찬가지로 파일이 있는 방(디렉토리)에 들어갈 수 있어야 합니다.

그렇기에 리눅스 명령어들이 들어있는 '/usr/bin'이나 '/usr/sbin' 디렉토리엔 '유저'든 '그룹'이든 'other'든 다 'x'권한이 있는 겁니다.

자 여기까지 그림을 통해 일반파일 'rwx'와 디렉토리 'rwx'를 이해하고 비교해봤습니다.

하지만 인생은 이해만 해선 안되죠.. 확실히 체화시키기 위해 실제 예시를 통해 설명해보겠습니다.



5. 디렉토리와 일반파일 권한 실제 예시


가장 먼저 저희가 저~~~엉 말로 쉽게 볼 수 있는 
"디렉토리 파일"과 "그냥 파일"의 기본 권한의 차이를 보여드리겠습니다.

"기본 권한"이란 그냥 저희가 파일을 만들었을 때 "자동으로 부여돼 있는 권한"을 말해요

"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"은
그저 텍스트(글들)을 적을 수 있는 빈 파일일 뿐이죠. 

저희가 저기 안에 스크립트(코드)를 쓰지 않는 한 아~무런 기능이 없는 그저 글만 적힌 파일이란 뜻입니다.

그러니 '일반파일'은 실행 권한을 가질 필요도, 가져도 실행을 못한다는 말입니다.

좀 더 확연한 차이를 느끼기 위해 사진으로 보여드릴게요 그 과정은 아래처럼 진행할
겁니다~

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(read)'은 없고 'x(excute)'권한만 있음 어떻게 될까요? 

이건 마치, 불이 꺼져 있는 깜깜한 디렉토리(방)에 들어간 것과 같습니다.

디렉토리 내부를 읽을 수가 없으니 디렉토리안에 어떤 파일이 있는지는 못 보지만, 실행 권한은 있으므로












위 파란색으로 나타낸 것 처럼 '/'에서 'everybody' 내부로 이동한 모습입니다!

여기까지 일반파일과 디렉토리의 "r"과 "x" 권한의 차이를 알아봤네요 
이렇듯 r(read)와 x(excute)는 아예 다른 개념이란 뜻이죠~

자 그럼 w(write)의 개념도 제대로 설명을 해야죠?

일반파일의 경우 쉽게, 'w'를 "파일을 변경할 수 있는 권한"이라고 아시면 편합니다.

'w'는 파일을 변경할 수 있는 권한이기 때문에 다중 사용자를 지원하는 리눅스에서, 다른 유저가 다른 사람이 만든 파일을 멋대로 바꾸면 상당히 문제겠죠?

그래서 '일반 파일'을 만들면 소유자만 w(write)권한을 갖도록 하는 것입니다.

그리고 디렉토리의 'w'는 "디렉토리를 변경할 수 있는 권한"이라고 아시면 됩니다.
디렉토리 내부 파일들을 추가하든 지우든, 말 그대로 디렉토리(방 내부)를 변경할 수 있는 권한이죠.

마치 '도서관 사서'가 '방(디렉토리)'에 있는 '책(파일)'들을 맘대로 이동하고, 이름 바꾸고, 버리고, 새로 추가하듯 방 내부를 관리할 수 있는 것과 같습니다.

하지만 그 책(파일)의 내용을 변경할 권한이나 마법서의 기능을 실행할 권한은 없죠. 





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'권한이 있으면, 다른 사람의 파일 쉽게 수정 및 제거가 가능하다는 것~

그렇기에 보통 디렉토리를 새로 만들면 "rwxr-xr-x"이런식으로 소유자가 아닌 경우 'w'권한을 빼는 겁니다 ㅎㅎ




7. 중간정리


와... 어렵다 그죠? 뭐가 이리 까다로운지... 그래도 이런 권한에 대해 제대로 알지 못하면
권한 부여를 잘못해서 시스템이 해킹당하는 불의가 발생할 수 있습니다..(물론 실전에서)

긴 내용을 읽느라 몽롱해졌으니 다시 한번 정리해드리겠습니다.


일반 파일의 rwx

r(read) : 파일을 read, 파일의 내용을 읽을 수 있는 권한
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, 실행할 수 있는 권한

2. 디렉토리에서의 권한 'rwx'
r(read) : 읽겠다, 즉 디렉토리 내부(파일들)을 볼 수 있는 권한
w(write) : 쓰겠다, 일반파일과 같은 맥락으로 디렉토리 내부 파일들을 변경할 수 있는 권한
x(excute) : 실행하겠다, 디렉토리의 기능(디렉토리 내부로 이동)을 실행할 수 있는 권한

3. 디렉토리에 'w'권한이 있으면, 파일에 'w'권한이 없어도 그냥 덮어버릴 수 있기에 조심해야한다.

4. chmod 옵션엔 -R(Recursive)가 있고 권한을 주는 방법엔 기호방식,숫자방식이 있으며
기호는 chmod [옵션] [사용자기호들][연산자][권한] [파일] 또는 {[사용자기호][연산자][파일]},{....}... [파일]이 있다

5. chmod 숫자방식은 chmod [옵션] [권한 숫자] [파일] 이다






호우... 진짜 긴 글이였지만 화장실 가는 거 빼고 풀 집중해서 7시간만에 끝냈네요!
ㅎㅎ  오타나 틀린내용 지적해주시면 바로 수정하겠습니다!

도움이 되셨다면 좋겠네요 ㅠㅠ

구글 블로그 팔로우 클릭, 따듯한 댓글은 큰 도움이 되어 제가 더 퀄리티 좋은 포스트를 만들게 도와줍니다!!


-리눅스 공부할 순서 페이지-
https://mamu2830.blogspot.com/p/blog-page_13.html




2019년 8월 16일 금요일

useradd, usermod, /etc/passwd , /etc/shadow 자세히!

안녕하세요~ 마무입니다. 오늘은 "리눅스 유저" "useradd", "usermod", "/etc/passwd", "/etc/shadow"에 관한 포스팅을 할 겁니다.

오늘 이 포스트를 다 읽으시면

유저 그룹 other의 개념과 useradd, passwd, su, /etc/passwd, /etc/shadow

에 대해 확실히 알게 되며 운영체제를 바라보는 시선이 달라집니다!


---목차---

1. 윈도우에서의 유저, 그룹, other

2. 리눅스에서의 유저와 그룹

3. useradd

4. . passwd

5. su

6. /etc/passwd

7. /etc/shadow파일의 목적

8. usermod

9. userdel
-----------

여기서 못 찾은 정보는
리눅스 독학 페이지 : https://mamu2830.blogspot.com/p/blog-page_13.html
여기서 찾아보세요!



1. 윈도우 유저, 그룹, other


사실 개인 컴퓨터(Personal Computer)에 특화된 윈도우 운영체제만 써오던 사람들에게
"유저", "그룹"이란 개념은 상당히 생소할겁니다. 왜냐면 컴퓨터(PC)는 내꺼이자 나만 쓰니까요!

여기서의 "유저"란 말 그대로 한 컴퓨터를 사용하는 사람중 한명을 의미합니다.
형제가 있으신 분들은 어렸을 때, 동생이나 형, 누나, 오빠가 컴퓨터에 자기가 원하지 않는 프로그램을 깔거나 혹은 자신의 사생활을 지키기위해 알게모르게 이 "유저"라는 기능을 사용해봤던 사람이 있으실 겁니다.

무슨 소리냐?




바로 이런식으로 계정을 만들어서 하나의 컴퓨터를 마치 2개의 컴퓨터처럼 사용했던 걸 말하는 겁니다.

하지만 이 원리가 어떻게 되는건지 궁금하지 않습니까? 다시말해 같은 컴퓨터인데 어떻게 이렇게 계정마다 서로 다른 화면을 사용할 수 있느냐는 거죠.

그것이 바로 운영체제의 "유저"의 힘입니다.

"윈도우 운영체제"인 경우에는 운영체제가 깔린 "로컬 디스크 C:"안에 "사용자(또는 users)"라는 폴더에 각 유저들의 데이터들이 있습니다.




이렇게 말이죠. 이건 현재 제 컴퓨터의 사용자로서, 저같은 경우엔 이름이 "c"로 돼 있습니다.

들어가보면



이렇게 제 컴퓨터의 "c"유저만을 위한 공간과 바탕화면이 있죠 ㅎㅎ

이런식으로 윈도우에서도 "유저"라는 기능을 통해 한 컴퓨터를 편하게 공유를 할 수 있는겁니다. 또한 그 외에도 어느수준까지만 파일을 건들 수 있거나 변경 못하게 하는등 "권한"을 조절할 수도 있죠.





이렇게 윈도우에서 아무 파일을 우클릭 후 "속성"을 클릭한 다음






"보안"에 들어가시면 이렇게 특정 유저나 그룹에게 어떤 파일을 어디까지 사용가능한지의

사용권한을 조절할 수 있습니다.

신기하죠?

아 참고로 "그룹(Group)"이란 다른 포스트에서 다룰거지만, 유저들의 권한을 쉽게 조절하기 위해 그룹을 만들어 묶어놓은 것이라고 생각하시면 됩니다. 무슨 소리냐

특정 사람마다 각각 "'A'는 파일 수정 못함", "'B'는 읽기 및 실행 못함", "'C'도 읽기 및 실행 못함" 이렇게 일일이 권한을 주는 것보단

"파일 수정 못함 그룹"을 만들어 'A'를 넣고, "읽기 및 실행 못함 그룹"을 만들어 'B', 'C'를 넣으면 한번에 여러 유저들의 권한을 쉽게 조절할 수 있겠죠?

"윈도우"에서 "other"이란 건 사실 웬만하면 잘 쓰이지 않긴 합니다만, 이 "other"이란 말 그대로 "유저와 그룹"어디에서 속하지 않은 사람들, 즉 내 컴퓨터로 접속한 외부 컴퓨터 사람들을 말합니다.

이 "other"권한은 보통 "파일 공유"기능을 쓸 때 자주 쓰이는 것으로, 학교 컴퓨터실에서 선생님이 같은 교실에 있는 학생들에게 파일 공유를 할 때 쓰입니다.

학생들이 선생님 컴퓨터에 접속해 선생님의 공유 파일을 복사해 가기만 하면 문제가 안되지만, 만약 그 외 다른 자료을 건들면 안되잖아요? 

그런 경우를 방지해서 애초 "other(내 컴퓨터에 접속한 다른 컴퓨터들)"은 내가 공유를 해놓은 폴더만 사용가능하게 만들거나, 혹은 내 파일을 삭제를 못하게 한다거나 할 때 사용한다는 것이죠.




2. 리눅스에서의 유저와 그룹


마찬가지로 "리눅스"에도 유저와 그룹 그리고 other(그외 사람들)이 있습니다.
하지만 알아두셔야 할 것은 "윈도우는" "Personal(개인용) Computer(컴퓨터)"에 특화된 운영체제이지만, 대부분의 "리눅스"는 멀티유저(서버용)에 특화된 운영체제라는 겁니다.

그렇기에 "권한"이라는 부분에서 어떻게 보면 PC보다 더욱 더 민감하고 많은 기능이 있습니다. 하지만 기본적인 메커니즘은 비슷합니다. 윈도우처럼 각 유저마다의 바탕화면과 공간을 가지고 있죠.

"윈도우"에선 "c드라이브->사용자 or users"폴더에 각 유저들을 위한 공간(폴더)이 있었다면, "리눅스"에선 "/home/"에 유저들을 위한 공간 디렉토리들이 있습니다.

리눅스의 권한이라는 부분은 따로 포스터로 자세하게 다루니 여기서는 일단 유저를 만들고 관리하는 명령어들에 대해서 배워보겠습니다.



3. useradd


유저를 만드는 명령어는
useradd [옵션] [유저이름] 입니다.

그냥 명령어 이름 그대로 "user(유저를)add(추가하겠다) [이 이름으로]"입니다.

저같은 경우 한번 "bob"이란 이름으로 유저를 한번 등록을 해보겠습니다.




이렇게 말이죠. 여기서 명령어 치면 아무런 반응이 없을텐데, 원래 무소식이 희소식이라고(???) 원래 컴퓨터쪽에선 명령어를 쳤을 때 아무런 반응이 없으면 성공적으로
잘 됐다는 뜻입니다~

유저가 잘 만들어졌는지가 궁금하면 확인하면 되죠! 확인하는 방법은 정말 다양하게 있습니다. 유저 데이터 베이스 파일을 확인하거나, 로그아웃했다 다시 만든 유저로 로그인하거나, 아님 패스워드 변경 명령어를 써서 유저가 있는지 확인하거나 말이죠.

우린 그중 "패스워드 변경 명령어"를 통해 배우는 겸 확인해보겠습니다.



4. passwd


명령어 형식
passwd [옵션] [유저이름]

password(패스워드)의 약자로, "패스워드를 변경"하거나 설정할 때 사용하는 명령어 입니다.

"관리자(root)"가 "useradd"명령어로 만든 유저는 패스워드가 없습니다. 그러니 바로 "passwd"란 명령어로 패스워드를 등록해줘야합니다.





이렇게 아까 만든 "bob"이란 유저에 "passwd"란 명령어를 적으니 암호를 입력하라고 합니다. 여기서 암호를 2번 입력해주면 끝이죠.

참고로 "관리자(root)"는 "모든 유저"의 패스워드를 변경할 수 있고 8개 문자보다 짧게 만들수 있지만, 일반 유저는 "자신의 패스워드"만 변경 가능하고 8개보다 짧게 못 만듭니다.

여기에서 "passwd" 옵션이 뭐가 있나 궁금할 수 있으나, 사실 여기서 사용되는 옵션들은
유저의 패스워드의 만기기한 이나 잠금용으로 지금 단계에선 배우기엔 좀 복잡합니다. 그러니 나중에 따로 포스트로 정리하도록 하겠습니다.

패스워드를 성공적으로 바꿨으니 이번에는 아이디가 성공적으로 만들어졌는지 확인하는 방법중 하나인 실제로 로그인하기를 해보겠습니다.





오른쪽 상단의 "전원버튼"을 누르고 계정 바꾸기를 클릭하시고
이런 화면을 보시면 맨 밑에 저희가 방금전에 만든 "bob"계정이 보이실 겁니다




아까 설정한 패스워드를 적고 로그인을 하시면





이런식으로 "GUI환경"을 위한 초기설정이 나옵니다~ 이것만 봐도 충분히
만들어졌다는 걸 알 수 있죠?



5. su


저희는 매번 "GUI"환경으로 로그인하면 너무 느리고 짜증나기 때문에 다음부턴 "CLI환경", 즉 명령어로 바로 로그인을 할 것 입니다.

"su [유저아이디]" 를 하시면 로그인하기 전에 내가 있던 위치에서 그대로 "유저"만 바뀝니다.





"로그인 된 유저의 이름"은 보라색을 표시한 맨 왼쪽을 보고 알 수 있습니다.
사진을 보시면 관리자 "root"에서 "bob"으로 바뀌었죠? 로그인이 됐다는 겁니다.

그리고 오른쪽을 보시면 "root"의 홈인 /root에서 "bob"으로 로그인하니 그대로 /root에 있는 걸 볼 수 있죠!

하지만 만약 현재 위치가 아니라, 정말 새로 로그인한 것처럼 로그인 유저의 홈에서 시작하고 싶다면
"su - [유저아디]"

이렇게 '-'를 가운데에 붙여주시면 됩니다! 그럼 "/root"에서 root가 bob으로 로그인할시
/home/bob"에서 시작이 됩니다!


당연한 거지만 "su"명령어를 이용해 다른 계정으로 바꿀 땐 패스워드를 적어야 합니다.

하지만 "root"계정에서 다른 계정으로 바꿀 땐 패스워드가 필요없죠 왜냐면 root는 주인이니까~ 주인이 허락받고 사용할 이유는 없자나요? ㅎ

참고로 "su" 만 하시면 "root"로 로그인 하겠다는 겁니다..

당연히 관리자 로그인이니 패스워드는 무조건 필요하지만요!




여기서도 맨 왼쪽을 보면 bob에서 root로 바뀌었죠?



6. /etc/passwd



로그인 하는 것 외에 유저가 잘 만들어졌는지 확인하는 방법중 "유저의 데이터 베이스 파일 확인" 기억나시나요? 리눅스의 유저 데이터베이스 파일이란 바로 "/etc/passwd"입니다. 
말 그대로 유저들에 대한 정보들이 들어있는 파일입니다.

"컴퓨터 전역에 영향을 미치는 설정파일들이 들어있는" "/etc" 디렉토리로 "cd"로 이동하신다음

"cat /etc/passwd" 하셔도 되고 "tail /etc/passwd", "more /etc/passwd", "vi(vim) /etc/passwd" 등등 파일 내용을 읽는 명령어는 전부 사용하셔도 됩니다.

참고로 "tail"은 기본적으로 tail,즉 꼬리라는 의미대로 맨 끝에서 10개의 줄만 출력합니다

저희가 새로 만든 유저는 새로운 것이니 맨 밑애 생겼을 겁니다. 그러니 "tail"명령어를 통해 한번 열어봅시다.




이렇게 "tail"으로 "/etc/passwd" 파일을 읽어보시면 이렇게 내용이 쓰여있는데요
좀더 자세히 보시면 ":" 으로 나눠져 있는게 보이실 겁니다. 순서대로 뭘 의미하는지 설명해드리겠습니다.








앞에서부터 순서대로

계정ID : 패스워드 : UID(UserID) : GID(GroupID) : 설명(comment) : 홈 디렉토리 : 쉘 환경 이고 ":"로 구분이 됩니다.

계정ID는 말 안해도 다들 아실 것이고

패스워드 부분은 왜 "x"인가? 당연히 패스워드가 노출되면 안되기 때문이죠~ 
유저의 패스워드는 중요하기 때문에 /etc/passwd에서 관리하지 않고
/etc/shadow 라는 파일에서 관리합니다.

여기서 혼동이 오실 겁니다. 왜 passwd이름대로 passwd파일에서 패스워드를
관리하면 안 헷갈릴텐데 왜 shadow란 파일에서 관리하지? 그리고 파일이름이
shadow인 이유는 뭐야!!?



7. /etc/shadow파일의 목적



쉽게 설명하자면 원래는 "passwd"란 이름대로 이 파일에서 비밀번호를 관리했습니다.
패스워드는 "1~4096"중 하나의 랜덤한 숫자로 암호화돼서, 혹여나 시스템의 정보가 유출되도 원래 패스워드를 모르게 했죠

예로 들어 "abcd1234"라는 패스워드가 해커에 의해 유출 됐다치면 상당히 위험하지만, 이
"abcd1234"란 패스워드를 "1000"이란 숫자로 바꿔서 저장하고 있었다고 치면 유출되도 1000이란 단순한 숫자니까 그나마 괜찮은 겁니다.

하지만 이 "passwd"란 파일은 모든 유저가 읽을 수 있었고(/etc/passwd파일은 어떤 프로그램들이든 참조하는 데이터베이스 파일이라서) 또한 관리하는 "암호문(1~4096)"은  "Cracker(나쁜 해커를 부르는 말)"들의 모든 경우의 수를(1~4096까지) 다 체크하는 dictionary attack에게 너무 취약했기 때문에

결국 패스워드는 "root"만 접근 할 수 있게 권한을 조정한 "/etc/shadow"파일에 훨씬 복잡한 방식 암호화해서 저장해두게 됐습니다.

그리고 이 "shadow"란 표현은 원래 unix에서 패스워드를 암호화해서 숨길때 사용되는 방법을 의미합니다

다시 한번 정리하자면 

1. passwd파일은 대부분의 프로그램들이 참조하는 데이터베이스 파일이기 때문에
모든 유저가 읽을 수 있게 해두었다.

2. passwd 파일에서 사용하는 암호화는 너무 취약했다.

3. 1번과 2번의 단점을 해결하기 위해 root유저만 읽을 수 있는 "shadow"란 파일을
만들어서 거기에 패스워드를 관리했고 암호화도 훨씬 복잡하게 했다.

4. "shadow" 란 표현은 유닉스에서 패스워드를 암호화할 때 사용되는 방법을 의미하고
unix를 무료버전으로 바꾼게 linux이기 때문에 linux도 이 표현을 사용한다.


UID(User ID)는 각 계정에게 부여되는 "식별하기 위한 번호"라고 생각하시면 됩니다.

GID(Group ID)는 UID와 마찬가지로 각 그룹들에게 부여되는 "식별하기 위한 번호"입니다.

설명(comment)은 위에 사진에선 안나와 있지만 보통 있다면 계정이름과 똑같은 글이 적혀있습니다. 나중에 유저정보를 편집할 때 확실히 감이 오시겠지만 보통, /etc/passwd를 봤을 때 "아~ 이 유저는 누가 쓰는 유저구나"와 같은 식으로 보고 알 수 있게 설명하는 칸입니다.

이 코멘트를 만약 mamu2라고 적으면 GUI환경에서 로그인 할 때 mamu가 아닌
mamu2라고 목록에 나와있는 걸 볼 수 있습니다.


홈 디렉토리는 이름 그대로 유저의 홈 디렉토리 위치입니다.

쉘 환경은 이 계정이 쓰는 쉘이 뭔지를 나타낸 겁니다.

쉘이 뭔지 모르시는 분들은
 https://mamu2830.blogspot.com/search/label/%EB%A6%AC%EB%88%85%EC%8A%A4%20%EC%89%98


이 곳에 가셔서 보고오시면 될 것 같습니다~

자자 /etc/passwd 파일이 무슨 파일인지와 무슨 정보를 가지고 있는지 알았으니
이제 이 곳에 적혀있는 유저들의 정보를 바꾸는 법을 알아야겠죠?


8. usermod


유저의 정보를 바꾸는 명령어는

usermod [(-옵션) (옵션 값).....] [계정] 입니다.

usermod 옵션에는
         
            -u(user id)
            -g(group id)
            -c(comments)
            -d(home directory)
            -s(shell)
            -L(LOCK,잠금)
            -U(UNLOCK)

이 있습니다. 차례대로 보여드릴게요~

-u(user id)





이렇게 UID를 "1004"로 바꾼다고 하면








cat이든 tail로 /etc/passwd를 봤을 때 사진처럼 바뀌어 있습니다!


-g(group id)





1004번으로 그룹을 바꾸려고 했지만 당연히 없는 그룹이라 안됩니다!
여기서 보충 설명을 하자면 , 모든 유저들은 하나이상의 그룹에 속하게 되어있고
새로 만들어진 유저는 그 "유저의 이름"의 그룹이 자동으로 생기고 그 그룹에 속하게
됩니다.

mamu라는 유저를 만들면 자동으로 mamu라는 그룹도 생기고 mamu는 mamu그룹에
속하는거죠

-c(comments)





 윗 사진처럼 명령어를 치고 보시면




이렇게 비어있던 설명부분에 bobbob이 들어가게 됩니다

-d(home directory)





이렇게 기존에 /home/bob이던걸 bob1로 바꾼다고 하면




이렇게 바뀌긴 합니다. 하지만 실제로 bob1라는 파일은 없죠?
애초에 모든 파일은 "/"안에 있어야하는데 그냥 bob1이란 파일이 어디겠습니까




그래서 bob에 로그인해서 보면 일단 root계정에 있던 위치 /home에 있고
bob의 홈으로 이동하기 위해 "cd"를 쳐보지만 없는 파일이라고 하며 이동이 안되죠
(밥.. 넌 어디냐?)




다시 원상복귀시켜서 밥의 집을 찾아줍니다.





이렇게 말이죠

-s(shell)





이렇게 "-s" 옵션으로 /bin/sh 쉘로 한번 바꿔봅시다!

쉘이 뭐지 하시는 분들은

https://mamu2830.blogspot.com/search/label/%EB%A6%AC%EB%88%85%EC%8A%A4%20%EC%89%98

보고오십쇼 ㅎㅎ

명령어를 친다음 바뀐 걸 확인하기 위해 "su bob"으로 bob에 접속해봅니다.




위 사진을 보면 현재위치는 /home/bob으로 정상적이고
명령어 왼쪽을 보시면 sh-4.2 이런식으로 쉘이 bash가 아닌 sh로 바뀐 걸 볼 수
있습니다. 심지어 쉘이 모르는 명령어를 치면
"sh"이 명령어를 찾지 못했다고 하죠





다시 bash쉘로 원상복귀 시켜줍니다


   -L(Lock)






이렇게 Lock을 하면 pssswd파일을 tail이나 cat으로 봤을 땐 변화가 없습니다.
하지만




로그인창에 가면 이렇게 bob이 사라진 걸 볼 수 있습니다(bob..어디냐?)

"목록에 없습니까?" 를 눌러 로그인을 해봐도





이렇게 동작하지 않습니다 이게 저희가 아까 usermod -L 으로 잠궈서 그렇습니다.

다시 root로 로그인 한다음




이렇게 -U(Unlock)을 해주시고 다시 로그인창에 가시면




이렇게 밥이 다시 돌아온 걸 볼 수 있습니다.

당연히 로그인도 되구여~

참고로 전에 "리눅스 기본명령어1" 편에서 제가
명령어는 "-"하나만 붙이고"-alh' 처럼 옵션은 여러개를 동시에 쓸 수 있다고 했는데

"리눅스"에서 이렇게 기존에 설정된 걸 바꾸는 명령어는
[옵션] [옵션내용] [옵션] [옵션내용] ... 마지막에 [대상] 이렇게 해야합니다

사진을 보여드릴게요






이렇게 comments를 바꾸고 UID를 1003으로 바꾸라고 하죠
그리고 옵션의 순서는 중요하지 않습니다만 "옵션+옵션내용" 은 꼭 지켜주세요~


여기까지 저희는 유저를 생성하고 편집해봤는데요
탄생이 있으면 죽음도 있는 것... 유저를 지우는 방법도 알아봐야겠죠?





9. userdel


유저를 지우는 명령어는
userdel [옵션] [대상] 입니다.

여기서 사용할 옵션은 "-r(recursive)"밖에 없는데요 쉽게 설명하자면 유저에 관련된 하위
폴더까지 싹다 지우라는 옵션입니다. 만약 "-r"옵션을 사용하지 않고 지울 시
유저의 홈 디렉토리같은 정보들이 남아있게 됩니다.




여러분들은 지금 bob2의 탄생과 죽음을 보고 계십니다.
분명 저희는 userdel로 bob2를 지웠습니다





보시면 확실히 bob2는 지워졌죠

하지만




이렇게 /home디렉토리엔 bob2가 남아있습니다....(누구냐.. 넌..)
이처럼 찌꺼기? 가 남기때문에 유저를 지울 땐 "-r"옵션을 써주는게 중요합니다

혹여나 실수로 "-r"옵션 쓰는 걸 깜빡하시면 다시 지우려해도 안지워질텐데
밑에 사진처럼 말이죠





걱정마세요 그냥 새로운 bob2를 만든다음 확실히 제거하면 됩니다
마치 바퀴벌레의 새끼까지 다 죽이기 위해 바퀴벌레에게 바로 안죽는 약을 먹이고
방생한다는 느낌이랄까...





bob2는 새생명을 얻었습니다!
그리고




다시 가셨습니다
-r 옵션으로 이번엔 정말 미련없이 깔끔히 가신 걸 볼 수 있습니다.



도움이 되셨다면 팔로우와 좋아요 댓글 부탁해요 ㅠ 정말 큰 힘이 됩니다
다음에 더 좋은 퀄리티로 찾아뵙겠습니다...!