LA FORET ROUGE

리눅스 사용자와 그룹

⏱ 5m | Categories: OS | Tags: LINUX , OS

리눅스는 다중 사용자 시스템입니다. 1대의 리눅스에 여러 명의 사용자가 동시 접속해서 사용 가능하다는 뜻입니다.

리눅스는 다중 사용자 시스템입니다. 1대의 리눅스에 여러 명의 사용자가 동시 접속해서 사용 가능하다는 뜻입니다.

기본적으로는 root라는 슈퍼 유저가 있습니다. root 유저는 모든 작업을 실행할 수 있는 권한을 갖고 있고, 시스템에 접속할 수 있는 사용자를 생성할 수 있는 권한도 있습니다.

리눅스의 모든 사용자는 혼자 존재할 수 없으며, 하나 이상의 그룹에 소속되어야 합니다.

사용자 확인

/etc/passwd 파일에는 리눅스 시스템에 등록되어 있는 모든 사용자 정보가 UserName:Password:UID:GID:FullName:HomeDir:DefaultShell 형식으로 기록되어 있습니다.

1refo in /Users/refo at rocky
2➜ cat /etc/passwd
3root:x:0:0:root:/root:/bin/bash
4bin:x:1:1:bin:/bin:/sbin/nologin
5daemon:x:2:2:daemon:/sbin:/sbin/nologin
6# ...
7systemd-oom:x:994:994:systemd Userspace OOM Killer:/:/usr/sbin/nologin
8refo:x:501:501::/home/refo:/bin/zsh

이 중 systemd-oom까지는 리눅스에 기본으로 존재하는 표준 사용자이고, 아래부터 추가된 사용자 정보입니다. 제 경우에는 제 유저 이름인 refo가 추가되어 있습니다.

유저의 비밀번호는 x로 표시되어 있는데, /etc/shadow 파일에서 확인할 수 있습니다…만 암호회되어 알아볼 수는 없습니다.

1refo in ~ at rocky took 4.8s
2➜ tail -3 /etc/shadow
3tail: cannot open '/etc/shadow' for reading: Permission denied
4
5refo in ~ at rocky
6➜ sudo tail -3 /etc/shadow
7tss:!!:19737::::::
8systemd-oom:!*:19737::::::
9refo:$6$TPizjeFQ894~~~VvomswF3X.:19749:0:99999:7:::

그룹 확인

사용자 정보와 비슷하게 그룹 정보도 /etc/group 파일에 기록되어 있습니다. 형식은 GroupName:GroupPassword:GID:UserNamesInThisGroup 순서입니다.

1refo in /Users/refo at rocky
2➜ cat /etc/group
3root:x:0:
4bin:x:1:
5daemon:x:2:
6# ...
7systemd-oom:x:994:
8refo:x:501:

이 파일도 systemd-oom까지는 리눅스에 기본으로 존재하는 표준 그룹이고, 아래부터 추가된 그룹 정보입니다. 제 경우에는 유저 이름과 동일한 refo가 그룹에도 추가되어 있습니다.

사용자와 그룹 관련 주요 명령

  • useradd 또는 adduser: 새 사용자를 추가하는 명령입니다.

    • -g GroupName: 사용자를 생성하면서 명시된 그룹에 추가합니다. 기본 값은 위에서 봤던 것처럼 사용자 이름과 동일한 그룹을 새로 생성합니다.
    • -d Path: 사용자 홈 경로로, 기본은 /home/${USER}입니다.
    • -s Shell: 기본 쉘은 보통은 bash일테니 /bin/bash로 되어 있을 것입니다.
    1refo in ~ at rocky
    2➜ useradd -g root -d /testhome -s /bin/zsh testuser1
    3
    4refo in ~ at rocky
    5➜ cat /etc/passwd
    6# ...
    7refo:x:501:501::/home/refo:/bin/zsh
    8testuser1:x:1000:0::/testhome:/bin/zsh # root 그룹이어서 GID = 0
    
  • passwd: 유저 비밀번호를 지정합니다.

    1refo in ~ at rocky
    2➜ sudo passwd testuser1
    3Changing password for user testuser1.
    4New password: # 비밀번호 입력은 화면에 안 보이므로 오타를 조심합니다.
    5BAD PASSWORD: The password is shorter than 8 characters
    6# 1234 같은 간단한 비밀번호 입력하면 경고합니다.
    7Retype new password:
    8passwd: all authentication tokens updated successfully.
    
  • 생성한 testuser1로 로그인합니다.

    1refo in ~ at rocky took 23.3s
    2➜ su testuser1
    3Password:
    4[testuser1@rocky]/home/refo% cd
    5[testuser1@rocky]~% pwd
    6/testhome # 유저 생성 시 -d 옵션으로 바꿔준 홈 경로가 표시됩니다.
    7[testuser1@rocky]~%
    

파일, 디렉터리 소유와 허가권

리눅스에서는 현재 디렉토리에 있는 파일과 디렉토리 목록을 볼 때 ls 명령어를 사용합니다. 이 때 -l 옵션을 사용하면 자세한 정보를 포함하여 목록을 볼 수 있습니다. 추가로 보이는 정보는 아래와 같습니다.

1refo in ~ at rocky
2➜ ls -lh
3total 0
4-rw-r--r-- 1 testuser1 root 0 Jan 27 16:55 sample
  • -rw-r--r--: 파일 유형 + 허가권
    • 파일 유형
      • 디렉터리인 경우 d, 일반 파일인 경우 -, 장치를 의미하는 b, c, 링크 l 등으로 표기됩니다.
    • 파일 허가권
      • 3자리씩 끊어서 r(read, 읽기 권한), w(write, 쓰기 권한), x(execute, 실행 권한)를 나타냅니다.
      • 첫번째는 파일 소유자의 권한, 두 번째는 그룹의 권한, 세 번째는 그 외 사용자의 권한입니다.
      • 숫자로 0644와 같이 표기하기도 합니다.
  • 1: 링크 수
  • testuser1: 파일 소유자 이름
  • root: 파일 소유 그룹 이름
  • 0: 파일 크기(Byte). 이 파일은 touch로 생성한 빈 파일이라 0바이트로 나옵니다.
  • Jan ...: 마지막 변경 시각
  • 파일 이름

