[리눅스 관리] - 리눅스 우분투 사용자 계정 관리 명령어 사용법

2024. 9. 9. 20:02현대 오토에버 SW 스쿨 - 클라우드/리눅스

SMALL

ubuntu 사용자 관리 

사용자 계정 관련 파일

/etc/passwd

nano 로 확인한 /etc/passwd 내용 일부

  • 사용자 계정 관련 파일
  • 초창기 암호도 저장 but 현재는 /etc/shadow 로 이동하였습니다.
  • 구조 
    • 7개의 항목으로 구성되며 각 항목은 :(콜론)으로 구분합니다. 
    • 로그인 ID:x:UID:GID:설명:홈 디렉터리:로그인 쉘
>> x :: 예전에 비밀번호를 저장하던 영역인데 호환성 문제로 남아있습니다. 
>> UID :: 사용자를 구분하기 위한 번호로 일반적으로 0 ~ 9999 번과 65534번 시스템 사용자로 예약, 일반 사용자는 1000번 부터 사용 가능합니다.
:: root :: 0번
:: demon :: 1번
:: 명령어를 위한 관리 계정 :: 2번

>> GID :: 사용자가 속한 그룹의 ID 로 사용자를 등록할 때 정해짐, 특별한 소속 그룹을 지정하지 않는 경우 로그인 ID 가 그룹으로 등록
:: /etc/group :: 그룹에 대한 정보
:: 설명 :: 사용자의 실제 이름이나 부서명 같은 것을 적을 수 있는 부분입니다.
:: 홈 디렉터리 :: 로그인을 했을 떄 자동으로 로그인 되는 디렉터리의 절대 경로입니다.
:: 로그인 쉘 :: 로그인 했을 때 처음 보여지는 쉘 

본인이 생성한 계정의 UID 는 1000번

/etc/shadow

  • 사용자 암호에 대한 정보를 저장한 파일
  • 구조
    • 9개의 영역으로 구성
    • 형식 :: ID:비밀번호:비밀번호 변경날짜:비밀번호 변경 후 사용해야하는 최소날짜:비밀번호 변경 후 사용해야하는 최대날짜: 경고발생 날짜:비밀번호 유효 마지막날짜:미래를 위한 항목
>> 단방향 암호화를 사용한 비밀번호 
:: 단방향 암호화 :: 암호화 한 내용과 평문을 비교해서 일치여부는 알 수 있지만 암호화된 내용을 이용해서 원래 내용을 만드는 것은 안되는 방식, shadow 파일의 비밀번호는 단방향 암호화된 비밀번호를 저장합니다.

:: 양방향 암호화 :: 암호화 한 내용을 기반으로 원래 내용을 만들 수 있는 방식,  주민번호 저장 방식
:: 시스템 계정은 * 로 작성합니다.
>> 비밀번호 변경 날짜 : 1970년 1월 1일을 기준으로 지나온 날짜 작성
:: 비밀번호 변경 후 사용해야하는 최소날짜, 최대날짜 경고발생 날짜, 유효 마지막 날짜는 자동 설정됩니다.
:: 맥시멈 날짜(99999)로 설정합니다.
>> crontab 을 사용하여 에러 발생 날짜를 확인해서 에러를 발생시킵니다. 

gdm 계정은 시스템 계정으로 * 로 표시 & 새롭게 생서앟ㄴ user1 계정은 단방향 암호화로 저장

/etc/login.defs

  • 로그인과 관련된 기본 설정 파일들
  • 주요 설정 값
>> MAIL_DIR --> /var/main :: 기본 메일 디렉터리
>> PASS_MAX_DAYS --> 99999 :: 비밀번호 최대 사용 기간
>> PASS_MIN_DAYS --> 0 :: 비밀번호 최소 사용 기간
>> PASS_WARN_AGE --> 7 :: 비밀번호 만료전 알림을 주기 위한 날짜, ex) 비밀번호 만료 D-7 => 알림 발송
>> UDI_MIN, UDI_MAX --> 1000 ~ 6000 : 사용자 계정의 UID 범위
>> SYS_UID_MIN, SYS_UDI_MAX --> 100 ~ 699 : 시스템 계정의 UID 범위

