본문 바로가기
Linux 2급

리눅스 유저관련 기초 명령어 (su, useradd, usermod, userdel, chown, chgrp) 파일의 소유자,그룹/변경,수정

by 방뭉밍봉 2023. 11. 2.

사용자 설정 파일

/etc/passwd 사용자 계정 정보

/etc/group 그룹 정보

/etc/shadow 사용자 패스워드 정보

( #>passwd [user_name] )

/home/ 사용자 홈 디렉터리 (/home/[user_name])

/etc/skel/ 사용자 환경설정 파일 (/etc/skel/.bash*)

vi나 less , cat 명령어로 하나하나 설정 파일을 들어가 대강 확인해 보시길 바랍니다

소유권 ( 파일의 소유자, 파일의 소유 그룹 )

파일의 소유 그룹 변경

#>chgrp [option] [group_name] [path]

-R (하위 디렉터리에 있는 모든 디렉터리와 파일의 그룹을 변경한다.)

-c 변경된 파일만 자세하게 보여준다

-f 변경되지 않은 파일에 대해서 오류메시지를 보여주지 않는다

-v 작업상태를 자세히 보여준다

저번에 배운 파이프와 grep를 이용해 ls -l /test | grep "hello" 명령어로 /test디렉터리에 있는 hello 파일을 확인해보면

-rw-r--r--. 1 root root 24 10월 4 13:21 hello

----- -----

1) 2)

1) 파일의 소유자

2) 파일의 소유 그룹

파일의 소유자와 소유 그룹이 root인 걸 확인할 수 있습니다 우선이 hello 파일을

#> chmod 640 /test/hello로 hello 파일을 소유자와 소유 그룹만 볼 수 있게 설정해두었습니다

이렇게 되면 root와 root 그룹에 해당되어있는 소유 그룹 말고는 아무도 이 파일을 실행할 수도 읽을 수도 수정할 수도 없게 됩니다 확인해 볼까요?

su ming 로 ming 유저로 접속하면

원래는 읽을 수 있었던 /test/hello 파일의 허가가 거부 되었습니다

이제 배울 chgrp 명령어를 사용해 /test/hello의 그룹을 읽을 수 있게 설정해봅시다

밑줄 친 것처럼 소유 그룹이 ming으로 바뀐 것을 확인할 수 있습니다

다시 ming 유저로 돌아와서 cat 명령어를 사용하니 640 권한이 주어진 hello 파일에 4 권한에 소속되는 ming 은 권한 r 을 사용해 cat 명령어를 사용할 수 있게 되었습니다!

파일의 소유자 변경

#>chown [option] [user_name] [path]

-R (하위 디렉터리에 있는 모든 디렉터리와 파일의 그룹을 변경한다.)

-c 변경된 파일만 자세하게 보여준다

-v 작업상태를 자세히 보여준다

음... 위에 소유 그룹 변경이랑 그냥 똑같다고 생각하시면 됩니다 해당 파일의 소유자를 변경시킵니다

hello 파일의 소유자가 root에서 ming로 변경된 걸 확인할 수 있습니다

 

잉?? 근데 이제 파일의 소유자도 아니고 소유 그룹도 아닌 root 가 어떻게 cat 명령어로 읽을 수 있죠? 그건 root의 권한은 절대적이어서 그렇습니다 root는 리눅스 운영체제 안에서 음... 깍두기?라서 권한이건 뭐건 전부다 볼 수도 설정할 수도 있습니다.

또한 chown 명령어는 파일의 소유자와 소유 그룹을 동시에 변경할 수도 있습니다

이렇게 " . " 점을 구분자로 1. 소유자 2. 소유 그룹을 순서대로 적으시고 변경할 파일의 경로를 지정해주시면 해당 파일의 소유자 소유 그룹이 동시에 변경됩니다.

이렇게 " . " 점을 먼저 달고 이름을 지정해주면 소유 그룹만 설정할 수도 있습니다

(아니.. 이렇게 되면 chgrp 명령어는 없어도 되지 않나?)

[실습] user2

user2:x:1001:1000:Test User:/home/user2:/bin/bash

--> UID : 1001 , 기본 그룹을 usergroup, 홈 디렉터리는 /home/user2

/etc/passwd

아래 ming, bong, test는 제가 새로 만들어 준 user입니다/etc/passwd 파일을 보시면

아랫줄 친 것처럼 user의 uid, gid 가 보입니다 기본 유저의 기본값은 1000부터 1씩 증가합니다.

[command] su ( switch user)

#>su [user_name] 이전 사용자의 환경 변수를 그대로 사용

#>su - [user_name] 변경되는 사용자의 환경 변수 사용

제가 그동안 많이 사용하는 모습을 보셨을 텐데요 su 스위치 유저라는 뜻으로 root 계정

다른 유저로 접속한 것처럼 스위치를 하는 명령어입니다.

옵션 -를 붙여주면 변경할 유저의 환경 변수를 사용하고 그냥 su를 사용하면 su를 사용한 유저의 환경 변수를 그대로 사용합니다.

su ming로 ming라는 계정으로 접속

