본문 바로가기

별걸다하는 IT/리눅스 유닉스

[리눅스 / 유닉스]사용자 관리(사용자 추가 useradd, passwd파일, 시스템계정 )

리눅스 완전 정복 : 리눅스 목차

오늘도 제 블로그를 클릭해주시고 방문해주신 방문자님들 반갑습니다. 오늘은 관리자 역할 중 빼놓을 수 없는 사용자관리에 대해서 알아보는 시간을 가질거예요~!

사용자 계정 추가하기

ㅎㅎㅎ여러분이 서버 관리자라고 해봅시다.

신입사원이 들어왔어요... 그럽 신입사원이 서버에 붙어 개발할 수 있도록 사용자계정을 만들어줘야겠죠?

 

즉 관리자는 사용자를 추가하고 이에 대한 설정과 관리를 할 줄 알아야합니다.사실 저는 일개 사용자라.... 사용자 추가할 일이 실습말고는 없었다만,,

 

만약 내가 회사의 운영팀이나 관리팀으로 들어가게 된다면 사용자 관련한 업무를 엄청 많이 다루게 될거예요~~!

 

사용자를 추가하는 useradd 명령어에 대해서 알아봅시다!

 

USERADD 명령어

useradd 명령어는 사용자 계정을 추가해줘요

계정이란, 시스템에 아이디와 패스워드를 생성하여 사용권을 부여하는 것을 말합니다.

즉 여기서 사용자의 ID를 생성하는 명령어가 useradd인거죠!

패스워드를 생성하는 명령어는 passwd랍니다, 요 명령어는 다음 포스팅에서 배울거예요

 

알다시피 우리 리눅스 유닉스 운영체제는 다중 사용자 시스템입니다! 리눅스를 설치하면 기본적으로 root라는 이름을 가진 관리자 즉 슈퍼 유저가 있고, 이 관리자는 시스템에 접속할 수 있는 사용자들을 생성하고 관리하는 권한을 가지고 있어용. 일개 사용자가 다른 사용자들을 관리할 수는 없겠죠~~~~

 

즉 root권한자가 root이외의 사용자를 생성할 때 사용하는 명령어로, useradd라 해도 되지만 adduser라 써도 됩니당.

 

# useradd [option] 사용자계정이름

간단한 사용자 추가 예제

이제 실제로 계정을 추가하고 확인해봅시다

# useradd yang
# passwd yang

-> useradd yang : yang이라는 계정을 아무 옵션 없이 추가했어요

이렇게 사용자만 만들어줬을 경우에는, 비번이 설정되어 있지 않아서, 사용자가 접속할 수가 없어요.

로그인 하면 바로 비밀번호 입력하라는 커맨드가 뜨거든요!

 

->passwd yang

따라서 계정을 생성한 뒤에는 그 계정의 초기 비밀번호를 설정해줍시다.~~~ (패스워드 설정 명령어는 사실 초기 비밀번호 설정 포스팅에서 아주 기초적인 명령만 다뤄본적이 있어요 ㅎㅎ)

 

이제 제대로 만들어졌나 확인을 위해서 로그인을 해볼게요. alt+F2를 눌러서 가상터미널 tty2로 가서 만들어준 계정으로 로그인을 해줍시다!

로그인 성공 뜨면서 어쩌구저쩌구 출력이 됩니다. 이로써 잘 로그인 된 것을 확인할 수 있어요!

그런데 해당 계정은 홈 디렉터리가 없다는 알람이 뜨네요..

useradd는 단순히 사용자계정을 추가해주는 역할외에도 여러 옵션으로 설정을 진행할 수 있답니다.

 

사용자 관리 파일, PASSWD 파일 구조

우리 리눅스 유닉스 운영체제는 다중 사용자 시스템이라고 했어요.

그럼 리눅스 유닉스는 관리자가 등록한 사용자들을 어떻게 관리할까요~?

