개인/리눅스

[리눅스] 사용자 계정 관리 usermod 명령어

OmeGa2 2020. 2. 6. 21:09

사용자 계정 관리

리눅스에서는 useradd 명령으로 새로운 계정을 생성한 뒤 passwd 명령으로 비밀번호를 부여해서 사용한다.. 생성된 계정에는 UID (user identity) 와 GID (group identity) 번호가 자동으로 부여되어 구분할 수 있다.

 

UID 번호가 0번은 root(관리자)계정이 있으며 일반사용자의 계정을 생성할 때 /etc/login.defs 파일에 설정된 값에 따라 UID와 GID 및 파일생성시 자동으로 설정되는 기본 허가권 UMASK 값 등이 주어진다.

 

사용자의 계정에 관련된 명령어 중에서 useradd와 passwd, userdel 등의 명령어는 대부분 널리 알려져 자주 사용되지만 계정을 관리하는 usermod 명령어는 사용할 줄 모르는 사람들이 많다. 그래서 이번에는 usermod 명령어에 대해 알아보려고 한다.

 

 

 

usermod 명령어의 옵션

 

usermod [option] [계정명]

<option>

-d : 사용자의 홈 디렉토리 변경

-m : 홈 디렉토리 변경시 기존의 파일을 옮긴다.

-g : 사용자의 그룹을 변경

-s : 사용자의 쉘 변경

-u : UID값을 변경

-e : 계정 만기일을 변경

-c : 사용자에 대한 간단한 정보 입력

-l : 사용자의 ID 변경

-L : 패스워드 LOCK (로그인불가)

-U : 패스워드의 LOCK 해제

기본적으로 usermod 명령어는 /usr/sbin 디렉터리 안에 있는 명령어root 계정으로만 사용할 수 있다. 이외에 일반사용자 계정으로 사용할 경우 아래 경고메시지가 나오게 된다.

(bash: /usr/sbin/usermod: Permission denied)

 

여러 사용자를 관리하는 관리자는 usermod를 통해 다른 사용자의 데이터가 저장되는 홈디렉토리를 바꾸거나 비밀번호를 LOCK 시켜놓고 로그인하지 못하게 막을 수도 있다. 여러 옵션 중 몇가지만 예시를 들어 사용해보려고 한다.

 

 

사용자의 홈 디렉토리 변경

useradd 명령을 통해 사용자를 생성할 경우 기본적으로 /etc/default/useradd 파일을 참조한다. 이 파일에는 사용자에게 기본적으로 제공되는 설정이 들어있다.

 

/etc/default/useradd 파일의 내용

이 파일에 의하면 계정을 생성할 때 사용자의 홈디렉토리는 /home 안에 위치하게 된다.

 

 

계정을 생성한 뒤 확인

kang 와 other 두 개의 계정을 생성한 뒤 /etc/passwd 파일을 통해 사용자의 목록을 확인해보면 정상적으로 생성된 것을 볼 수 있다. 이후 /home 디렉토리로 이동해서 확인해보면 두 개의 홈 디렉토리가 생성되었다.

 

사용자의 홈 디렉토리는 관리자와 소유자 본인만 접근할 수 있다. kang 계정으로 로그인한 뒤 other 계정의 홈 디렉터리를 들어가려고 하면 권한이 없어 접근할 수 없다고 표시된다. (bash: cd: other: Permission denied)

 

 

이렇게 생성된 홈디렉토리를 usermod 명령으로 옮길 수 있다.

 

usermod -d [바꿀 위치] [계정명]

-d 명령을 사용할 때는 바꾸고싶은 위치의 디렉토리가 생성되어 있어야 한다. 

 

usermod -d [바꾸는 위치] [계정명] 양식대로 작성한 후 사용하면 /etc/passwd 파일을 통해 해당 계정의 홈디렉토리 위치가 바뀐 것을 확인할 수 있다.

(/home/kang → /test/kang)

 

하지만 -d 옵션을 사용할 경우 기존에 사용자가 touch로 만들었던 1,2,3 파일은 새로 바뀐 홈디렉토리로 옮겨지지 않고 그대로 있는것을 확인할 수 있다.

 

만약 사용자가 가지고있던 파일이나 디렉토리 모두 다른 위치로 이동하고 싶을 때는 -d 와 -m 옵션을 함께 사용해야 한다.

 

 

 

usermod -d [바꿀 위치] -m [계정명]

usermod -d [바꿀 위치] -m [계정명] 양식으로 사용할 경우 바꾸는 위치에 디렉토리를 미리 생성할 필요는 없다. (디렉토리 통째로 이동하기 때문)

 

홈디렉토리의 위치가 (/home/kang → /test/kang) 바뀌는것과 동시에 해당 위치에 기존에 생성했떤 파일 1,2,3이 그대로 옮겨진 것을 확인할 수 있다. 이후 /home 디렉토리로 돌아가보면 기존에 있던 kang파일이 사라져있을 것이다.

 

기본적으로 -d 옵션을 사용할 땐 -m과 같이 사용하는 경우가 많다. 기존데이터를 그대로 놔둘 필요가 없기 때문이다.

 

 

]# usermod -d [바꿀 위치] [계정명] = 기존파일 이동X

(바꿀 위치의 디렉토리 미리 생성)

 

]# usermod -d [바꿀 위치] -m [계정명] = 기존파일 이동O

(바꿀 위치의 디렉토리 미리 생성 X)

 

 

 

 