다시 돌아올 땐 su, exit 등

그냥 su를 하시면 root의 암호를 써서 돌아오셔야 하고 exit라고 쓰시면 그냥 나가집니다

root에서 su를 사용하면 각 계정의 암호를 안 써도 되지만 su로 일반 유저로 접속하고 또다시 su로 다른 유저 거로 접속하려면 해당 유저의 암호를 필요로 합니다

이렇게 말이죠

사용자 관리

[useradd default] /etc/default/useradd (useradd 명령어를 사용할 때 참조하는 파일)

#>useradd [option] [user name]

-D 옵션 D를 사용하면 /etc/default/useradd 파일의 설정값을 확인할 수 있음

 

-g [gid] GROUP :그룹 지정 = 지정될 그룹은 이미 생성되어 있어야 함

-b [path] HOME :홈 디렉터리 지정

-f [num] INACTIVE :임시로 생성한 사용자의 사용 기간을 지정한다

-e [date] EXPIRE :임시 사용자의 사용기간을 제한한다. YYYY-MM-DD(연도-월-날) 방식으로 지정한다.

-s [shell] SHELL :새로운 사용자의 셸을 지정한다.

useradd defaults file

# 기본 그룹은 GID 100 지정

# [기본 정책] USERGROUPS_ENAB=YES

GROUP=100

# 사용자 홈 디렉터리가 생성되는 경로 지정

HOME=/home

# 비활성화 기간 ( -1 : 사용하지 않음 )

INACTIVE=-1

# 계정 만료 일자( ex) 2019-12-31 )

EXPIRE=

# 사용자 SHELL

SHELL=/bin/bash

# 환경설정 파일 경로

SKEL=/etc/skel

# 메일함 생성 여부

# /var/spool/mail

CREATE_MAIL_SPOOL=yes

#>useradd [option ..] [user_name]

-u [uid] UID 지정

-g [group_name] 기본 그룹 지정

-G [group_name] 그룹 추가

-c [comment] Comment 지정

-d [home_path] 홈 디렉터리 경로 지정

-s [shell] SHELL 지정

이것도 설명할게 따로 없긴 하네요 위에 나온 그대로인 명령어이니까요

새로운 ttestt라는 유저를 ming을 기본 그룹으로 지정해서 생성해봅시다

#> useradd -g ming ttestt로 ttestt의 기본 그룹을 ming의 그룹에 속하게 설정하고 생성하였습니다. 방금 배운 su로 방금 만든 ttestt로 돌아와서 #> id라는 명령어를 통해 자신의 UID, GID 등을 확인해 봅시다 그러면 gid=1000(ming)으로 ming 그룹에 소속되어 있는 걸 확인할 수 있습니다.

사용자 수정

#>usermod [option] [user_name]

-u [uid]

-g [group_name]

-G [group_name]

-c [comment]

-d [home_path]

-s [shell]

사용자의 홈 디렉터리 uid, gid, 그룹 이름 등을 수정할 수 있는 usermod 명령어입니다

위에 /etc/default/useradd 파일에 확인하였듯이 useradd 명령어로 신규 유저가 생성되면 HOME=/home 이런 식으로 그 유저의 홈 디렉터리가 생깁니다

/home 디렉터리를 보니 ttestt라는 ttestt의 홈 디렉터리가 보입니다 또

ls -d ~ (-d 경로 정보를 보는 옵션) (~ 은 홈 디렉터리) 명령어로 확인해 봐도

ttestt 유저의 홈 디렉터리가 잡혀있는 것이 보입니다.

이 유저의 홈 디렉터리를 변경해 봅시다

usermod -d로 ttestt 유저의 홈 디렉터리를 /test 파일로 옮긴 후

su 명령어로 ttestt 유저로 접속을 했습니다 ls -d ~로 확인해 보니 홈 디렉터리는 설정해 둔대로 잡아주었는데 어째선지 프롬프트가 bash-4.2 이렇게 깨져서 나옵니다

그건 바로 유저가 생성될 때마다 유저의 홈 디렉터리에 유저의 기본 설정 숨김 파일이 같이 생성되는데 이 파일이 같이 안 딸려왔기 때문입니다

이 파일들 말입니다 ttestt 유저 홈 디렉터리에 있는 ttestt 유저의 정보가 같이 안 딸려왔기 때문에 프롬프트가 깨지고 정보도 잃어버린 것입니다

다시 ttestt 유저의 홈 디렉터리를 원래 자기 집? 인 /home/ttestt로 돌려놨더니 프롬프트가 정상적으로 출력되는 걸 확인할 수 있습니다.

사용자 삭제

#>userdel [option] [user_name]

-r [홈 디렉터리까지 삭제]

뭐 그냥 유저를 삭제하는 명령어입니다 옵션 -r 을 사용 안 하면 해당 사용자의 홈 디렉터는 삭제가 안되니 찌꺼기가 남지 않게 -r 옵션을 같이 사용하여 삭제하도록 합시다

[보안 가이드라인]

--> 동일한 UID 사용 금지

--> root를 제외한 사용자 UID '0' 금지