[쿠버네티스 3주차 1/6] 리눅스 - 사용자 지정 설정 이어서 & 로그

신현식·2023년 1월 6일
0

구름_Linux

목록 보기
12/22
post-thumbnail

사용자 계정 관리

사용자 계정정보 수정

usermod

  • 사용자 계정정보를 수정할때 사용하는 명령어이다.
  • -md: 홈 디렉터리를 수정 및 디렉터리 생성을 위해 반드시 이것으로 사용해야함
  • -l: 계정 이름을 바꾼다.
  • -aG: 새로운 사용자에게 새로운 보조그룹 추가
  • usermod -L 계정명 : 해당 계정 잠금, 패스워드를 많이 틀리면 계정잠기게 하는 것도 있음
  • usermod -U 계정명 : 계정잠금 해제

ex) testuser 계정을 생성하고 생성한 계정을 계정명: user05 홈 디렉터리: /home/user05 , 쉘: /bin/sh, 보조그룹 추가: wheel 그룹도 추가 가입, uid: 2000 으로 계정정보를 수정하시오
-> useradd testuser
-> usermod -u 2000 -md /home/user05 -s /bin/sh -l user05 -aG 'wheel' testuser

패스워드 에이징

패스워드 에이징은 useradd, usermod, passwd, chage 명령으로 설정 가능하다. chage는 패스워드 에이징을 관리하는 별도의 명령어이다.min을 1, max를 90, WARNING(만료일이 되기 전 사용자에게 경고 메세지를 출력)를 1, INACTIVE(패스워드가 만료되고 여기에 지정된 숫자안에 패스워드를 변경하지 않으면 사용자 계정이 잠금상태로 변경)를 3, 만료일을 2025-10-31일로 설정하였다.

새 그룹 생성

groupadd

  • 그룹을 생성한다.
  • -g gid: 특정 GID를 지정하여 그룹을 생성
  • -o 그룹명: 그룹을 생성할때 GID를 기존 GID와 중복으로 지정 가능

사용자 정보관리 명령

UID와 EUID

UID(RUID)는 사용자가 로그인할 때 사용한 계정의 UID이고 EUID는 현재 명령을 수행하는 주체의 UID이다. 실행파일에 setuid가 설정되어 있는 경우 해당 실행파일을 실행한 프로세스의 UID는 사용자 계정의 UID가 아니라 실행파일 소유자의 UID인데 이것이 EUID이다. su 명령을 사용하여 다른 계정으로 전환한 경우 UID와 EUID가 달라진다.

사용자 정보 확인

who

  • 현재 시스템을 사용하는 사용자의 정보를 출력한다.

w

  • 현재 시스템을 사용하는 사용자의 정보와 작업정보를 출력한다.IDLE은 유효기간을 뜻한다.

last

  • 시스템에 로그인하고 로그아웃한 정보를 출력한다.

UID & EUID 확인하기

  • whoami, who am i, id로 확인이 가능하다. UID는 who am i, who -m으로 출력가능하고 EUID는 whoami, id로 출력이 가능하다.

    두개의 id를 비교했을때 로그인은 root로 하였지만 su 명령으로 user로 계정전환을 하였을때 UID는 root, EUID는 user로 변환된 것을 확인할 수 있다.

root권한 사용하기

su 명령을 사용하여 root 계정으로 전환하면 모든 권한을 부여하지만 sudo 명령을 사용하여 전환하면 특정 작업만 수행할 수 있는 권한만 부여한다.

  • su 계정명 : 계정만 다른 계정으로 바꿈
  • su - 계정명 : 계정 변환 하면서 환경설정 값도 가져옴

sudo 권한

  • 일반계정으로 로그인했을 때 root 사용자 권한이 필요한 작업을 수행하기 위해서 root 사용자의 패스워드를 공유하지 않고 sudo 명령을 사용하여 root 사용자의 권한을 사용한다.

  • wheel이라는 그룹에 속해있는 계정만 sudo 명령을 사용할 수 있다. 그룹을 제거하고 나서 sudo 명령을 사용했을 때 사용이 불가능한 것을 볼 수 있다.

  • 권한부여: /etc/sudoers 파일에 설정, visudo로 직접 바꿔도 됨
    %는 그룹 지정할때 사용

  • 사용자계정 호스트 = 명령어 구조로 추가함
    root ALL=(ALL) ALL : root 계정의 경우 어디서나 어느 명령이든지 실행 할수 있다는 의미
    파일에서 test계정에 대해 test ALL=(ALL) ALL을 해준 후 test계정으로 전환하여 /etc/shadow 파일을 열어보면 test계정의 패스워드로 입력하여 들어가면 파일을 열수 있는 것을 볼 수 있다.

파일 및 디렉터리의 소유자와 소유그룹 변경하기

파일이나 디렉터리는 해당 파일이나 디렉터리를 생성한 사용자의 계정과 그룹이 소유자와 소유 그룹으로 설정된다.
chown / chgrp

  • 파일과 디렉터리의 소유자와 소유그룹을 변경한다.

  • -R : 서브 디렉터리의 소유자와 소유그룹도 변경

  • 소유자만 바꿀때는
    chown 계정명 파일명

  • 소유그룹만 바꿀때
    chown :그룹명 파일명
    chgrp 그룹명 파일명

  • 소유자와 소유그룹 둘다바꾸려면
    chown 계정명:그룹명 파일명

로그

로그는 커널과 리눅스 시스템이 제공하는 여러 서비스와 응용 프로그램이 발생시키는 메세지이다. 로그파일 소유자는 대부분 root 계정이고 접근 권한은 대부분 600이다. 보안적인 측면에서 일반 사용자 계정에서 로그파일의 내용을 함부로 볼 수 없게 하는것이 바람직하기 때문이다.

