반응형
  • 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 => 비추천
      // 사용자 권한 설정
      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
반응형

BELATED ARTICLES

more