리눅스 어드민(1) - 유저와 그룹 관리 & 고급 권한 관리

김형선·2023년 9월 11일
0

Linux

목록 보기
7/16

1. 사용자 및 그룹 관리

  • 시스템이 유저는 uid로, 그룹은 gid로 판별한다.
  • 모든 유저는 최소 하나의 그룹에 속해있어야 한다.
  • 유저 생성 시에 유저 이름과 동일한 그룹이 생성된다.

</etc/passwd & /etc/shadow>

  • 보통 사용자가 생성되면 /etc/passwd파일과 /etc/shadow 파일 가장 마지막에 사용자 정보가 추가된다.(중요한 설정들이니깐 vi로 들어가지 말고 tail로 보자)

root 유저로 접속을 위해 su - 하고 나서 tail -6 passwd 명령어로 마지막 6줄을 보겠다. khs라는 유저를 확인할 수 있다.

useradd

를 통해 새로운 유저를 생성하겠다.
-c 옵션은 comment 추가하는 것이다.
user10이 추가된 것도 확인할 수 있다.

id

id 명령어를 통해서 유저 정보 더 알 수 있다.

/etc/shadow에는 해시 형태로 된 비밀번호가 있다.

passwd

user10의 password 바꾸고 싶다.

userdel

user10 지우고 싶으면

usermod -G <그룹명> <유저명>

usermod -G wheel user02 하면 user02를 wheel그룹에 넣을 수 있다.


사용자 전환

  • 지정된 사용자로 전환을 위해 su 명령을 사용한다.
  • su 명령을 사용하면 로그아웃 하지 않고 사용자를 전환할 수 있다.
  • su 명령을 인자 없이 그냥
su

만 하면 root 사용자가 지정된다.(비밀번호 치면 됨)

  • root 상태에서 su user01과 같이 사용자 이름 지정하면 패스워드 필요하지 않다.

  • 참고로 su만 치면 그 이전에 작업하던 경로 그대로 있는다.

  • 근데 만약 root로 들어가서 root의 홈 디렉토리로 가고 싶다면 su -


sudo 명령

  • 일반적으로 업무환경에서는 root사용자의 패스워드를 공유하지 않아야한다.
  • 그래서 대부분의 경우 root사용자의 권한이 필요한 작업을 수행하기 위해서는 root사용자의 패스워드를 공유하지 않고 sudo 명령을 사용하여 root사용자의 권한을 사용한다.

sudo 명령 사용하려면 두 가지 조건 필요한데

  • 현재 사용자의 패스워드 알고 있어야하고(sudo 치고 패스워드 쳐야하니깐)
  • sudo 명령 실행하려는 사용자가 /etc/sudoer 파일에 등록된 상태여야 한다


  • khs라는 유저가 wheel이라는 그룹에 속해있고 wheel이라는 그룹에 있는 사람들은 run all commands 권한이 있다.
  • wheel이라는 그룹에 안 속해있으면 sudo 못 쓴다.

usermod -aG <그룹명> <유저명>

  • 이런 식으로 user 새로 생성하고 wheel이라는 그룹에 안 들어가있으면 넣어줘야 sudo 명령어 쓸 수 있게 된다.
  • 보통은 옵션을 -aG로 준다.

2. 고급 권한 관리

확장 권한 > setuid, setgid, sticky bit

리눅스 > 멀티유저, 멀티태스킹 > 여러 명이 동시에 붙기 때문에 파일에 권한을 주는 것이 중요하다

참고) 디렉토리 열려면 x권한 줘야한다, 디렉토리도 파일이다


setuid

보통 파일을 실행하면 실행한 사용자가 주체가 되어 프로세스가 실행되는데, setuid가 설정되어 있는 파일을 실행하면 파일을 실행한 사용자가 아니라 파일을 소유하고 있는 사용자의 권한으로 프로세스가 실행된다.

ls -l /bin/passwd를 통해 passwd 파일의 권한을 확인할 것인데, 권한이 rwx가 아니라 rws로 되어있다.
which 명령어를 사용하면 뒤의 명령어가 저장되어 있는 곳의 위치를 찾을 수 있다.
파일 소유자는 현재 root이고 user09로 접속한 상태이다.
아무튼 모든 passwd 명령어는 setuid가 설정되어 있는 상태이기 때문에 사용하면 root권한으로 /etc/shadow파일의 내용을 변경할 수 있게 된다.
요약하면 setuid로 설정되어 있어서 유저인 상태로 본인 패스워드를 바꿀 수 있다.(그것에 대해서만 파일 소유자 권한-여기서는 루트 권한을 받을 수 있어서)