일일이 다 외우고 있진 않을 거 아니예요?? 그리고 리눅스 운영체제는 사용자 정보를 어디다가 저장하고 있는걸까요?

리눅스는 대부분의 정보를 텍스트 파일에 저장해서 관리합니다. 사용자 계정 정보 역시 파일로 저장되고, 사용자를 생성할 때도 관련 파일에서 사용자 정보를 가져오죠!

 

그럼 우리가 생성한 계정을 확인해볼겸, 사용자 관리 파일에 대해서 알아봅시다.

기본적으로 사용자의 목록은 /etc/passwd에 저장되어 있답니다.

 

사용자의 목록을 저장하고 있는 정보 파일:

/etc/passwd

 

일단 관리자만 접근할 수 있다는걸 보여주기 위해서, 사용자를 관리자가 아닌, ubuntu나 yang으로 변경해주었어요. 그리고 파일 목록과 정보를 출력해주는 'ls -l'로 해당 파일을 보면!

 

사용자관리 파일에 root외에는 아무도 수정할 수 없도록 접근권한이 지정되어 있습니다!

따라서 파일을 삭제하려는 rm명령어를 쳐도 퍼미션 디나이드가 떠 수행되지 않고

vi로 들어가 편집을 하려고 해도 쓰기가 불가능하기 때문에 막혀있다는걸 알아요!

해당 passwd 파일을 수정해주려면 꼭 root로 변경을 해줘야 한다는거!

일단 관리자로 변경해준 다음, 파일을 출력해봅시다 (사실 읽는건 root가 아니여도 상관은 없지만..ㅎㅎ)

 

su를 이용해 root 사용자의 비밀번호인 root를 입력해 root계정으로 바꾼 뒤 vi /etc/passwd명령어를 입력해줘도 되고~~ sudo명령어를 이용해 sudo cat /etc/passwd 입력 후, 현재 계정의 비밀번호[password for ubuntu]인 ubuntu를 입력해도 똑같은 내용이 출력됩니다.

 

ubuntu@server:~$ su - //root 관리자 계정으로 전환!
Password: //설정해놓았던 관리자 패스워드 입력
root@server:~# vi /etc/passwd //passwd파일을 내역을 보여줭!

참고로 vi도 되고 view도 되고,, cat도 되고 볼 수 있는 명령어는 여럿 잇죠 뭐튼 예제에서는 vi편집기로 열어봤어요.

 

여기 한줄 한줄이 지금 등록된 계정이랍니다!!

 

사용자를 추가한 적이 없는데 이미 뭔가 많은 사용자들이 파일에 적혀있죠?

 

시스템 계정이란?

우리가 추가하는 사용자 이외에도 리눅스는 프로그램을 실행할 때도 사실 사용자가 추가가 되서 이 사용자들이 프로그램을 실행하고 passwd파일에 관리가 됩니다.

이러한 계정을 시스템 계정이라고 하는데, 말 그대로 시스템 필요에 의해서 생성된 계정이예요.

 

왜 이렇게 할까요?? (cf, 리눅스마스터 1급 정복하기)

리눅스는 유닉스의 영향을 받아서 파일을 생성할 때나 프로세스 생성 시에 반드시 소유자를 명시하도록 되어 있고 해당 소유자의 권한을 승계하는 형태로 운영됩니다. 즉, root가 만든 파일이면 root권한이고, root가 실행한 프로세스는 root권한이 부여된다고 볼 수 있어요. 근데 시스템 계정이 없다면 모든 파일 생성과 프로세스 생성 시에 root 권한이 부여되어야 하겠죠..?

 

한 예로, 리눅스에 있는 하나의 게임을 실행하여 게임의 점수를 /etc/highscore라는 파일에 기록하도록 구성했다고 가정해봅시다. root만 존재한다면 게임 실행 시에 root권한으로 실행되고, 관련 점수는 /etc/highscore에 root권한으로 저장이 됩니다. 정상적으로 동작한다면 문제가 없겠지만, 만약 프로그램의 오류로 인해 /etc/highscore 파일에 기록되어야할 정보를 /etc/inittab에 기록한다면 시스템이 부팅되지 않는 최악의 상황에 직면하게 되겠죠..

