Post

[Linux] 사용자 관리

[Linux] 사용자 관리

리눅스를 비롯한 다양한 OS들은 사용자 개념을 가지고 있다. 사용자는 각기 다른 용도로 쓰임에 따라 권한의 차이가 있는데, 일반적인 사용자들은 그 차이를 특수한 상황을 맞닥드리지 않는 이상 잘 느끼지 못한다. 하지만 개발자들은 개발을 하다보면 특히 리눅스에서 사용자의 차이를 확연히 느낄 수 있는데, 사용자의 개념이 잘 잡혀있지않은 개발자라면 혼란에 빠지기 쉽다. 그래서 이번 포스팅에선 OS의 사용자 개념에 대해 알아보도록 하자.


사용자 개념


사용자는 말 그대로 해당 PC를 사용하는 사용자를 의미하며, 좀 더 의미를 좁혀 이해하면 PC를 사용하기 위한 계정이다. 우리는 이러한 의미의 사용자를 통해 프로그램을 실행하거나 파일을 수정하는 등 여러가지 작업을 할 수 있으며, 계정을 어떻게 관리하느냐에 따라 보안위협으로부터 보다 안전하게 PC를 사용할 수 있다.

리눅스 사용자 예시

리눅스 사용자 예시


윈도우 사용자 예시

윈도우 사용자 예시


사용자 분류


리눅스의 사용자는 크게 root 사용자와 일반 사용자로 구분한다.

  • root 사용자

    시스템운영에 있어서 모든 권한을 행사하므로 Privileged User 또는 Super User라고도 한다.

  • 일반 사용자

    일반 사용자는 보통 Normal user 또는 Unprivileged user라 부르는데, 시스템에 대해 제한적인 권한을 행사한다.

    일반 사용자는 다음과 같이 한번 더 세부적으로 나뉜다.

    • 로그인이 가능한 사용자
    • 시스템의 필요에 의해 생성된 시스템 계정


사용자(계정) 관리


root는 계정 자체를 슈퍼 유저라 인식하는데, 리눅스 시스템 내부에서는 사용자를 흔히 말하는 ID로 관리하는 것이 아니라 숫자값 형태의 UID(User Identity)로 관리한다. 사용자의 UID는 0번부터 정수값으로 배분되는데, root는 0이 할당되고 0번 사용자를 슈퍼유저로 인식한다. 시스템 계정을 포함하여 일반 사용자는 1번부터 부여되는데, 배포판에 따라 차이가 있다. CentOS 7 버전은 사용자 생성 시에 부여되는 UID의 시작 번호를 1000번부터 할당한다.

root 사용자

리눅스 OS에서 사용자 보안은 관리자 계정인 root를 어떻게 관리하느냐에 따라 크게 좌우된다. 운영 측면에서 보면 다음과 같은 5가지의 주의 사항이 요구된다.

  • root계정 이외에 다른 슈퍼유저 존재여부를 점검. 즉, root 이외에 다른 사용자의 UID가 0인지를 점검한다.
  • PAM을 이용하여 root 계정으로 직접 로그인 시도를 막는다. 특히 텔넷, SSH와 같은 원격 로그인 서비스를 통한 접근은 확실히 통제하도록 한다.
  • 관리자라고 하더라도 일반 계정으로 로그인하도록 하며, root 권한이 필요한 경우에 su 명령의 사용을 유도한다.
  • 환경 변수인 TMOUT를 설정하여 무의미하게 장시간 로그인하는 것을 막는다.
  • 일반 사용자에게 특정 명령어 권한만 할당해줄 경우에는 su보다는 sudo를 이용하도록 한다.