사용자 계정의 그룹 변경

각 사용자가 속한 그룹은 /etc/group 에서 확인할 수 있다.

 

/etc/group 파일

이 파일에서 콜론(:)으로 필드를 구분하며 [그룹명]:[password]:[GID]: 정보가 들어있다. 이는 생성되어있는 모든 그룹을 나타내는 파일로 만약 usermod 명령으로 계정의 그룹을 바꾸더라도 해당 정보는 그대로 유지되며 계정의 GID만 바뀐다.

 

 

uesrmod -g [바꿀 그룹명] [계정명]

새로운 계정을 만들면 보통 새로운 UID와 GID가 부여되며 대체로 동일한 번호로 생성된다. 서버에서 존재하는 그룹은 모두 GID라는 번호를 받아 관리되며 이는 /etc/passwd 에서 확인할 수 있다.

 

기존에는 kang 계정의 UID와 GID가 모두 502로 동일한 것을 볼 수 있다. 이때 usermod -g 명령을 통해 그룹을 other 계정으로 바꾼다면 GID가 other 그룹인 501번 으로 바뀐 것을 볼 수 있다. 

 

GID 번호가 other와 같아졌기 때문에 kang 계정으로 파일의 소유가 other그룹인 파일을 이용할 수 있다.

 

또한 리눅스에는 2차그룹이라는 개념도 가지고있다.

 

usermod -G [바꿀그룹명] [계정명]

2차그룹은 하나의 그룹에 속하면서 다른그룹에 들어갈 수 있는 개념을 말한다. 이는 /etc/group 의 네 번째 필드에서확인할 수 있다.

 

기존에 kang 계정은 other 계정의 그룹에 속하기 때문에 GID가 other계정(501)과 같다.

 

이후 usermod -G 명령을 이용해 test라는 그룹에 2차그룹으로 등록한다면 /etc/group 에서 확인했을 때 test그룹의 네 번째 필드에 kang가 추가된 것을 확인할 수 있다. 하지만 /etc/passwd 에서는 여전히 GID번호가 501번으로 other에 속한다. 

 

따라서 kang 계정은 두 개의 그룹(other / test)에 모두 속하게 된다. 두 그룹이 가지고 있는 파일이나 프로그램을 사용할 수 있게 된 것이다.

 

]# usermod -g [바꿀그룹명] [계정명] = 사용자의 GID 변경

]# usermod -G [바꿀그룹명] [계정명] = 2차그룹에 등록 (GID는 그대로)

 

 

사용자의 ID 와 UID의 개념과 변경하기

사용자의 ID나 UID번호 역시 usermod 명령으로 바꿀 수 있다. 

 

 

usermod -l [바꿀 ID] [계정명]

kang 라는 ID를 가진 계정을 dong 라는 ID로 바꿔보았다. 이때 warning 메시지가 뜨는것은 해당 파일의 소유주가 바뀌었다는 경고문이기 때문에 크게 신경쓰지 않아도 된다.

 

계정이 바뀌면서 기존에 kang가 소유했던 파일의 소유자는 모두 dong로 바뀌게 된다. 하지만 그룹을 확인했을 때는 여전히 kang로 나오는것을 볼 수 있다. 이는 계정은 바뀌었지만 그룹명은 여전히 kang로 존재하기 때문인데, 실제 /etc/group를 확인했을 때 여전히 kang 그룹이 있는것을 볼 수 있다.

 

그룹도 마찬가지로 "groupmod -n [바꿀그룹] [그룹명]" 명령을 통해 바꿔주면 기존에 파일들의 소유자, 그룹소유자 모두 dong로 바뀌는 것을 볼 수 있을 것이다.

 

usermod -l 명령은 UID를 바꾸는 것이 아닌 ID를 바꿀 뿐이다. 파일 또한 UID와 GID를 가지고 있다. 따라서  계정의 ID를 바꾸더라도 실제 UID와 GID는 동일하기 때문에 자동으로 소유주가 해당 UID번호를 가진 ID를 따라가는 것이다.

 

 

 

usermod -u [UID] [계정명]

dong 계정의 UID번호를 2000번으로 바꾸고 확인해보았다. 역시나 정상적으로 UID번호가 바뀐 것을 볼 수 있다.

 

 

파일은 UID 번호를 가진 ID를 따라간다.

dong 계정으로 미리 1,2,3이라는 파일을 만들어두었다. 이후 dong 계정의 UID를 2000으로 바꿔보았다.

 

1,2,3 파일들은 dong 계정의 UID가 502번일 때 만들어 둔 것이다. 이는 계정의 UID가 바뀌더라도 따라오지 않는다.

다시 확인해보면 역시나 파일의 소유주를 나타내는 UID는 여전히 502번이라는것을 볼 수 있다.

 

이후 다시 dong 계정의 UID를 502로 바꾸고 파일을 확인해보니 소유주가 다시 dong계정으로 바뀌었다. 따라서 ID는 해당 UID번호에 이름을 부여하는것 뿐 실제 파일이나 프로그램을 구분하는것은 ID가 아닌 UID라는것을 볼 수 있다.

 

usermod -l [바꿀ID] [계정명] = 계정의 ID변경 (UID는 그대로)

usermod -u [UID번호] [계정명] = 계정의 UID변경 (ID는 그대로)

 

리눅스에서 파일의 소유주는 ID가 아닌 UID를 통해 구분한다.