IT Memory Note

[K-Shield Jr - 복습] 리눅스 서버 기본 활용 방안 4 본문

K-Shield Jr

[K-Shield Jr - 복습] 리눅스 서버 기본 활용 방안 4

h00ddu 2023. 9. 2. 04:36

 

사용자 및 권한 관리

 

 

사용자 계정의 이해

 

  • 각 사용자의 권한은 일반 사용자 또는 root 사용자 중의 하나로 정의되며, 일반 사용자는 실행할 수 있는 퍼미션을 가진 파일에만 접근할 수 있고, root 사용자는 소유 여부에 관계 없이 모든 파일에 접근할 수 있음
  • 리눅스에서 계정은 파일의 설정에 따라 관리
  • 리눅스 계정과 관련 파일
  • /etc/passwd : 계정명과 관련 정보
  • /etc/shadow : 패스워드와 관련 정보
  • /etc/group : 계정 그룹과 보조 그룹 계정 정보

사용자 계정 생성

 

  • adduser & useradd 명령어 : /etc/passwd 파일 내에 /home/[사용자명] 디렉터리를 계정 홈으로 가짐
# useradd [생성할_사용자명]
# passwd [생성한_사용자명]
Changing password user [생성한_사용자명]
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

# cat /etc/passwd | grep [사용자명]
[사용자명]:x:500:500::/home/[사용자명]:/bin/bash

 

< adduser 옵션 >

 

옵션 기능
-c 설명 패스워드 파일에 새로운 사용자 설명을 추가
-d 디렉터리 새 계정에 대한 디렉터리 위치를 지정
-e 유효기간 지정된 날짜에 사용자의 계정을 삭제
-f 비활성일수 패스워드가 인가된 후 계정이 영구히 말소될 때까지의 기간
-u UID 사용자의 ID에 대한 값
-s shell 사용자의 로그인 쉘을 지정
-n 사용자 계정 추가 기본모드를 지정하지 않을 때
-G[그룹] 사용자가 기본 그룹이외의 다른 그룹에 추가하고자 할 때

계정 관리

 

  • adduser 명령은 root 사용자만 실행할 수 있으며, useradd [명령어]를 이용하여 계정의 홈 디렉터리 위치, 사용종료일자, 유효일자, 로그인 쉘 등의 세부 설정을 할 수 있음
  • adduser : 사용자 계정 생성
  • 명령어 형식 : adduser [사용자명]

    < adduser 실행 절차 >

  1. /etc/passwd와 /etc/shadow 사용자 추가
  2. 사용자명과 동일하게 /etc/group에 추가
  3. /home/[사용자명] 디렉터리 생성
  4. /etc/skel 디렉터리 파일 /home/[사용자명] 디렉터리에 복사
  • adduser [사용자명] -e 옵션으로 2013년 2월 20일 말소
# 로그인 불가 : 사용자 쉘을 false 또는 nologin으로 변경해주면 로그인을 할 수 없게 됨
# adduser [사용자명] -e 2013-02-20
# passwd [사용자명]
Changing password for user [사용자명].
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

# tail /etc/passwd
:
sshd:x:74:74:privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[사용자명]:x:500:500::/home/[사용자명]:/bin/bash

# 사용자 계정 경로로 생성되지 않고 계정 생성
# adduser -M [사용자명2]
# ls -l /home/ | grep [사용자명2]
  • adduser -D 옵션을 이용하여 사용자 추가 명령어의 기본 설정 값을 확인
# 사용자의 기본 홈 디렉터리를 /home에서 /user를 기본 경로로 갖도록 함
# adduser -D -b /user