보면 root만 권한 있다.


setgid

  • 디렉토리에 setgid가 설정되어 있으면 해당 디렉토리에서 파일을 생성했을 때 파일의 사용자 그룹은 파일을 생성한 사용자의 기본 그룹으로 지정되지 않고 setgid가 설정된 디렉토리의 사용자 그룹으로 상속된다.
  • drwxr-sr-x과 같이 group에 s있어서 판별 가능.

디렉토리이고 유저는 rwx, 그룹은 rx, other는 rx
소유자 khs, 소유 그룹 khs이다.


chmod 555로 쓰기 권한을 빼면 touch로 파일을 만들 수 없다
다시 chmod 775로 권한 주면 파일 만들 수 있다.


그룹 새로 만들기 + 확인

유저 만들고 들어가서 aaa라는 디렉토리 만들었다

root 들어가서 해야함. chown :devops /home/linux1/aaa로 해도 된다


☆실습☆

<과정>

  • user3과 user4가 있고, user3의 홈 디렉토리는 /home/user3이다.
  • 여기에 mkdir로 linux라는 디렉토리를 만들어보자(/home/user3/linux)
  • user4도 vi편집기로 user3이 만들어둔 디렉토리에서 작업할 수 있게 권한 설정을 할 것이다.
  • 여기서 중요한 것은 먼저 /home/user3/linux 디렉토리의 그룹명이 user3과 user4가 동시에 속해있는 그룹명이어야 한다. 이것은 chgrp 명령어를 통해서 설정할 것이다.
  • 그 뒤에 setgid 설정을 할 것이고, s권한을 준 다음 만든 vi편집기로 작업할 수 있게 한다는 것이다.
  • 여기서 주의할 점은 s권한 주기 전에 만든 파일에 대해서는 이 권한이 상속되지 않는다는 것이다.
  • 예를 들어 setgid설정 전에 abc라는 파일을 만들었고, s 권한 설정을 해준 다음에 panda라는 파일을 만들었다고 하자. group소유자도 abc는 상속이 안 된 상태일 것이고, panda만 상속이 된 상태일 것이다.
  • 마지막으로 /home/user3 디렉토리에게 771권한을 주는 것이 중요하다. 그래야지 user4에서 cd /home/user3/linux 명령어를 쳤을 때, permission denied가 안 뜨기 때문이다.

많이 쓰는 명령어

  • usermod -aG 그룹명 유저명
  • tail -5 /etc/passwd,group,shadow
  • useradd 유저명
  • id 유저명
  • passwd 유저명
  • chmod g+s /home/user/linux1
  • groupadd devops : 그룹 생성
  • chgrp devops /home/user/linux1 : 그룹소유자 변경
    chown :devops /home/user/linux1

useradd

먼저 user3, user4 만들겠다

tail -5 /etc/group

group이 뭐가 있는지 확인하고 미리 만들어둔 devops 그룹에 user3, user4를 넣겠다.

usermod -aG <그룹명> <유저명>

넣은 것 확인가능하다.

su, mkdir, ls -ld

user3으로 접속하고

현재 linux디렉토리의 권한에 setgid권한은 없는 것을 확인할 수 있다.
또한, 그룹도 user3으로 되어있다.

chgrp, chmod

그래서 우선 그룹을 devops로 바꾸고, 그 뒤에 s권한을 추가해주고 추가로 user3 디렉토리에게 771 권한을 주도록 하겠다.



cd로 이동

그 뒤에 터미널 하나 더 열고 /home/user3/linux로 가서 무슨 파일 있나 확인도 한다.

다른 유저의 디렉토리에서 작업 가능해짐

vi panda 해보면 readonly가 안 뜨는 것을 확인할 수 있다.

s권한 주기 전에도 파일 만들어보고, s권한 준 다음에 파일 만들어 본 다음에 각각 ls -ld로 그룹소유자 봤더니 자동적으로 안 바뀐다는 것 확인할 수 있었다.


sticky bit

디렉토리에만 설정 가능. 파일을 소유한 사용자와 root만 파일 삭제 가능. 누구나 파일 생성할 수는 있다.
drwxrwxrwt면 마지막에 t있어서 판별 가능.


ACL

  • 파일 하나만 권한 주고 싶으면 ACL 쓴다(setgid랑 목적이 다르다)

setfacl -m u:user09:rwx /tmp/abcde
-m은 modify, u:유저:권한, 파일 위치

권한 맨 뒤에 +가 붙은 것 확인 가능

getfacl로 확인해보면

0개의 댓글

관련 채용 정보