Skip to content

Linux:User

리눅스 사용자 관리 방법에 대하여 정리한다.

사용자간 통신

아래와 같은 명령어로 사용자간 통신을 할 수 있다.

  • write: 로그인한 다른 사용장에게 메시지를 전송할 수 있다.
  • wall
  • mesg
  • mail
  • biff
  • who - 현재 접속한 사용자들의 정보.
  • w - 현재 접속한 사용자들의 상세 정보.

사용자 생성

  • adduser: 대화형 작업으로 사용자 홈 디렉터리, 사용자 그룹 비밀번호를 처리할 수 있음. (기본 계정정보를 함께 생성)
  • useradd: 명령어 실행 시 사용자 환경을 옵션으로 지정해야됨. (계정만 생성하며 기타 다른 정보를 수동으로 생성 및 설정 해야 한다)

사용자 비밀번호 생성

  • passwd: 자신의 비밀번호를 관리할 수 있음.

사용자 삭제

  • deluser: 대화형으로 삭제 가능
  • userdel: 명령실행 시 옵션으로 처리해야됩

사용자 정보 변경

  • chfn: 대화식 사용자 정보 변경
  • chsh: 대화식으로 사용자 쉘 변경
  • usermod: 비 대화식 변경

사용자/그룹 확인

  • cat /etc/passwd: 사용자 목록 확인.
  • cat /etc/group:그룹 목록 확인.

사용자의 그룹 수정

  • gpasswd -a [USERNAME] [GROUPNAME]: 특정 사용자를 그룹에 추가.
  • gpasswd -d [USERNAME] [GROUPNAME]: 특정 사용자를 그룹에서 제거.

그룹 생성

  • addgroup: 대화형으로 생성
  • groupadd: 비대화형 다양한 옵션으로 작업 가능

그룹 변경

그 밖의 그룹관련 명령

그룹 삭제

  • delgroup: 대화형으로 그룹 삭제
  • groupdel: 비대화형 그룹 삭제

사용자 이름 변경 방법

사용자명을 변경하고 싶다면 해당 사용자가 실행중인 모든 프로세스를 종료해야 한다. 그후, 관리자로 로그인한다.

sudo usermod -l newUsername oldUsername

ubuntu 등 일부 linux 배포본은 사용자명과 동일한 그룹명을 사용한다. 이 그룹명도 변경한다:

sudo groupmod -n newUsername oldUsername

마지막으로 사용자명과 동일한 홈 디렉토리의 경로도 바꿔준다.

sudo usermod -d /home/newHomeDir -m newUsername

Example Script

사용자가 존재하는지 확인하고 없다면 추가한다.

function install_user
{
    local username=$1
    local homedir=$2

    local exists_user
    exists_user=$(awk -F: '{print $1}' /etc/passwd | grep "$username")

    if [[ -n $exists_user ]]; then
        echo "Exists '$username' user"
    else
        echo "Create '$username' user"
        useradd -l -M -N -d "$homedir" -s /bin/bash "$username"
    fi
}

그룹이 존재하는지 확인하고 없다면 추가한다.

function install_group
{
    local username=$1
    local groupname=$1

    local exists_group
    exists_group=$(awk -F: '{print $1}' /etc/group | grep "$groupname")

    if [[ -n $exists_group ]]; then
        echo "Exists '$groupname' group"
    else
        echo "Create '$groupname' group"
        groupadd "$groupname"
        gpasswd -a "$username" "$groupname"
        usermod -aG docker "$username"
    fi
}

리눅스 패스워드 & 섀도우 파일 형식

Shadow

root:$6$5H0QpwprRiJQR19Y$bXGOh7dIfOWpUb/Tuqr7yQVCqL3UkrJns9.7msfvMg4ZO/PsFC5Tbt32PXAw9qRFEBs1254aLimFeNM8YsYOv. : 16431 : 0 : 99999 : 7 : : :
|-1–|———————————–2——————————————————————————————————————————————-|—3—|-4-|—5–|-6-|-7-|-8-|
  1. Login Name : 사용자 계정각 항목별 구분은 :(콜론) 으로 구분되어있으며 콜론과 콜론 사이 각 필드에는 다음과 같은 구조로 구성되어 있습니다.
  2. Encrypted : 패스워드를 암호화시킨 값
  3. Last Changed : 1970년부터 1월 1일부터 패스워드가 수정된 날짜의 일수를 계산
  4. Minimum : 패스워드가 변경되기 전 최소사용기간(일수)
  5. Maximum : 패스워드 변경 전 최대사용기간(일수)
  6. Warn : 패스워드 사용 만기일 전에 경고 메시지를 제공하는 일수
  7. Inactive : 로그인 접속차단 일 수
  8. Expire : 로그인 사용을 금지하는 일 수 (월/일/연도)
  9. Reserved : 사용되지 않음

여기서 2번 항목 앞쪽 부분을 잘 보시면 $ 로 구분이 지어져 있습니다. 이 구분은 다음과 같은 값이 적용됩니다.

[$Hashid $Salt $Hash vlaue]
  • Hashid: 어떤 scheme 를 이용해 hash 를 했는지 보여줍니다. 어떤 scheme를 사용했느냐에 따라 id 값이 달라지며 주로 많이 사용되는것은 $1, $5, $6 입니다.
  • Salt: 해시는 단 방향 함수 입니다. 다시 말하면, A->B는 가능하지만 B->A는 불가능하다는 뜻입니다.
  • Hash value: hash value는 hashid에 따른 해시방법과 salt값을 가지고 hash function을 수행한 결과입니다.

Passwd

root:x:0:0:root:/root:/bin/bash
  1. 사용자명
  2. 패스워드(/etc/shadow 파일에 암호화되어 있음)
  3. 사용자 계정 uid
  4. 사용자 계정 gid
  5. 사용자 계정 이름(정보)
  6. 사용자 계정 홈 디렉토리
  7. 사용자 계정 로그인 쉘

Group

See also

Favorite site