따라서 만약 games라는 계정을 만들어서 게임을 실행할 때 games라는 사용자 권한으로 프로세스를 생성하고 /etc/highscore에 기록하게 한다면 이런 문제점을 막을 수 있는 ~~~ 그런 문제점을 줄이기 위해 시스템 계정이 있는거랍니당.

좋은 구글링 정보가 있어서 가져왔어요

보면 유저 계정들은 우리가 등록한거외에도 시스템 서비스들을 돌리기 위해서 생성되기도 하고 시스템 파일의 소유자를 등록을 위해 생성되기도 한다네요. (위 설명과 큰 차이는 읍는듯?) 그 외 자세한 설명을 쭈우욱 저 분께서 써주셨으니 궁금하신 분은 쭉 읽어보기~~

'비밀번호 저장 관련 파일'을 확인해보면 사실 이 시스템 계정들은 로그인 못하게 계정이 잠겨있습니다. 

PASSWD 파일 내부 분석

다시 사진으로 돌아가서~

맨 처음에는 root 계정이 보이고 맨 아래에는 우리가 초기 설정에서 만들었던 ubuntu계정이 보이네요.

방금 만들어준 yang 계정도 보이고,, 제가 만들어뒀던 jhnyang계정도 보입니당. ㅎㅎ

 

이 와 같이 한 줄은 한 계정을 의미하고 ':'으로 구분해서 7개의 기본적인 정보를 담고 있습니다.

사용자이름 : 암호 : 사용자ID : 사용자가 소속된 그룹ID : 전체 이름: 홈 디렉터리: 기본 셸

------------------------------------------------------------------------------------------------------------------

1. 사용자명 root나 ubuntu처럼~!

2. 사용자의 비밀번호가 기록되는 부분입니다. x는 암호화된 비밀번호를 뜻해요 나중에 살펴볼거지만? 이 암호화된 비밀번호는 /etc/shadow 파일에 저장됩니다.

3. 사용자아이디인데 숫자로 0은 무조건 최고봉인 root꺼! 1-99는 이미 정의된 계정들을 위한 번호고 100-999는 시스템 관리자나 시스템 계정을 위한 번호입니다. 우리가 만든 계정은 1000이상부터 가능함..

4. 그 다음은 그룹 아이디로 사용자가 속한 그룹 번호를 나타내요

5. 사용자에 대한 추가적인 정보가 기록되는 곳

6. 사용자의 홈 디렉터리

7.로그인시 사용되는 셸을 나타냅니다.

------------------------------------------------------------------------------------------------------------------

useradd 명령어 옵션 및 사용 예시

자 그럼 이제 사용자를 추가해볼까요?!

회사에서 서버가 하나 있다면, 거기 있는 전산 개발자들은 다 사용자로 등록이 되겠죵?

즉, 모든 사용자들은 혼자서 존재하는 게 아니라 '전산팀' 이린식으로 하나 이상의 그룹에 소속되어 있어야 합니다. 

 

문법과 기본 옵션은 이렇숩니다.

 

사용자 계정 생성 :

# useradd [option] 사용자계정이름

 

man useradd 정보 (리눅스)
man adduser (유닉스 UNIX)

옵션

옵션

의미

-p

사용자의 암호를 추가 시에 지정할 수 있어요

-d

홈 디렉터리를 지정할 때 쓰입니다. (AIX UNIX, 리눅스 공통) 

주의할 점은 최종 디렉터리만 생성하므로 중간 경로가 있는 경우에는 미리 생성해줘야 합니다

 

ex) root@server:~# useradd marine -d /home/terran/marine

marine이라는 사용자를 생성하면서 홈 디렉터리의 경로를 지정하는 거

-g

그룹을 지정할 때 사용하는 데 지정할 그룹이 미리 생성되어 있어야 합니다. (AIX UNIX, 리눅스 공통) 

