[네이버클라우드] AIaaS 개발자 과정/Linux

[네이버클라우드캠프] 2023.4.28 Linux(2) - 사용자 관리, 소유권과 허가권

_꼬마돌 2023. 4. 30. 22:59
반응형
정리, 기록은 덜 멍청한 내가
바보가 될 미래의 나에게 보내는 메시지다.
-양주종 강사님-

사용자 관리

계정

System을 사용할 수 있는 권한.
System에서 일정공간을 할당 받아 계정이 허락하는 권한을 행사할 수 있다.

 

사용자 관련 파일

  /etc/passwd   사용자 계정에 대한 정보를 담고 있는 파일.
  각 사용자 계정의 암호화된 비밀번호, UID, GID, shell 경로 등 종합적인 정보를 담고있음
  /etc/group   사용자 그룹 정보를 저장하는 파일.
  각 그룹의 이름, 그룹 ID(GID), 해당 그룹의 멤버 리스트 등을 포함.
  /etc/login.defs   시스템 로그인 시 기본적으로 적용되는 설정 파일. 
  계정생성에 관련된 설정 항목, 패스워드 정책, 로그인 실패 횟수 제한 등 다양한 설정 변경가능
  (패스워드 최소 길이, 만료일 등)
  /etc/default/useradd   useradd 명령어로 새로운 사용자 계정을 생성할 때, 기본값으로 사용되는 설정을 저장하는 파
  일. 이 파일을 수정하여, 새로운 사용자 계정이 생성될 때 기본값을 변경할 수 있음.
  /etc/shadow   리눅스 계정의 비밀번호를 저장하는 파일.
  root 권한으로만 읽을 수 있음. 
  각 계정의 암호화된 비밀번호, 마지막 암호 변경 날짜, 유효기간, 계정 잠금 여부 등이 기록됨.
                          alias ul='nl /etc/passwd'  => /etc/passwd 파일의 내용을 출력하면서 행번호를 붙여주는 alias 설정

 

# 계정에 대한 종합정보
root@kwc:/boot# tail -5 /etc/passwd
fwupd-refresh:x:112:118:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
usbmux:x:113:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
j:x:1000:1000:j:/home/j:/bin/bash
lxd:x:999:100::/var/snap/lxd/common/lxd:/bin/false
blue:x:1001:1001:홍길동,501,111111,222222,333333:/home/blue:/bin/bash

# 사용자 그룹 정보를 저장하는 파일
root@kwc:/boot# tail -5 /etc/group
tss:x:116:
landscape:x:117:
fwupd-refresh:x:118:
j:x:1000:
blue:x:1001:

# /etc/shadow   비밀번호가 암호화 되어있다.
root@kwc:/boot# tail -5 /etc/shadow
fwupd-refresh:*:19405:0:99999:7:::
usbmux:*:19474:0:99999:7:::
j:$6$Iln22Z8eXMvaHvRb$7GK1/6vi5qcxf8bQuWn8ukCq9v2Pi9UEEN7Pd4gEONKjc58ssTTxxa.dhxUU4TafF.2oFkluQg4tGvI/dJQDq/:19474:0:99999:7:::
lxd:!:19474::::::
blue:$y$j9T$rOJG/mN/ZdDAPefyhX/Rm/$OB0GdK0xx4r1jbIQyr49kyUBhW5mSN07OGEwzTx75R.:19477:0:99999:7:::

 

계정 정보 각 항목의 의미

blue x 1001 1001 홍길동,501... /home/blue /bin/bash
계정명 비밀번호 UID GID 사용자 정보 계정의 홈
디렉터리
로그인 쉘
blue:x:1001:1001:홍길동,501,111111,222222,333333:/home/blue:/bin/bash

 

# useradd 명령어로 사용자 계정 생성하기
root@kwc:/boot# useradd red                     # red 라는 사용자 계정 생성
root@kwc:/boot# passwd red                      # pw 생성
New password:
Retype new password:
passwd: password updated successfully