>> GID_MIN, GID_MAX --> 1000 ~ 6000 : 사용자 계정의 GID 범위
>> SYS_GID_MIN, SYS_GID_MAX --> 100 ~ 699 : 시스템 계정의 UID 범위

>> DEFAULT_HOME --> yes :: 사용자 홈 디렉터리 생성 여부 
>> UMASK --> 0002 :: umask 값 설정
>> USERGROUPS_ENAB --> yes :: 계정 삭제 시 그룹 삭제 여부
>> ENCRYPT_METHOD --> SHA512 :: 암호화 기법

/etc/login.defs 파일의 내용들

 


/etc/group

  • 그룹의 정보가 저장된 파일
  • 리눅스 :: 사용자는 하나 이상의 그룹에 속해야 합니다. 
  • 기본 그룹은 /etc/passwd 에 작성되어 있고 2차 그룹에 대한 내용/etc/group 에 작성합니다. 

/etc/group 파일 내용 일부


/etc/gshadow

  • 그룹 암호가 저장된 파일
  • UNIX 에는 없는 파일로 LINUX 에만 있습니다. 

계정 관리 명령어

  • 형식 : useradd [옵션] [로그인ID]
  • 옵션
>> u :: UID 지정
>> o :: UID 의 중복 허용
>> g :: GID 지정
>> G :: 2차 그룹 지정
>> d :: 홈 디렉터리 지정
>> s :: 기본 쉘
>> c :: 부가적인 설명
>> D :: 기본값을 설정하거나 출력
>> e :: EXPIRE 항목을 설정
>> f :: 비활성 설정
>> k :: 계정 생성할 때 사용할 초기화 파일을 저장한 디렉터리 설정
>> m :: 홈 디렉터리 생성

유저생성

sudo useradd user1

-- 다른 터미널로 접속 시 비밀번호가 없어서 접근 불가능
-- 사용자 계정 비밀번호 설정
passwd user1 user1

passwd user1 명령어를 이용해 새로운 비밀번호 설정

더보기

-1 :: 1의 2의 보수, 가장 큰 수, 모든 자릿수가 1인 숫자, 무한대의 숫자, 음수는 없다고 보는 경우에만
:: 1을 이진수로 표현 -> 보수 -> +1 -> 모든 자릿수가 1

user1 생성 후 재부팅 시

GROUP=100					-- 그룹 ID
HOME=/home					-- 홈 디렉터리의 생성 위치
INACTIVE=-1					-- 0으로 설정하면 암호가 만료되자마자 바로 계정이 잠김
EXPIRE=2024-12-31				-- 계정 종료일
SHELL=/bin/sh					-- 기본 로그인 쉘을 설정
SKEL=/etc/skel					-- 홈 디렉터리에 복사할 기본 환경 파일의 경로
CREATE_MAIL_SPOOL=no				-- 메일 디렉터리 생성 여부
  • 사용자 계정 시 설정된 옵션은 vi 를 이용해서 /etc/default/user 파일을 수정 가능 but -b, -e, -f, -g, -s 와 같은 옵션을 통해 수정하는 것을 권장합니다. 
-- 옵션을 이용한 사용자 계정 생성
sudo useradd -s /bin/bash -m -d /home/user2 -u 2000 -g 1000 -G 3 user2

-- bash 로그인 쉘을 사용 & 2000번 uid 1000번 gid && 그룹번호 3번 
-- & /home/user2 를 생성 후 홈 디렉터리 갖음


adduser

  • 사용자 계정을 생성하는 명령
  • 생성할 때 옵션 적용 내용이 출력됩니다. 
  • 형식 :: adduser [옵션] 로그인 ID
  • 옵션