# /bin/bash에서 /bin/tcsh로 쉘 변경
# adduser -D -s /bin/tcsh

 

  • userdel : 사용자 계정 삭제
  • 명령어 형식 : userdel [사용자명]

 

  • passwd : 사용자 암호 변경
  • etc/passwd 파일
  • [사용자명]:x:512:512::/home/[사용자명]:/bin/bash
  • [사용자명][패스워드][UID][GID][COM][사용자위치][쉘]

     - GID 뒤에 설명(Comment)을 삽입시키려면 -c 옵션을 적고 그 뒤에 설명을 빈칸 없이 연속해서 적어주면 됨

 

  • /etc/shadow 파일
  • shadow 파일은 9개 필드로 콜론(:)에 의해 구분
  1. 사용자명
  2. 암호화된 패스워드
  3. 최종 암호 변경일
  4. 암호 변경 최소일수
  5. 암호 변경 유예기간
  6. 암호 변경 경고일수
  7. 계정 사용 불가 날짜
  8. 계정 만료일
  9. 예약
# cat /etc/shadow
root:$sdfSDGSAFSD$ASdgg/A:17746:0:99999:7:::
bin:*:17746:0:99999:7:::
daemon:*:17746:0:99999:7:::
adm:*:17746:0:99999:7:::
lp:*:17746:0:99999:7:::

 

  • /etc/skel 디렉터리
  • 해당 디렉터리 안에 들어있는 파일 및 디렉터리를 계정 생성 시 홈 디렉터리에 제공
# ls -al /etc/skel
total 28
drwxr-xr-x.		3 root root		78  Apr 11	2018 .
drwxr-xr-x.	  143 root root	 12268  Jan 16 16:02 ..
-rw-r--r--.		1 root root		18	Apr	11	2018 .bash_logout
-rw-r--r--.		1 root root	   193	Apr	11	2018 .bash_profile
-rw-r--r--.		1 root root	   231	Apr	11	2018 .bashrc
drwxr-xr-x.		4 root root		39  Aug 10	2017 .mozilla

 

  • /etc/default/useradd 파일
  • 별도의 옵션 없이 'useradd [사용자명]'으로 계정 생성 시에 기본적으로 적용되는 설정이 들어있는 파일
  • useradd -D 또는 cat /etc/default/useradd로 확인 가능
# useradd -D or cat /etc/default/useradd
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

 

  • /etc/login.defs 파일
  • 해당 파일에서 정의 되어지는 주요 값

     - 패스워드 정책 관련 설정 (최소/최대 사용기한, 최소길이 등)

     - GID/UID의 최소/최대값, 기본 UMASK 값

     - 홈 디렉터리 생성 여부, 패스워드에 적용하는 암호화 알고리즘

# cat /etc/login.defs | egrep -x "^#|^$"
MAIL_DIR	/var/spool/mail
PASS_MAX_DAYS			99999
PASS_MIN_DAYS			0
PASS_MIN_LEN			5
PASS_WARN_AGE			7
UID_MIN					 1000
UID_MAX					60000
SYS_UID_MIN				  201
SYS_UID_MAX				  999
GID_MIN					 1000
GID_MAX					60000
SYS_GID_MIN				  201
SYS_GID_MAX				  999
CREATE_HOME yes
UMASK			077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512

 

  • pwconv / pwunconv
  • 일반적으로 사용자 암호는 해쉬화 되어 /etc/shadow에 저장되지만 pwunconv 명령어로 /etc/passwd 파일에서 해쉬화된 암호를 볼 수 있음
# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

# pwunconv
# cat /etc/passwd | grep root
root:$t5AGD$aset/asdf3$.:0:0:root:/root:/bin/bash
operator:*:11:0:operator:/root:/sbin/nologin

# pwconv
# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

 

  • group 관리 명령어
  • groupadd : 그룹 생성

     - 명령어 형식 : groupadd [그룹명]

 

  • groupdel : 그룹 삭제

     - 명령어 형식 : groupdel [그룹명]

 

  • groupmod : 그룹 속성 변경

     - 명령어 형식 : groupmod [옵션] [그룹명]