# 사용자 계정에 정보 입력/변경
root@kwc:~# chfn red
Changing the user information for red
Enter the new value, or press ENTER for the default
        Full Name []: 김레드
        Room Number []: 501
        Work Phone []: 1234
        Home Phone []: 2345
        Other []: 0000


# adduser 명령어로 사용자 계정 생성하기
root@kwc:/boot# adduser white                            #white 라는 사용자 계정 생성
Adding user `white' ...          
Adding new group `white' (1004) ...
Adding new user `white' (1004) with group `white' ...
Creating home directory `/home/white' ...
Copying files from `/etc/skel' ...
# 해당 계정의 그룹, 홈디렉터리가 자동으로 생성되고 /etc/skel 디렉터리를 자동으로 복사한다.
New password:                        
Retype new password:            # passwd 명령어를 입력하지 않아도 pw를 생성하라는 문구가 나온다.
passwd: password updated successfully
Changing the user information for white
Enter the new value, or press ENTER for the default
        Full Name []: 김화이트
        Room Number []: 501
        Work Phone []: 1234
        Home Phone []: 5678
        Other []: 0000          # 해당 사용자의 정보를 입력할 수 있다.
chfn: name with non-ASCII characters: '김화이트'
Is the information correct? [Y/n] y

# 사용자 삭제 (로그인 되어있는 경우 삭제 불가)
root@kwc:~# userdel -r red
userdel: red mail spool (/var/mail/red) not found
root@kwc:~# finger red         # 정상적으로 삭제됐다.
finger: red: no such user.
/etc/skel 
새로운 사용자가 생성될 때, 기본적으로 해당 사용자의 홈 디렉터리에 복사되는 파일들이 저장되는 디렉터리.
/etc/skel 디렉터리에 저장된 파일들은 기본적으로 '.bashrc', '.bash_logout', '.profile', '.inputrc' 와 같은 리눅스 shell 환경과 관련된 파일들이 포함된다. 
/etc/skel 디렉터리에 넣어둔 파일들은 새로운 계정이 생성될 때 자동으로 해당 계정의 홈 디렉터리에 복사됨.

 

 

사용자 관리

root@kwc:~# useradd -root
Usage: useradd [options] LOGIN
       useradd -D
       useradd -D [options]