>> --uid :: UID 설정하는 옵션
>> --gid :: GID 설정하는 옵션
>> --home :: 홈 디렉터리를 설정하는 옵션
>> --shell :: 사용하는 shell 설정하는 옵션 
>> --gecos :: 설명을 붙여주는 옵션

adduser 를 사용하여 계정을 생성한 경우

  • adduser로 유저를 생성할 때는 /etc/adduser.conf 파일을 기반으로 합니다.
  • useradd 명령으로 test01, test02 생성
로그인 ID 로그인쉘 UID 2차그룹 설명
test01 sh(본 쉘) 2100 3 test01.user
test02 bash 2200 4 test02.
user

 

sudo useradd -m -u 2100 -G 3 -s /bin/sh -c "test01.user" test01

sudo useradd -m -u 2200 -G 4 -s /bin/bash -c "test02.user" test02

-- 비밀번호 설정 없이 계정 생성 (원격 접속 불가)
-- 생성 이 수행되는 기본 작업을 보여주지 않음
  • adduser 명령으로 test03 생성
로그인 ID 로그인쉘 UID 설명
test03 bash 2300 test03.user
sudo adduser --uid 2300 --shell /bin/bash --gecos "test03.user" test03

-- 계정 생성 시 초기 설정 화면 출력 & 비밀번호 설정
-- 생성될 때 수행하는 기본 작업을 보여줌

 


계정 수정

  • 형식 : usermod [옵션] [로그인 ID]
  • 옵션
>> u :: UID 지정
>> o :: UID 의 중복 허용
>> g :: GID 지정
>> G :: 2차 그룹 수정
>> d :: 홈 디렉터리 수정
>> s :: 기본 쉘 수정
>> c :: 부가적인 설명 수정
>> D :: 기본값을 수정
>> e :: EXPIRE 항목을 수정
>> i :: 계정 이름 변경
  • UID 를 수정해서 중복을 허용하게 되면 사용자 아이디가 달라도 동일한 계정으로 로그인 한 것으로 간주 

패스워드 에이징

  • 비밀번호의 유효 기간을 설정하는 것
  • aging -> 시간이 지남(기다린 시간)에 따라 우선순위가 높아지는 것입니다. 
  • 명령
  useradd, usermod, passwd 명령 수정 change 명령으로 수정
MIN passwd -n 날짜 chage -m
MAX passwd -x 날짜 change -M
WARNING passwd -w 날짜 change -W
INACTIVE useradd -f 날짜, usermod -f 날짜 change -I
EXPIRE useradd -e 날짜, usermod -e 날짜 change -E
  • 변경
기존의 값 확인 : sudo cat /etc/shadow | grep user3
변경 : sudo usermod -f 10 -e 2024-12-31 | grep user3
  • 패스워드 에이징 (유효 기간 수정)
항목 MIN(m) MAX(M) WARNING(W) INACTIVE(I) EXPIRE(E)
  4 200 10 5 2024-12-09
-- change 명령으로 수정
sudo chage -m 4 -M 200 -W 10 -I 5 -E 2024-12-09 test01

-- test03 계정의 UID 를 2010으로 계저으이 이름을 test33 으로 수정
-- usermod 명령을 이용, uid를 u 옵션을 사용, 계정의 이름 변경은 l 옵션 사용
sudo usermod -u 2010 -l test33 test03

-- test02 계정 사용자의 홈 디렉터리까지 삭제 
sudo userdel -r test03

usermod 명령을 사용한 사용자 정보 수정

  • Public Cloud 에서 IaaS 서비스로 머신을 제공할 때 계정을 추가할 수 있도록 하는데 이 경우 계정만 추가하도록 해주는 경우도 있고 /home 디렉터리를 만들어주는 경우도 있습니다.

계정 삭제 

  • 형식 : userdel [옵션] [로그인 ID]
  • 옵션
>> -r :: 홈 디렉터리까지 삭제
>> -f  :: 로그인 중이어도 강제 삭제

-r 옵션으로 삭제하지 않으면 홈 디렉터리에 남아있음