퍼미션과 소유권

 

  • 리눅스는 멀티 유저 운영체제이기 때문에 시스템의 자원인 파일을 소유할 수 있는 권리와 접근 권한, 즉 소유권과 퍼미션을 root가 부여하게끔 되어 있음
  • 퍼미션(Permission)과 소유권(Ownership)
  • 리눅스 시스템에 있는 모든 파일과 디렉터리에서는 그것을 액세스할 수 있는 소유자와 그룹에 대한 소유권(Ownership)을 가짐
  • 이러한 파일과 디렉터리에 액세스할 수 있도록 해주는 퍼미션(Permission)으로 접근을 제어할 수 있음
  • 소유권은 그 파일과 디렉터리를 생성한 사용자가 가지는데, 보통 계정명으로 표기되거나 어떤 경우에는 UID로 표기됨

 

  • 소유권(Ownership)
  • chown 명령어 : 사용자, 그룹의 소유권을 변경하는 명령어
  • 명령어 형식 : chown [소유자명][그룹명] [파일/디렉터리명]
# 사용자 소유권 변환
# ls -l
total 4
-rw-r--r--	1 temp temp	0 Dec 13 17:53 1234.txt

# chown root 1234.txt
# ls -l
total 4
-rw-r--r--	1 root temp 0 Dec 13 17:53 1234.txt

# 그룹 소유권 변환
# ls -l
total 4
-rw-r--r--	1 root temp Dec 13 17:53 1234.txt

# chown .root 1234.txt
# ls -l
total 4
-rw-r--r--	1 root root	Dec 13 17:53 1234.txt

 

  • 퍼미션 형식 구조

 

퍼미션 형식 구조

  • 읽기 허용(Read) : 파일의 내용을 읽을 수 있는지 여부를 결정
  • 쓰기 허용(Write) : 파일을 쓰거나 지울 수 있는지, 덮어쓸 것인지 결정
  • 실행 허용(eXecution) : 실행 파일들에 대해서 실행 권한 부여 여부를 결정
  • 퍼미션(Permission) 계산 예제
  • 사용자 읽기 쓰기 실행 권한(rwx)
  • 그룹 쓰기 실행 권한(r-x)
  • 기타 쓰기 실행 권한(r-x)

# ls의 실행 퍼미션은 기본 755
# ls -l /bin/ls
-rwxr-xr-x	1	root root 93560	Sep 28	2006 /bin/ls

# 실행 권한을 750으로 수정
# chmod 750 /bin/ls
# ls -l /bin/ls
-rwxr-x---	1	root root 93560 Sep 28	2006 /bin/ls

# 일반 계정으로 변경하고 ls 실행
# su temp
$ ls
bash: /bin/ls: Permission denied

 

  • 4자리 절대모드 퍼미션

 

비트 이름 절대 표기 값 문자
Sticky bit 1000 Other 권한에 t
SetGID 2000 Group 권한에 s
SetUID 4000 Owner 권한에 s
  • Sticky bit : 모든 사용자가 쓰고 삭제할 수 있는 디렉터리에 적용

     - 리눅스에선 /tmp 디렉터리가 이 비트에 적용

     - 이 비트를 적용한 파일은 어떤 사용자라도 읽고 쓸 수 있지만 삭제를 할 수 있는 사람은 이 파일을 생성한 사용자만이 삭제 가능

 

  • SetGID와 SetUID : 파일을 실행할 때 그 파일의 소유자 또는 그룹의 권한으로 실행되도록 하는 것

     - 이 권한은 시스템에서 작업이 이뤄질 수 있도록 루트 권한이 필요한 경우나 어떠한 시스템 자원을 이용하기 위해 필요

     - 예 : /bin/ping라는 명령어에서 SetUID를 제거하게 되면 일반 사용자가 이 명령을 사용하는데 오류가 발생하게 됨

 

  • SetGID와 SetUID 예제
# /bin/ping 파일 살펴보기
# ls -l /bin/ping
-rwsr-x-r-x	1 root root 36056 Sep 13	2006

# chmod 755 퍼미션 변경
# chmod 755 /bin/ping
# ls -l /bin/ping
-rwxr-x-r-x	1 root root 36056 Sep 13	2006 /bin/ping

# 사용자 ID로 계정 변경 후 ping 테스트 > Ping이 실행되지 않음
# su temp
$ ping 211.240.68.1
ping: icmp open socket: Operation not permitted