이 옵션이 없으면 레드햇 계열에서는 아이디와 동일한 그룹에 포함시키고 다른 배포판에서는 users에 포함시킵니다

-G

기본 그룹 이외에 추가로 그룹에 속하게 할 경우 사용 (AIX UNIX, 리눅스 공통) 

-c

사용자 생성 시 사용자에 대한 설명을 설정합니다 (AIX UNIX, 리눅스 공통) 

-s

사용자 생성 시 사용자가 사용할 셸을 지정해요 (AIX UNIX, 리눅스 공통)

-D

/etc/default/useradd에 설정된 유저 추가와 관련된 기본 사항들을 보여줍니다

-m

사용자를 생성할 때 홈 디렉터리를 생성해주는 옵션입니다. (AIX UNIX, 리눅스 공통) 

래드햇 리눅스는 이 옵션을 사용하지 않아도 홈 디렉터리가 생성되지만 다른 배포판에서는 생성되지 않으므로 이 옵션을 지정해줘야 해요

보통 -k옵션과 같이 사용하여 사용자 생성 시 기본적으로 부여되는 목록이 들어있는 skeldir을 지정할 때 사용합니다

-k

사용자 생성 시에 제공되는 환경 파일들은 기본적으로 /etc/skel로 지정되어 있는데 이 외의 디렉터리에 지정할 때 쓰입니다.

-f

사용자의 패스워드가 만기일을 날짜수로 지정합니다.

-e

계정의 만기일을 YYYY-MM-DD형식으로 지정합니다

-u

사용자 추가 시에 UID값을 지정합니다. (AIX UNIX, 리눅스 공통) 

아까 useradd만 사용해서 사용자 계정을 만들어줬을 때 홈디렉터리가 없는 이유는, -d 옵션을 써주지 않았기 때문이었군요!

우분투에서는 아무런 옵션 없이 생성하면 홈 디렉터리가 home/yang으로 지정은 되지만 디렉터리는 생성되지 않기 때문에 -m옵션을 넣어주는 것이 좋아요

 

사용 예시

# useradd newuser

--> newuser라는 이름의 사용자 생성!

# useradd -g IT newuser

--> 사용자를 생성하면서, IT그룹에 newuser를 포함시킵니다.

(앞에서 왜 사용자 그룹이 필요한지 전산실을 예시로 들어줬었어요! )

# useradd -d /jhnyang jhnyang

-> jhnyang 사용자를 생성하면서 홈 디렉터리를 /jhnyang로 지정합니다

잘 알아두세요!! 보통 한 서버에 각각 홈 디렉터리에서 사원들이 작업을 진행합니다 ㅎㅎ 

# useradd -m yang

yang이라는 사용자계정을 추가하고 자동으로 홈 디렉터리를 만들어줍니다.

 # useradd marine -d /home/terran/marine -g terran

marine이라는 사용자를 생성하면서 홈 디렉터리의 경로 및 그룹을 지정합니다.

물론 해당 디렉터리(/home/terran)과 해당그룹(terran)은 미리 생성되어 있어야 합니다.

# useradd -s /bin/bash -d /opt/stack -m stack

--> 나중에 오픈스택할 때 stack계정 생성할 때 이 명령어를 써서 사용해요 ㅎㅎ

기출 문제

[리눅스 마스터 1급 1701회]

다음 중 ihd 계정 생성 시 wheel을 2차 그룹으로 저장하고 UID를 1080으로 설정하는 명령으로 알맞은 것은/

1. useradd -u 1080 ihd -G wheel

2. useradd ihd -U 1080 -g wheel

3. useradd -U 1080 -G wheel ihd

4. useradd -u 1080 -g wheel ihd

 1번

오늘은 여기까지입니다! 공감 or 댓글 or 광고보답은 항상 좋은 포스팅을 제공하고자 하는 저에게 힘이 됩니다 :)

다음 포스팅에서 또 봐요!