그룹 관리 명령

  • 리눅스는 모든 유저가 하나 이상의 그룹에 속하도록 합니다. 
  • 시스템을 사용하는 사용자가 많아지면 업무나 기능에 따라 사용자들을 적절히 나누고 조정하는 기능으로 시스템 관리자가 수행하는 작업입니다.
  • 관련 명령은 groupadd, addgroup, groupmod, groupdel 입니다.

그룹 생성

  • groupadd [옵션] [그룹이름]
>> -g :: 그룹 아이디
>> -o :: 그룹 아이디 중복 허용
>> 옵션 없이 생성하면 마지막에 생성된 그룹 아이디 다음 번호로 그룹 아이디를 설정해서 생성합니다. 
-- 옵션없이 그룹 생성
sudo groupadd gtest01
sudo cat /etc/group | grep gtest01

-- 그룹 아이디 직접 설정 
sudo groupadd -g 3000 gtest02

-- 그룹 아이디 중복 설정 가능
sudo groupadd -g 3000 -o gtest03

  • addgroup 명령 시 --gid 로 지정 후 생성 가능합니다. 
-- addgroup 으로 생성하는 경우
-- 실행 메시지 출력
sudo addgroup -gid 4000 test04

그룹 수정

  • 형식 : groupmod [옵션] [그룹 아이디]
  • 옵션
>> -g :: 그룹 아이디 변경
>> -n :: 그룹 이름 변경 

groupmod 로 수정한 결과 확인


그룹 삭제

  • 형식 : groupdel [옵션] [그룹 아이디]
sudo groupdel gtest04

 


그룹 암호 설정 및 사용

  • 형식 : gpasswd [옵션] [그룹이름]
  • 옵션
>> -a : 사용자 계정을 그룹에 추가
>> -d : 사용자 계정을 그룹에서 삭제
>> -r :  그룹 암호를 삭제
>> 옵션이 없으면 암호 설정
  • 암호를 설정하는 이유 :: 한 명의 유저가 서로 다른 2개 이상의 그룹에 소속된 경우 그룹을 변경하고자 할 떄 사용 
  • newgrp [그룹 이름] :: 소속 그룹 변경 

사용자 정보 관리 명령

UDI와 EUDI

  • UDI (RUID) :: 사용자가 로그인할 떄  사용한 계정의 UID
  • EUID :: 현재 명령을 수행하는 주체의 UID
  • EUID 와 UDI 가 달라지는 경우
>> 실행 파일에 setuid 가 설정된 경우 
>> su 명령을 이용해서 계정을 변경한 경우

 

-- 접속 중인 유저 확인 (EUID)
linux@linux:~$ whoami
linux

-- 로그인 한 유저 확인 (RUID)
linux@linux:~$ who am i
linux    pts/1        2024-09-09 06:16 (192.168.64.1)

linux@linux:~$ who
linux    tty2         2024-09-09 05:02 (tty2)
user2    pts/0        2024-09-09 06:21 (192.168.64.1)
linux    pts/1        2024-09-09 06:16 (192.168.64.1)

linux@linux:~$ id
uid=1000(linux) gid=1000(linux) groups=1000(linux),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd)

linux@linux:~$ w
 08:11:47 up  3:10,  3 users,  load average: 0.05, 0.03, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
linux    tty2     tty2             05:02    3:10m  0.01s  0.01s /usr/libexec/gnome-se
user2    pts/0    192.168.64.1     06:21    1:23m  0.04s  0.04s -bash
linux    pts/1    192.168.64.1     06:16    0.00s  0.54s  0.01s w

-- 소속 그룹 확인
groups [유저아이디]


who 와 w

  • who :: 현재 로그인한 사용자 정보를 출력, 옵션 설정 시 일부 정보 확인 가능
  • w :: 현재 시스템에 로그인한 사용자 정보 외에 사용자가 현재 실행 중인 작업에 대한 정보를 출력, 옵션 사용 시 특정 사용자 이름에 해당하는 작업만 출력 가능
  • last 명령 :: 시스템에 로그인하고 로그아웃 정보를 출력합니다. 

 