실습

  1. 파일을 생성하고 권한을 확인해 봅니다.

    1refo in ~ at rocky
    2echo "date" > test.sh
    3
    4refo in ~ at rocky
    5➜ ls -lh
    6total 4.0K
    7-rw-r--r-- 1 refo refo 5 Jan 27 17:05 test.sh
    
  2. 실행 권한이 없는 파일은 실행할 수 없습니다.

    1refo in ~ at rocky
    2➜ ./test.sh
    3zsh: permission denied: ./test.sh
    
  3. 현재 유저에게만 실행 권한을 주고 실행해 봅시다.

     1refo in ~ at rocky
     2➜ chmod 744 ./test.sh
     3
     4refo in ~ at rocky
     5➜ ls -lh
     6total 4.0K
     7-rwxr--r-- 1 refo refo 5 Jan 27 17:05 test.sh
     8
     9refo in ~ at rocky
    10➜ ./test.sh
    11Sat Jan 27 05:08:25 PM KST 2024
    
  4. root 유저, 그룹으로 바꿔보고 실행해 봅시다. refo 유저는 다른 그룹에 속하므로 실행 불가할 것입니다.

    1refo in ~ at rocky
    2➜ sudo chown root:root test.sh
    3
    4refo in ~ at rocky …
    5➜ ./test.sh
    6zsh: permission denied: ./test.sh
    
  5. +x로 실행 권한을 주면 소유자, 그룹, 그 외 유저 모두 실행 가능한 권한이 추가되어 실행 가능합니다.

     1refo in ~ at rocky
     2➜ sudo chmod +x ./test.sh
     3
     4refo in ~ at rocky
     5➜ ls -lh
     6total 4.0K
     7-rwxr-xr-x 1 root root 5 Jan 27 17:05 test.sh
     8
     9refo in ~ at rocky
    10➜ ./test.sh
    11Sat Jan 27 05:09:00 PM KST 2024
    

링크

  • 우리가 일반적으로 생각하는 바로가기 링크는 리눅스에서는 Symbolic Link로 만들 수 있습니다. ln -s target linkname 명령으로 생성 가능합니다.
  • 다른 링크 종류로는 Hard Link가 있습니다.
 1refo in ~ at rocky
 2➜ ls -lh
 3total 4.0K
 4-rwxr-xr-x 1 refo refo 5 Jan 27 17:05 test.sh
 5
 6refo in ~ at rocky
 7➜ ln test.sh hardlink
 8
 9refo in ~ at rocky
10➜ ln -s test.sh softlink
11
12refo in ~ at rocky
13➜ ls -ilh
14total 12K
152293071 -rwxr-xr-x 2 refo refo 5 Jan 27 17:05 hardlink
162300505 lrwxrwxrwx 1 refo refo 7 Jan 27 17:15 softlink -> test.sh
172293071 -rwxr-xr-x 2 refo refo 5 Jan 27 17:05 test.sh
18
19refo in ~ at rocky
20➜ cat hardlink
21date
22
23refo in ~ at rocky
24➜ cat softlink
25date
  • 하드 링크와 소프트 링크의 가장 큰 차이점은 실제 파일과의 관계입니다. 하드 링크는 같은 원본 파일을 가리킵니다. ls 시 크기도 동일하게 나오고 inode 번호도 동일합니다. 그리고 파일 위치가 변경되어도 동작합니다.

  • 심볼릭 링크는 파일 포인터이므로 크기가 실제 파일과 다를 수 있습니다. 그리고 실제 타겟의 경로가 -> 뒤에 나옴. 이 경로에 파일이 없으면 링크가 깨집니다.

     1refo in ~ at rocky
     2➜ mv ./test.sh /tmp
     3
     4refo in ~ at rocky
     5➜ ls -ilh
     6total 8.0K
     72293071 -rwxr-xr-x 1 refo refo 5 Jan 27 17:05 hardlink
     82300505 lrwxrwxrwx 1 refo refo 7 Jan 27 17:15 softlink -> test.sh
     9
    10refo in ~ at rocky
    11➜ ./hardlink
    12Sat Jan 27 05:18:50 PM KST 2024
    13
    14refo in ~ at rocky
    15➜ ./softlink
    16zsh: no such file or directory: ./softlink
    
  • 대상 파일이 다시 원래 경로에 위치한다면 심볼릭 링크도 다시 정상 동작합니다.

     1refo in ~ at rocky
     2➜ mv /tmp/test.sh .
     3
     4refo in ~ at rocky
     5➜ ls -ilh
     6total 12K
     72293071 -rwxr-xr-x 1 refo refo 5 Jan 27 17:05 hardlink
     82300505 lrwxrwxrwx 1 refo refo 7 Jan 27 17:15 softlink -> test.sh
     92300512 -rwxr-xr-x 1 refo refo 5 Jan 27 17:05 test.sh
    10
    11refo in ~ at rocky
    12➜ ./hardlink
    13Sat Jan 27 05:19:16 PM KST 2024
    14
    15refo in ~ at rocky
    16➜ ./softlink
    17Sat Jan 27 05:19:18 PM KST 2024
    

Prerequisites: 이 글에서 언급되었으나 깊게 설명하지 않은 내용입니다.

  • linux

Comments

Link copied to clipboard!