일반 사용자

  • 로그인이 가능한 사용자

    로그인이 가능한 사용자는 우리가 흔히 사용하는 일반적인 계정이다. 일반 계정의 관리에 대해서는 특별히 언급할 것이 없다. 일반 계정을 슈퍼유저로 전환하여 사용하는 방법만 잠깐 짚고가자.

    리눅스에서 사용자 권한은 위에 언급된 것처럼 root라는 아이디를 절대 권한자로 인정하는 것은 아니라, UID 및 GID를 기준으로 한다. 즉, 일반 사용자도 root처럼 UID와 GID를 0으로 바꾼다면 슈퍼유저로 전환된다.예를 들면 test라는 아이디가 존재할 경우 vi 편집기 등을 이용하여 /etc/passwd에서 UID 및 GID를 0으로 변환하면 root와 같은 슈퍼유저가 된다. 로그인할 때 test라는 계정으로 로그인 하면 root와 동일한 권한을 행사할 수 있다. 물론 현 리눅스에서는 UID가 0이면 셸 프롬프트에서 무조건 root로 표시되기 때문에, 프롬프트는 test 대신에 root로 표시된다.

  • 시스템의 필요에 의해 생성된 시스템 계정

    리눅스 사용자 계정의 정보는 /etc/passwd 파일에 기록되는데, 이 파일에 등록된 계정을 보면 root 이외에 bin, daemon, adm, game 등 관리자가 생성하지 않는 계정들이 존재한다. 이러한 계정을 시스템 계정이라고 하는데, 말 그대로 시스템의 필요에 의해 생성된 계정이다. 리눅스는 유닉스의 영향을 받아 파일 생성할 때나 프로세스 생성 시에 반드시 소유자를 명시하도록 되어 있고, 해당 소유자의 권한을 승계하는 형태로 운영된다. 즉, root가 만든 파일이면 root 권한이고, root가 실행한 프로세스는 root권한이 부여된다고 볼 수 있다. 시스템 계정이 없다면 모든 파일 생성과 프로세스 생성 시에 root 권한이 부여되어야 한다.


관련 명령어

사용자 계정 생성

계정이란 시스템에 ID와 암호를 생성하여 사용권을 부여하는 것을 말한다. 이 때 사용자의 ID를 생성하는 명령이 useradd다. root 권한자가 root 이외의 사용자를 생성할 때 사용하는 명령어로 adduser라고 입력해도 된다.

  • 사용법
    • useradd [option] 사용자계정이름
  • 주요 옵션
    • -p

      사용자의 암호를 추가 시에 지정할 수 있다. 현재 리눅스에서는 암호화된 값을 사용하므로 암호화된 값으로 지정해야 한다.
      ­--password

    • -d

      홈 디렉토리를 지정할 때 쓰인다. 최종 디렉토리만 생성하므로 중간 경로가 있는 경우에는 미리 생성해야 한다.
      ­--home-dir

    • -g

      그룹을 지정할 때 사용하는데, 지정할 그룹이 미리 생성되어 있어야 한다. 이 옵션을 지정하지 않으면 레드햇 계열에서는 아이디와 동일한 그룹에 포함시키고, 다른 배포판에서는 users에 포함시킨다.
      --gid

    • -G

      기본 그룹 이외에 추가로 그룹에 속하게 할 경우에 쓴다.
      --groups

    • -c

      사용자 생성 시 사용자에 대한 설명을 설정한다.
      --comment

    • -s

      사용자 생성 시 사용자가 이용할 셸을 지정한다.
      --shell

    • -D

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

    • -m

      사용자를 생성할 때 홈 디렉토리를 생성해주는 옵션으로 레드햇 리눅스는 이 옵션을 사용하지 않아도 홈 디렉토리가 생성되지만 다른 배포판에서는 생성되지 않으므로 이 옵션을 지정해야 한다. 보통 -k 옵션과 같이 사용하여 사용자 생성 시 기본적으로 부여되는 목록이 들어있는 skeldir을 지정할 때 사용한다.
      --create-home

    • -k

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

    • -f

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

    • -e

      계정의 만기일을 YYYY-MM-DD 형식으로 지정한다. --expiredate

    • -u

      사용자 추가 시에 UID값을 지정한다. --uid

    • -h

      useradd 명령어의 사용법 및 주요 옵션을 화면에 출력한다. --help

  • 사용 예
