}

블로그 소개


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

프로필

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

팔로어

다른 페이지로 이동


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

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


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

<===***===↓↓↓You can use translate on the chrome↓↓↓===***===>

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 옵션으로 이번엔 정말 미련없이 깔끔히 가신 걸 볼 수 있습니다.



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


댓글 2개:

  1. 강의 듣고 이해 안가는 부분을 여기서 보고 이해하고 가네요! 감사합니다!!

    답글삭제
    답글
    1. 도움이 돼 정말 다행입니다!! 따뜻한 댓글 감사해요 ㅎㅎ!

      삭제

#1 여러분들이 소중한 시간을 투자해 달아주시는 따뜻한 댓글들은 저에게 정말 큰 힘이 됩니다!

#2 저의 각 포스트들은 엄청난 노력과 시간 투자를 통해 만들어진 포스트들로, 무단 복제나 모방하는 것을 금지합니다.

#3 저의 포스트에도 틀린 정보가 있을 수도 있습니다. 그럴 경우 친절한 말투로 근거와 함께 댓글로 달아주시면 정말 감사하겠습니다!

* 바쁜 개인 일정으로 댓글 답변이 많이 느립니다 *