로그 관리

systemd 시스템에서 rsyslogd와 systemd-journald 두 데몬에 의해서 관리된다. systemd-journald는 부팅이 시작되는 순간부터 로그를 수집하고 이후에 rsyslogd로 syslog를 전달하여 각 파일 별로 로그를 저장한다.

  • rsyslog에 의해 수집되는 로그는 /var/log 디렉토리에 각 syslog에 해당하는 로그 파일들을 생성하고 저장한다. messages 로그와 secure로그가 제일 중요!!

로그 파일의 순환

지정된 로그파일에 계속해서 로그를 저장하면 로그파일의 크기가 과도하게 커질 수 있다. 이 경우, 파일을 읽기위해 보다 많은 메모리가 필요할 뿐 아니라 로그를 확인하고 분석하는 것도 어렵다. 따라서 로그파일의 크기가 너무 커지지 않도록 제한하는 것이 순환이다.

로그 파일이 일정 크기에 도달하거나 일정 기간이 지나면 파일을 백업하고, 새롭게 로그 파일을 생성한다. 백업된 파일도 일정 기간이 지나거나 백업 파일의 개수가 많아지면 삭제하도록 한다. 이 과정이 로그 파일의 순환이다.

  • logrotate 유틸리티를 사용해서 순환과정을 진행하는데 cron 작업에 의해 하루에 한번씩 실행하도록 되어있다.

rsyslogd

유닉스나 리눅스 계열 시스템에서 로그를 기록하기 위한 표쥰 프로토콜인 syslog를 사용하여 로그를 저장하는 프로세스이다.
/etc/rslog.conf 파일을 사용하여 저장할 로그의 종류 및 우선순위를 설정할 수 있고, 수신한 로그를 /var/log 디렉터리의 각 파일로 전달한다.

/etc/rslog.conf 파일

이 파일의 RULES 부분에는 rsyslog에 의해 전달되는 로그의 규칙들이 정의되어 있다. 각 라인별로 하나의 로그 규칙이 정의되어 있고 공백을 기준으로 앞부분을 필터(Filter), 뒷부분을 행동(Action)이라고 한다.

  • 필터부분: 현재 기능과 우선순위 형식
  • 행동부분: 필터에 해당하는 로그들이 저장되는 파일의 위치

실습

cron.err 보다 높은 등급의 에러가 발생하면 /var/log/cron1에 로그가 저장되게 만든다. 이후 rsyslog를 재시작 하기 위해 systemctl restart rsyslog를 진행한다. logger -p cron.info "cronlog1" -> info는 err보다 낮은 등급이므로 cron1에 저장이 안된다.
logger -p cron.crit "cronlog2" -> crit는 err보다 높은 등급이므로 cron1에 저장된다.

systemd-journald

systemd-journald는 시스템이 부팅을 시작했을 때부터 발생하는 모든 이벤트를 수집하여 구조화된 바이너리 형태의 저널데이터로 저장한다.
이로 인해 journal 파일은 cat으로 읽을 수 없고 journalctl 명령을 사용해야 읽을 수 있다. 저널 데이터는 /run/log/journal에 위치하고 있기 때문에 시스템이 재부팅 되면 저널 데이터는 사라진다.

journalctl

  • 저널 데이터를 조회하는 명령이다.
    • -r : 최근의 저널 데이터부터 역순으로 로그를 조회
    • -n 숫자 : 최근에 저장된 저널 데이터부터 일정 개수의 저널 데이터를 조회, 숫자를 입력하지 않으면 기본값 10이 지정
    • --since 'yyyy-mm-dd (time)'[ --until 'yyyy-mm-dd(time)' ] 지정된 시점부터 현재 시점까지 모든 저널 데이터를 출력, 특정 기간의 데이터를 출력할 경우 --until옵션을 함께 사용함

저널 데이터 영구적 저장

저널을 영구적으로 저장하기 위해서는 임시 파일시스템이 아닌 위치에 로그를 저장할 수 있는 디렉터리를 생성하고 기존의 저널 데이터가 저장되던 경로인 /run/log/journal 디렉터리와 동일하게 설정하면 된다.

단점 : journal을 영구적으로 저장하도록 설정하는 경우 디스크 용량 부족이 발생할 수 있다.

  • journal은 영구적으로 저장하기 위한 2가지 조건
  1. 현재 파일 시스템의 전체사이즈의 10퍼센트를 초과하면 안됨
  2. 현재 파일 시스템의 여유공간 중 15퍼센트를 초과하면 안됨
    -> 이 설정은 /etc/systemd/journal.conf 파일에서 변경가능
  • 기존 디렉터리인 /run/log/journal의 설정값을 보면 사용자 root, 그룹 systemd-journal이고 권한 정보에서 setgid 확장설정이 되어있는 것을 확인할 수 있다. 이 정보를 토대로 저널데이터를 영구적으로 저장할 디렉터리에 동일하게 설정해주면 된다.
    • mkdir /var/log/journal
    • chown root:systemd-journal /var/log/journal
    • chmod g+s /var/log/journal : 그룹에 setgid설정
    • systemctl restart systemd-journald
    • ls -l /run/log
    • ls -l /var/log/journal

  • journalctl --list-boots : 시스템을 재부팅 하게되면 새로운 부트번호가 생성된다. 이 옵션을 통해 시스템 재부팅으로 인해 분리된 저널 데이터를 각각 조회할 수 있다.
  • journlactl -b 특정부트번호 : 특정 부트번호에 해당하는 저널 데이터를 조회
profile
전공 소개

0개의 댓글