1
2
# test라는 계정을 생성한다.
useradd test
1
2
3
4
# test라는 사용자를 생성하면서 홈 디렉토리의 경로 및 그룹을 지정한다.
# 물론 해당 디렉토리 (/home/practice)와 해당 그룹(practice)은 
# 미리 생성되어 있어야 한다.
useradd test -d /home/practice/test -g practice
1
2
3
# 사용자 생성 시 기본적으로 적용되는 정보를 확인한다. 해당 정보 
# 파일은 /etc/default/useradd 이다.
useradd -D

사용자 암호 부여

등록된 사용자의 암호를 지정하거나 변경하는 명령어이다. 리눅스에서는 useradd로 계정을 생성한 후에 암호를 지정하지 않으면 로그인이 되지 않으므로 반드시 지정해야 한다.
passwd만 입력하면 현재 로그인 사용자의 암호가 변경되고, root만 다른 사용자의 암호를 변경할 수 있다.

  • 사용법
    • passwd [사용자명]
  • 사용 예
1
2
# 현재 로그인한 test 사용자 본인의 암호를 변경한다.
passwd
1
2
# user1이라는 사용자의 암호를 변경한다.
passwd user1

«««< HEAD

사용자 전환

su(substitute user)는 대리 유저라는 뜻의 약어로 시스템에 로그인되어 있는 상태에서 다른 사용자의 권한으로 셸을 실행할 수 있도록 전환하는 명령이다. 대부분의 리눅스 배포판에서는 텔넷과 같이 원격에서 접속할 때 직접 root 계정으로 로그인이 불가능하도록 설정되어 있다. 따라서 관리자라고 하더라도 일반 사용자로 로그인한 뒤에 root로 전환해야 하는데, 이 때 필요한 명령이 su이다.

  • 사용법
    • su [option] [사용자명]

      사용자명을 입력하지 않으면 root로 사용자 전환을 한다. 사용자 전환 시 해당 사용자의 패스워드를 알아야 하며, root에서 다른 사용자로 전환 시에는 패스워드를 묻지 않는다. 또한 su를 이용해 다른 사용자로 전환한 후에 원래 사용자로 돌아가려면 exit를 입력하면 된다.

  • 주요 옵션
    • -, -l

      su 명령을 옵션 없이 실행하면 로그인한 사용자의 환경 변수 값을 가지고 다른 사람의 권한만 갖는다. 전환하려는 사용자가 실제 로그인한 것처럼 셸을 이용하려면 반드시 이 옵션을 지정해야 한다. 특히, root로 전환하는 경우 root 권한의 셸을 이용하기 위해서는 반드시 필요하다. --login

    • -c

      사용자를 전환하지 않고 다른 사용자의 권한으로 명령을 일시적으로 수행할 때 사용한다. --command

  • 사용 예
1
2
3
4
# root 사용자로 사용자를 전환한다. root로 권한자만 바꾸지만 환경 
# 변수 등은 기존 사용자인 test의 환경으로 적용되어 실제 root 권한
# 을 수행하기에는 제약이 따른다.
su
1
2
3
# root 사용자로 전환한다. 실제 root로 로그인한 것처럼 권한, 환경 
# 변수 등 모든 환경이 root의 상태가 된다.
su - 
1
2
3
# 사용자를 전환하지 않고 일회적으로 명령을 내릴 때 -c 옵션을 
# 사용한다.
su root -c "tail /etc/shadow"
1
2
3
# test 사용자로 전환한다. root인 경우에는 다른 사용자로 전환 시
# 패스워드를 묻지 않는다.
su - test

읽어주셔서 감사합니다. 😊

Reference
CentOS7으로 리눅스 마스터 1급 정복하기 - 정성재

This post is licensed under CC BY 4.0 by the author.