권한 수정

  • 다른 계정으로 전환해서 권한을 사용 
  • - su 명령으로 root 계정으로 전환해서 기능 사용
  • root 계정으로 전환해서 권한을 사용하는 것은 위험 -> 시스템 관린 권한을 갖기 때문입니다. 
  • 계정 별로 특정한 작업을 수행할 수 있도록 권한을 부여합니다.  -> 권한은 /etc/sudoers 파일에 설정
  • sudoers 파일은 기본적으로 읽기 전용 -> chmod 로 권한 설정 후 수정 가능합니다.
  • 사용자 계정 호스트=명령어 형태로 설정
  • root ALL = (ALL) ALL
user2 에게 유저를 생성하고 유저를 수정하는 권한을 갖도록 수정 

user2 ALL=/usr/sbin/useradd, /usr/sbin/usermod

/etc/sudoers 파일 수정

  • 관리자 권한을 부여하는 것이 아닌 해당 계정의 권한을 추가 설정해주며 사용 가능합니다.
  • Linux 설정 오류 시 
    :: 처음 로그인 한 유저가 관리자 명령 실행 권한이 없어서 명령을 수행을 못하는 경우 -> 위처럼 sudoers 파일을 수정해
    :: su 를 이용해서 관리자로 로그인 -> usermod -aG sudo 계정으로 계정에 모든 관리자 명령을 수행할 수 있도록 설정하기도 합니다. 

파일 및 디렉터리 소유자와 소유 그룹 변경

  • 파일이나 디렉터리를 생성하면 생성한 사용자의 계정과 그룹이 소유자와 소유 그룹으로 설정함
  • 파일이나 디렉터리의 소유자를 변경할 필요가 있을 때 사용하는 명령
  •  chown :: 파일 소유자를 변경하는 명령어
  • 형식 : chown [옵션] [파일이나 디렉터리 경로]
  • 옵션 :: -r :: 서브 디렉터리까지 적용 -> 깊이가 생겨 성능 문제가 발생할 가능성이 높기에 find 명령과 같은 필터링 명령을 수행하고 실행하는 것이 좋습니다. 
  • chown 명령 :: 스크립트를 이용해서 자동화하는 경우 권한 문제가 발생할 수 있으므로 sudo 를 사용해 필요한 권한을 전부 취득하고 실행하는 것이 좋습니다. 
  •  
chown user2 file1		-- file1의 소유자를 user2 로 변경
chown user2:grp01 file1		-- file1의 소유자를 grp01의 user2로 변경
chown -R user2 file1		-- file1의 소유자를 user2로 변경하는데 하위 디렉터리가 있으면 같이 변경
  • 소유자 변경보다는 권한 변경을 하는 경우가 많음
    :: chgrp :: 파일의 소유 그룹을 변경하는 명령어
mkdir -p ~/linux_ex/autoever/temp		-- 홈 -> linux_ex -> autoever -> temp 디렉터리 생성
cp /etch/hosts/ ~/linux_ex/autoever/temp	-- temp 디렉터리에 /etc/hosts 디렉터리의 모든 내용을 복사
cp /etch/services/ ~/linux_ex/autoever/temp	-- temp 디렉터리에 /etc/services 디렉터리의 모든 내용을 복사

ls -l						-- 소유자와 그룹 확인 (파일을 복사할 때 로그인 중인 유저)

sudo chown owner1 hosts			-- hosts 파일의 소유자를 owner1 으로 변경
suod chown owner1.owner1 services	-- services 파일의 소유자를 owner1 으로 소유 그룹도 owner1 으로 변경
더보기
  • mkdir -p ~/linux_ex/autoever/temp
    :: 웹 서버를 만들어서 파일 업로드 기능을 만드는 경우 // datalake 를 구성하는 경우 => 날짜로 디렉터리 생성 후 데이터 보관 => 2024/09/01 형식으로 계층을 이용해서 디렉터리를 생성
  • Datawarehouse :: 업무에 맞는 데이터들
  • DataLake :: 모든 데이터를 수집하는 것