Options:                        # root 사용자가 사용할 수 있는 useradd 옵션
      --badnames                do not check for bad names
  -b, --base-dir BASE_DIR       base directory for the home directory of the
                                new account
      --btrfs-subvolume-home    use BTRFS subvolume for home directory
  -c, --comment COMMENT         GECOS field of the new account
  -d, --home-dir HOME_DIR       home directory of the new account
  -D, --defaults                print or change default useradd configuration
  -e, --expiredate EXPIRE_DATE  expiration date of the new account
  -f, --inactive INACTIVE       password inactivity period of the new account
  -g, --gid GROUP               name or ID of the primary group of the new
                                account
  -G, --groups GROUPS           list of supplementary groups of the new
                                account
  -h, --help                    display this help message and exit
  -k, --skel SKEL_DIR           use this alternative skeleton directory
  -K, --key KEY=VALUE           override /etc/login.defs defaults
  -l, --no-log-init             do not add the user to the lastlog and
                                faillog databases
  -m, --create-home             create the user's home directory
  -M, --no-create-home          do not create the user's home directory
  -N, --no-user-group           do not create a group with the same name as
                                the user
  -o, --non-unique              allow to create users with duplicate
                                (non-unique) UID
  -p, --password PASSWORD       encrypted password of the new account
  -r, --system                  create a system account
  -R, --root CHROOT_DIR         directory to chroot into
  -P, --prefix PREFIX_DIR       prefix directory where are located the /etc/* files
  -s, --shell SHELL             login shell of the new account
  -u, --uid UID                 user ID of the new account
  -U, --user-group              create a group with the same name as the user
  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user mapping
      --extrausers              Use the extra users database
root@kwc:~# useradd -D          # useradd 명령어의 기본값 보기
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash                 
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no


# vi /etc/default/useradd    # 파일을 vi 편집기에서 수정하여 useradd 명령어의 기본값을 변경할 수 있다.
root@kwc:~# nl /etc/default/useradd    
     1  # Default values for useradd(8)
     2  #
     3  # The SHELL variable specifies the default login shell on your
     4  # system.
     5  # Similar to DSHELL in adduser. However, we use "sh" here because
     6  # useradd is a low level utility and should be as general
     7  # as possible
     8  SHELL=/bin/bash    # 원래 디폴트값은 bin/sh이다. bash로 변경.
     9  #
    10  # The default group for users
    11  # 100=users on Debian systems
    12  # Same as USERS_GID in adduser
    13  # This argument is used when the -n flag is specified.
    14  # The default behavior (when -n and -g are not specified) is to create a
    15  # primary user group with the same name as the user being added to the
    16  # system.
    17  # GROUP=100
    18  #
    19  # The default home directory. Same as DHOME for adduser
    20  # HOME=/home
    21  #
    22  # The number of days after a password expires until the account
    23  # is permanently disabled
    24  # INACTIVE=-1
    25  #
    26  # The default expire date
    27  # EXPIRE=
    28  #
    29  # The SKEL variable specifies the directory containing "skeletal" user
    30  # files; in other words, files such as a sample .profile that will be
    31  # copied to the new user's home directory when it is created.
    32  # SKEL=/etc/skel
    33  #
    34  # Defines whether the mail spool should be created while
    35  # creating the account
    36  # CREATE_MAIL_SPOOL=yes

# 아래 내용들을 넣어준다. 
    37  GROUP=100
    38  HOME=/home
    39  INACTIVE=-1
    40  EXPIRE=
    41  SKEL=/etc/skel
    42  CREATE_MAIL_SPOOL=no

 

# 사용자 정보 보기
root@kwc:~# finger white
Login: white                            Name: ▒M-^@▒M-^YM-^T▒M-^]▒▒M-^J▒   # 한글이라 깨진다.
Directory: /home/white                  Shell: /bin/bash
Office: 501, x1234                      Home Phone: x5678
Never logged in.
No mail.
No Plan.

 

# 특정 사용자 로그인 금지
root@kwc10:01:19:~# usermod -L white
root@kwc10:01:26:~# finger white
Login: white                            Name: ▒M-^@▒M-^YM-^T▒M-^]▒▒M-^J▒
Directory: /home/white                  Shell: /bin/bash
Office: 501, x1234                      Home Phone: x5678
Last login Mon May  1 09:04 (KST) on pts/3 from 10.0.2.2
No mail.
No Plan.

login as: white
white@127.0.0.1's password:
Access denied
white@127.0.0.1's password:
# white 계정의 접속이 거절된다.

# 로그인 금지 시킨 계정 다시 로그인 허용
root@kwc10:01:35:~# usermod -U white

login as: white
white@127.0.0.1's password:
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-71-generic x86_64)
# 다시 정상적으로 로그인이 된다.

 

사용자 용량제한

 

유예기간 설정 (사용자나 그룹이 할당량을 초과하더라도 엑세스가 거부되지 않는 기간)

root@kwc:~# edquota -t

유예기간을 설정하는 화면. vi편집기와는 다른 nano 편집기가 나온다.

 

용량제한

root@kwc:~# edquota -u white        # white 계정에 대한 용량제한

white 계정의 용량제한 설정 창
soft는 20000, hard는 25000으로 제한했다. 저장하고 나가기는 ^O, ^X

# 사용자와 그룹의 디스크 할당량 정보를 표시하는 명령어.

root@kwc:~# repquota -a
*** Report for user quotas on device /dev/sda5
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      24       0       0              3     0     0
white     --      44   20000   25000             12     0     0        -> 설정됨
name      --      44       0       0             12     0     0

# white의 디스크 할당량이 설정된 것을 볼 수 있다.
# ---white 계정으로 새로운 터미널에 로그인---
[white@kwc ~]$ quota
Disk quotas for user white (uid 1013):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda5      44   20000   25000              12       0       0      

# 디스크 용량 제한이 걸려있는 것을 볼 수 있다. 

[white@kwc ~]$ cp -r /var .
cp: '/var/cache/apparmor/e10c1cf9.0'에 접근할 수 없음: 허가 거부
cp: '/var/cache/apparmor/c47eabf7.0'에 접근할 수 없음: 허가 거부
cp: './var/cache/apt/srcpkgcache.bin' 쓰는 중 오류: 디스크 할당량이 초과됨
cp: './var/cache/apt/pkgcache.bin' 쓰는 중 오류: 디스크 할당량이 초과됨
cp: './var/cache/apt/archives' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/cache/debconf' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/cache/ldconfig' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/cache/man' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/cache/pollinate' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/cache/private' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/cache/snapd' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/cache/apache2' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/cache/fontconfig' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/cache/tomcat9' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/crash' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/lib' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/local' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/log' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/mail' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/opt' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/snap' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/spool' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/tmp' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨
cp: './var/www' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨

[white@kwc ~]$ mkdir ddd
mkdir: `ddd' 디렉터리를 만들 수 없습니다: 디스크 할당량이 초과됨

# 디스크 할당량이 초과되어 디렉터리가 생성되지 않는다.

[white@kwc ~]$ quota
Disk quotas for user white (uid 1013):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda5   25000*  20000   25000   6days      39       0       0      
      
# 할당된 용량이 가득 찬 것을 볼 수 있다.

 

용량 설정 복사

root@kwc:~# edquota -u k10      # k 10 계정의 할당 용량 확인
Disk quotas for user k10 (uid 1011):
  Filesystem                   blocks       soft       hard     inodes     
  /dev/sda5                        60          0          0         12      
k10 계정의 soft, hard 용량 할당량은 0으로 되어있다. 
이전에 white 계정의 용량 할당량을 그대로 복사해보자.

root@kwc12:10:17:~# edquota -p white k10       # white 계정의 용량 할당량을 k10 계정으로 복사
root@kwc12:11:54:~# repquota -a                # 용량 확인
*** Report for user quotas on device /dev/sda5
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      24       0       0              3     0     0
j         --      40       0       0             13     0     0
k9        --      44       0       0             12     0     0
k10       --      60   20000   25000             12     0     0
white     +-   25000   20000   25000  6days      39     0     0
# 용량 할당량 설정이 복사된 것을 볼 수 있다.
소프트 제한 (soft limit): 사용자나 그룹이 할당된 디스크 공간의 양이 제한된 값을 초과하면 경고 메시지를 표시하지만, 엑세스는 계속 허용된다. 즉, 소프트 제한은 일종의 경고 기능으로서, 사용자나 그룹이 일시적으로 할당량을 초과할 수 있도록 허용한다.

하드 제한 (hard limit): 사용자나 그룹이 할당된 디스크 공간의 양이 제한된 값을 초과하면 엑세스가 차단된다. 하드 제한은 실제로 사용자나 그룹이 사용 가능한 디스크 공간의 최대치를 제한하는 역할을 한다.

소유권과 허가권

drwxr-xr-x    9      root     root     4096   4월 28 16:00    d5/
   권한     링크수  소유자   소유그룹  size      접근날짜    파일명
root@kwc:~# l   # alias l='ls -AlF' 파일 및 디렉토리 목록 출력
합계 164
-rwxr-xr-x 1 root root 15960  4월 28 09:35 a*    # a*파일이 현재 root의 소유로 되어있다.
-rw-r--r-- 1 root root    85  4월 28 09:35 a.c
-rw-r--r-- 1 root root    40  4월 28 11:28 a2



root@kwc:~# chown sam a*        # a*파일의 소유권을 sam 계정으로 변경
root@kwc:~# l                   # a* : a로 시작하는 모든 파일
합계 164
-rwxr-xr-x 1 sam  root 15960  4월 28 09:35 a*     # 변해있는 것을 볼 수 있다.
-rw-r--r-- 1 sam  root    85  4월 28 09:35 a.c
-rw-r--r-- 1 sam  root    40  4월 28 11:28 a2
그룹 소유권 변경 
root@kwc14:16:16:~# ll     # alias ll='ls -alF'

합계 172
-rwxr-xr-x  1 sam  root 15960  4월 28 09:35 a*
-rw-r--r--  1 sam  root    85  4월 28 09:35 a.c
-rw-r--r--  1 sam  root    40  4월 28 11:28 a2
-rwxr-xr-x  1 sam  root    16  5월  1 11:10 a2.sh*
drwxr-xr-x  9 root root  4096  4월 28 16:00 d5/
drwxr-xr-x  2 root root 69632  5월  1 11:43 d6/          # d6의 그룹 소유권이 root로 되어있다.

root@kwc:~# chgrp STAR d6      # d6에 대한 그룹 소유권을 STAR 그룹으로 변경
root@kwc14:16:50:~# ll
합계 172
-rwxr-xr-x  1 sam  root 15960  4월 28 09:35 a*
-rw-r--r--  1 sam  root    85  4월 28 09:35 a.c
-rw-r--r--  1 sam  root    40  4월 28 11:28 a2
-rwxr-xr-x  1 sam  root    16  5월  1 11:10 a2.sh*
drwxr-xr-x  9 root root  4096  4월 28 16:00 d5/
drwxr-xr-x  2 root STAR 69632  5월  1 11:43 d6/        # 그룹 소유권이 STAR그룹으로 변경된 것을 볼 수 있다.

 

Umask

umask란 사용자가 파일 생성시 자동으로 권한을 조정해 주는 값을 말한다.
현재 umask 값 보기
umask -S

root@kwc:~# umask -S
u=rwx,g=rx,o=rx
# umask default 값
root 0022
user 0002

# root에서 directory를 만들 때
전체권한 : 7 7 7
umask    : 0 2 2
    -    
    =      7 5 5
    
# root 에서 file을 만들 때
directory : 7 5 5
umask     : 1 1 1
    -
    =       6 4 4

# 권한 값 읽는 법
r = 2^2 = 4
w = 2^1 = 2
x = 2^0 = 1

# 3자리씩 끊어서 읽음
- r---wx-w- 1 root root  184 Apr 28 05:17 a1*
  4   3  2
- --xrwxr-- 1 root root   32 Apr 28 05:17 a2*
   1  7  4 
d --x-w--wx 2 root root 4096 Apr 28 05:17 d1/
   1  3  3 
d rw-r-xr-- 2 root root 4096 Apr 28 05:17 d2/
   6  5  4

# 처음 -는 file.
# 실행file에는 *이 붙는다. x 권한이 하나라도 붙어있으면 *이 붙는다.
# 처음 d는 directory. directory는 맨 뒤에 /가 붙음.

# 디렉토리에서의 x는 들어갈 수 있는 권한
# 디렉토리에서의 r은 읽기 권한
# 디렉토리에서의 w은 만들고, 지우고 수정하는 권한

# 앞의 3개의 권한은 owner주인을 의미함
# 그 다음 3개는 그룹을 의미
# 주인도 아니고 그룹도 아니면 other을 의미

Sticky bit

리눅스 파일 시스템에서 사용되는 파일 권한(permission) 중 하나로, 디렉토리에 대해서만 적용된다. 
Sticky bit가 설정된 디렉토리에는 일반적으로 모든 사용자가 파일을 생성하고 삭제할 수 있다. 
그러나 Sticky bit가 설정된 디렉토리에서 다른 사용자가 생성한 파일은 파일 소유자나 root 계정만이 삭제할 수 있다.

예를 들어, /tmp 디렉토리는 sticky bit가 설정되어 있다. 이 디렉토리에 파일을 생성하는 경우, 해당 파일은 생성한 사용자가 소유권을 가지게 된다. 그러나, 다른 사용자가 생성한 파일은 삭제할 수 없다. 이는 /tmp 디렉터리가 여러 사용자가 공유하는 디렉터리이기 때문에, 다른 사용자의 파일을 실수로 삭제하지 않기 위해서이다.

sticky bit가 설정되면 권한 값에 s, t 와 같은 알파벳이 포함된다.


 

반응형