Superuser란?
- 시스템 운영 관리자 계정
- 일반적으로 리눅스에서는 root 유저를 뜻함.
- 일반 사용자 권한과 superuser 권한을 구분하여 사용자의 부주의로 발생하는 시스템 손상, 바이러스, 악성코드의 침입에 의한 피해를 보호
- 우분투의 경우 기본적으로 root 사용자를 비활성화
권한
권한 조사
$ whoami
: 현재 로그인되어있는 사용자 계정 확인$ id
: 현재 사용자가 갖고 있는 권한(그룹 포함)을 확인
권한의 대여 (권한 남용을 하지 말 것.)
$ sudo
: Superuser의 권한을 빌려 명령어 수행(do)$ sudo whoami
=>root
$ sudo su -
: 루트 권한으로 로그인 (사용상 위험할 수 있으므로 되도록 사용 X)
$ sudo visudo
: superuser의 권한을 편집 (/etc/sudoers
파일에 접근)계정명 호스트명=(실행계정명) 명령어
- Ex)
user1 ALL=(ALL) /sbin/ifconfig
=> 비추천
- Ex)
// 사용자 권한 설정 root ALL=(ALL:ALL) ALL // %그룹 권한 설정 %admin ALL=(ALL) ALL // 사용자를 sudo 권한에 추가 $ useradd -aG user1 sudo (Ubuntu) $ useradd -aG user1 whell (Amazon AMI)
$ su [username]
: 사용자의 권한을 대여 (즉, 사용자로 로그인 한 것과 같은 효과)- 관리자가 사용자 계정을 관리하고 이슈/장애를 분석할 때 사용
$ su user2 => user2의 id로 로그인 (user2의 pw 필요) $ su - user2 => user2의 id로 로그인, user2의 home디렉토리 사용 $ su ,$ su root => root의 id로 로그인 (우분투는 root 암호 비활성화) $ sudo su - => 우분투에서도 root로 로그인 (but 위험) $ sudo su - user2 => sudoer(user1)의 pw를 사용하여 user2의 권한 대여
사용자
사용자 계정 (/etc/passwd)
$ cat /etc/passwd
: 사용자 계정 확인- 사용자 계정 표시 양식 사용자명:패스워드:계정UID:계정GUI:이름:홈디렉토리:로그인쉘 root:x:0:0:root:/root:/bin/bash => 슈퍼유저 user1:x:1000:1000:user1:/home/user1:/bin/bash => 사용자 www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin => 서비스 계정
(참고) 계정 UID
0 : root 1~99 : predefined 100~999 : administrative and system accounts 1000~ : user
사용자 암호
$ cat /etc/shadow
: 사용자 암호 확인리눅스(유닉스)의 모든 시간 epoch => 1970년 1월 1일 00:00:00 UTC
- 사용자 암호 표시 양식 사용자명:패스워드:최종수정일:패스워드최소변경일:최대사용일:만료경고기간:유예기간:만료기간:예약필드 root:!:18421:0:99999:7::: user1:$6$...:18421:0:99999:7::: www-data:*:17953:0:99999:7:::
(참고) 패스워드 암호화 알고리즘 표시
! : locked $1$ : MD5 // 과거에 많이 사용 $2a$ : Blowfish $2y$ : Blowfish $5$ : SHA-256 $6$ : SHA-512
$ change [OPTION] user
: 사용자 암호 정책 변경$ change user2 => 암호 정책 변경 $ change -l user2 => 암호 정책 확인 $ change -E 2020-12-31 -m 1 -M 90 -@ 7 user2 => 옵션 추가하여 암호 정책 변경
$ passwd [OPTION] user
: 암호 변경- 자신이 아닌 다른 사용자의 암호를 변경하기위해서는
sudo
필요
OPTIONS -l : 계정 잠금 -u : 계정 잠금 해제 -S : 계정 상태 확인 (대문자 S)
- 자신이 아닌 다른 사용자의 암호를 변경하기위해서는
사용자 추가
$ adduser [OPTIONS] [--home DIR] [--shell SHELL] [--disabled-password] [--disabled-login] user
(관리자 권한 필요, sudo붙여야함.)$ sudo adduser user2 => 새로운 사용자 user2 추가 (각종 정보입력 과정 필요)
$ useradd [OPTIONS] user
=> adduser와 다르게 정보를 default로 설정$ useradd user3 => 새로운 사용자 user3 추가 $ useradd -D => 사용자 생성 기본값 확인 $ useradd -D -b /usr => 사용자 기본 홈 디렉토리 /usr로 변경 $ useradd -D -s /bin/bash => 사용자 기본 쉘 bash로 변경 $ useradd -D -e 2020-12-31 => 사용자 계정 만료일 설정
- (참고) 계정 생성시 참조하는 파일들
/etc/default/useradd
/etc/login.defs
/etc/skel/
- (참고) 계정 생성시 참조하는 파일들
사용자 삭제
$ deluser [OPTIONS] user
: 사용자 계정 삭제 (userdel의 스크립트)$ deluser user2 => user2 사용자 삭제 (관련 파일 그대로 남음) $ deluser user2 --remove-home => user2의 계정과 home디렉토리 삭제
- (참고) 계정만 삭제 후 동일한 계정을 만들면 이전에 남아있던 디렉토리에 맵핑이 됨.
$ userdel [OPTIONS] user
: 사용자 계정 삭제 (홈 삭제)- -f 옵션 추가시 로그인 중이라도 강제 삭제
그룹
그룹 생성
$ addgroup [OPTIONS] group
: 그룹 계정 생성$ groupadd [OPTIONS] group
: addgroup의 실제 바이너리
그룹 삭제
$ delgroup [OPTIONS] group
: 그룹 계정 삭제
그룹 계정 / 사용자 할당 (또는 사용자 정보 수정)
$ usermod [OPTIONS] user
: 사용자 계정 정보 수정$ usermod -c <name change> user2 => 사용자 이름 수정 $ usermod -a -G sudo user2 => user2를 sudo 그룹에 추가 $ usermod user2 sudo => 위 명령어와 동일 $ deluser user2 sudo => user2를 sudo 그룹에서 제거
파일의 권한
사용자 접근 권한의 구분
User Gruop Other 읽기 쓰기 실행|읽기 쓰기 실행|읽기 쓰기 실행 r w x | r w x| r w x 4 2 1 | 4 2 1| 4 2 1 < 7 > < 7 > < 7 >
--- : 0 권한없음 --x : 1 실행 -w- : 2 쓰기 -wx : 3 쓰기 & 실행 r-- : 4 읽기 r-x : 5 읽기 & 실행 rw- : 6 읽기 & 쓰기 rwx : 7 읽기 & 쓰기 & 실행 User, Group, Other가 각각의 값을 가짐 - 777 : rwxrwxrwx - 666 : rw-rw-rw-
파일의 생성 권한
$ umask
: 파일/디렉토리 생성 권한의 확인umask가 0인 경우
- 리눅스의 기본 파일 권한 : 666
- 리눅스의 기본 디렉토리 권한 : 777
umask가 0이 아닌 경우
ex) umask = 002 - 파일 기본 권한인 666 - 002 110 110 110 - 000 000 010 -------------- 110 110 110 = 664 (즉, 파일은 rw-rw-r--로 생성) - 디렉토리 기본 권한인 777 - 002 111 111 111 - 000 000 010 -------------- 111 111 101 = 775 (즉, 디렉토리는 rwxrwxr-x로 생성)
파일의 권한 변경
$ chomd [OPTION]... [MODE]... file...
: 파일의 디렉토리 권한의 변경$ chmod 777 hello.txt => 숫자를 사용해 rwx를 모든 구분에 적용 $ chmod u+x hello.txt => user에 x(실행) 권한 추가 $ chmod g+rw hello.txt => group에 rw(읽기/쓰기) 권한 추가 $ chmod o+rwx hello.txt => other에 rwx(읽기/쓰기/실행) 권한 추가 $ chmod +x hello.txt => 모두에게 x(실행) 권한 추가
파일의 소유권 변경
$ chown [OPTION]... [USER][:GROUP] FILE
: 파일/디렉토리의 소유자/그룹 변경$ chown user2 hello.txt => 해당 파일의 소유자를 user2로 변경 $ chown user2:user2 hello.txt => 해당 파일의 소유자와 그룹을 모두 user2로 변경 $ chown :user2 hello.txt => 해당 파일의 그룹을 user2로 변경
$ chgrp [OPTION]... [GROUP] FILE
: 파일/디렉토리의 그룹 변경
특수 실행 권한
SetUID
: 소유자만 접근 가능한 파일에 다른 일반 유저로 접근이 필요할 때 사용.- 따라서 setuid가 적용되면 프로그램을 실행할때 실 사용자에서 프로그램의 소유자 ID로 유효사용자(EUID)가 변경된다.
- Ex) root 권한이 필요한 파일에 setuid 권한이 주어져 있으면 실행 순간 root 권한을 빌려 파일 실행
$ chmod u+s hello.txt
=>-rwsr-xr-x
와 같은 형태가 된다.- 권한을 읽을때 4를 추가해 읽는다. =>
4755
- user1 $ touch hello.txt => hello.txt 파일을 user1의 소유자로 생성 $ echo "hello" > hello.txt => hello.txt 파일에 "hello" 쓰기 $ chmod o-r hello.txt => other에서 read권한을 제거 => user2에서 `$ cat hello.txt`를 하면 허가 거부 $ cp /bin/cat . => cat 명령어 파일을 홈 디렉토리로 복사 $ mv cat mycat => cat을 mycat으로 이름 변경 => 이때 user2로 `$ ./mycat hello.txt`를 하면 허가 거부 $ chmod u+s mycat => mycat에 SetUID 권한 추가 => 이제 user2로 `$ ./mycat hello.txt`를 하면 실행됨.
mycat이라는 파일에 SetUID권한이 부여되면서 user2가 mycat을 실행함과 동시에 유효사용자가 user1으로 변경되어 "hello.txt"에 접근 가능
SetGID
: setuid와 비슷하게 그룹을 빌려 실행$ chmod g+s hello.txt
=>-rwxrwsrwx
와 같은 형태가 된다.- 권한을 읽을때 2를 추가해 읽는다. =>
2777
StickyBit
: 파일/디렉토리 생성은 누구나 가능, 삭제는 생성한 유저와 디렉토리 소유자만 가능- 쉽게 공유폴더와 같은 개념으로 생각해볼 수 있음.
$ chmod +t directoryname
=>drwxrwxrwt
와 같은 형태가 된다.- 권한을 읽을때 1을 추가해 읽는다. =>
1777
'Programming > Linux' 카테고리의 다른 글
[Linux] CentOS7 Hostname 변경 (0) | 2020.12.21 |
---|---|
[Linux] CentOS7 네트워크 인터페이스 활성화 (0) | 2020.12.21 |
[Linux] 리눅스 기본 명령어 다루기 (0) | 2020.07.07 |