[Rhel/CentOS] 3. 로컬 사용자 및 그룹 관리
사용자(User)
사용자 계정은 다른 사용자와 명령을 실행할 수 있는 프로그램 간에 보안 경계를 제공하는 데 사용됩니다.
그룹(Group)
그룹은 파일 및 기타 시스템 리소스에 대한 엑세스를 공유해야 하는 사용자 컬렉션입니다.
$ ls -l
total 24
UID GID <SuperBlock>
--- ---
drwxr-xr-x 2 root root 4096 12월 7 19:22 ./
drwxrwxr-x 11 sihun sihun 4096 12월 6 18:02 ../
-rw-r--r-- 1 sihun sihun 4622 12월 7 18:19 day1.txt
-rw-r--r-- 1 sihun sihun 7820 12월 7 18:19 day2.txt
super user
- uid, gid 0번이거나 혹은 이와 동등한 권한을 가지고 있는 사용
- root 로그인하는 경우: super user
normal user
- rhel7 기준으로 uid, gid가 100번 이상인 사용자. 이사용자는 시스템 제어 권한은 가지고 있지 않다.
- 일반 사용자
- 배포판 별로 일반 사용자(uid, gid) 범위가 각자 다름
* 65534(UID): nobody
service user
- 201~999 uid, gid 기준
- postfix, httpd, vsftpd 이와 같은 서비스가 실행 시 서비스 계정이 요구함
- 위의 범위 안에서 서비스 계정을 만듦
* SELinux에서 차단
* 잘못하면 UID, GID가 손실
kernel user
- uid, gid 0번 사용자
- uid, gid 0,0
- 커널이 메모리에 올라가서 구동시 0:0으로 모든 프로세스 및 초기화 실행
- 0:0 초기화가 완료 되면 "super user"에게 다시 권한 이양
슈퍼유저 액세스 권한 취득
슈퍼유저 권한을 얻는 방법은 크게 "sudo, su, su -" 세가지 방법이 있습니다.
su -와 su의 차이점은 해당 사용자로 새로 로그인 한 것처럼 쉘 환경을 설정하는 반면, su는 해당 사용자로 쉘을 시작하지만 원래 사용자의 환경 설정을 사용한다는 것이다.
sudo의 경우는 Debian 계열에서 많이 사용하다가 RHEL6 이후로 적극적으로 사용한다.
$ sudo -u <USER> <COMMAND>
# sudo -u student ls ;; student 사용자로 ls 명령어 실행
# password: 본인의 패스워드
$ sudo -i # 대화형 모드(interactive mode)
$ sudo -i -u student
* sudoer 설정: visudo(vi에디터 기반으로 실행)
/etc/sudoers.d/
별도의 파일로 저장해 설정을 분리 운영이 가능하게 한다.
$ echo "%<GROUPNAME> ALL=(ALL) ALL" >> /etc/sudoers.d/<USERNAME>
%뒤는 그룹을 말한다. ALL=(ALL)은 이 파일이 있을 수 있는 호스트에서 group이 모든 명령을 실행할 수 있음을 지정하는 것이다.
마지막 ALL은 group이 이러한 명령을 시스템 사용자로 실행할 수 있음을 지정한다.
로컬 사용자 계정 관리
useradd: System v 스타일(SCO Unix)
adduser: BSD 스타일(Debian, Slackware, SuSE)
useradd: 사용자 추가(home생성, 그룹아이디 생성, 기본 파일 복사)
home 생성: /home/<USERNAME>
그룹 아이디 생성: /etc/group에 사용자 이름과 같은 그룹 생성(uid, gid)
기본 파일 복사: /etc/skel, 기본 파일 제공해주는 재료 디렉터리
useradd: usermod 수정
groupadd: groupmod 수정
$ useradd test1 # uid:gid = 1000:1000
$ groupadd shared # gid 1001
$ useradd test2 # uid:gid = 1001:1002
그냥 vi로 /etc/passwd, group 파일 직접 수정하면 됨.
user를 특정 그룹에 포함시키기
$ sudo usermod -aG <GROUPNAME> <USERNAME>
RedHat제안 --> # groupadd -g 10000 shared : 10000번부터 사용하는 것을 권장한다.
/etc/login.defs
^
|
groupadd ---> /etc/group
별도의 그룹
생성
.-> echo "passwd" | passwd --stdin <USERNAME>
/
/
.---> /etc/passwd (2) -- failed --> all stop
|---> /etc/group (3)
| uid, gid + uname으로 정보 생성
|
+---> mkdir /home/<USERNAME> (4) <--- skel --- /etc/skel (5)
|
/etc/login,defs <--- useradd ---> passswd ---> /etc/shadow
SRV ACC | (6) [SHA512]
NOR ACC(d) | /
|\_______________|________/
| |
노말/서비스 계정인지 |
|
v
/etc/default/useradd (1)
첫번째로 참조하게 된다.
(기본적으로 가져가는 값들)
.--->student:x:1000:10000
| -
| \_________
(2) \
passwd ---> /etc/password --mapping--> /etc/shadow (4) pub + salt + rsa pass = 진짜 패스워드
/ (legacy) |
/ |
login-----' mapping
(1) |
V
gshadow (3)
사용자 암호 관리
최근에 사용자 암호 관리는 리눅스에서 잘 안쓰인다. 왜냐하면 LDAP이나 IPA로 인해 굳이 리눅스에서 할 필요성이 없어졌기 때문이다.
$ sudo chage -m 0 -M 90 -w 7 -I 14 <USERNAME>
해당 명령어를 알아두면 좋을 것 같다.
- m: 암호 최소 사용기간
- M: 암호 최대 사용기간
- W: 만료전 경고기간
- I: 비활성화 기간
엑세스 제한
$ sudo usermod -L test1
# 유저에 접근 못하도록 잠금
$ sudo usermod -U test1
# 잠금 해제
서버 점검시 종종 쓴다...
파일 권한 관리
rwx rwx rwx: 심볼릭(현재 이 방법으로 권장)
$ chmod u+rwx,g-w,o=rw
# +: 퍼미션 추가
# -: 퍼미션 제거
# =: 퍼미션 강제 대입
$ chmod 724 # chmod u=rwx,g=w,o=r
# chmod a=rwx (a는 u,g,o 모두 일괄 적용)
# chmod u+s: Set UID
# g+s: Set GID
# o+t: Sticky