디스크 사용량 설정

  • 기본적으로 여러 사용자가 한꺼번에 사용하는 시스템
  • 디스크 쿼터 :: 디스크 사용량을 제한하는 기능을 제공하는 것을 말합니다. 
  • 설정 방식
1. 사용자가 사용할 수 있는 파일의 전체 용량을 설정 - 일반적인 public cloud
2. 파일의 개수를 제한
  • 쿼터 설정 시 한계치 설정
1. hard limit :: 절대로 넘어설 수 없는 용량을 설정
2. soft limit :: 일정 시간 동안은 용량을 넘어설 수 있는 방식, 일반적인 cloud 채택 방법

==> 일반적인 cloud 는 파일 전체 용량을 제한하며 soft limit 방식입니다. 

quota

  • 파일 시스템의 마운트 옵션에 쿼터 속성을 설정
usrquota :: 개별 사용자의 쿼터를 제한할 수 있는 속성
grpquota :: 개별 그룹의 쿼터를 제한할 수 있는 속성 
  • 실습
-- home2 디렉터리 생성 후 qtest1 user 생성
sudo mkdir /home2

-- 디렉터리를 생성한 디스크 선택
sudo mount 장치이름 /home2
sudo mount /dev/mapper/ubuntu--vg-ubuntu--lv /home2
/dev/mapper/ubuntu--vg-ubuntu--lv ext4    33G  9.5G   21G  32% /

sudo adduser -m -d /home2/qtest1 qtest1
sudo adduser -m -d /home2/qtest2 qtest2

-- 현재 파일 시스템 확인
df -TH

 

/etc/fstab :: quota 속성 설정하는 파일

  • 형식 :: 파일 시스템이름 디렉터리 경로 파일시스템 종류  defaults.usrquota 1 1
    :: /dev/mapper/ubuntu--vg-ubuntu--lv       /home2  ext4    defaults.usrquota       1 
  • mount :: mount 정보 확인

쿼터 데이터베이스 파일 생성

  • quotacheck :: 쿼터 파일을 생성 및 확인 그리고 수정하기 위해서 파일 시스템을 스캔하는 명령
  • 형식 :: quotacheck [옵션] [파일시스템]
  • 옵션
>> -a :: 전체 파일 시스테믕ㄹ 체크
>> -u :: 사용자 쿼터를 확인
>> -g :: 그룹 쿼터를 확인
>> -m :: 파일 시스템을 리마운트하지 않음
>> -v :: 명령 진행 상황을 상세하게 출력
quotacheck -ugvm /home
-- 2개의 데이터베이스 파일이 생성
>>
aquota.user :: 사용자 쿼터 데이터베이스 파일
aquota.group :: 그룹 쿼터 데이터베이스 파일

 quotaon :: 쿼터 사용 활성화

  • 형식 :: quataon [옵션] [파일 시스템]
  • 옵션
>> -a :: 전체 파일 시스템에 적용
>> -u :: 사용자 쿼터 활성화
>> -g :: 그룹 쿼터를 활성화
>> -v :: 명령 진행 상황을 상세하게 출력
>> 수행 :: sudo quotaon -uv /home2

쿼터 설정 및 확인

  • edquota :: 쿼터 설정 및 확인하는 명령어
  • 형식 :: edquota [옵션] [사용자 계정이나 그룹]
  • 옵션
>> -u :: 사용자 쿼터 설정, 쿼터 편집창 -> soft | hard 로 크기 설정, 주의점은 단위가 KB이며 0값은 무한대 설정을 의미합니다.
>> -g :: 그룹 쿼터 설정
>> -p :: 쿼터 설정을 복사
  • 확인 :: 형식 :: quota [옵션] [사용자 계정 및 그룹]
  • 옵션
>> -u
>> -g
반응형
LIST