CentOS 7 이상부터 systemd 로 환경이 변하면서 싱글모드 또한 기존의 방법으로 진입자체가 안됩니다.
따라서 아래 정리된 매뉴얼로 진행해 보시기 바랍니다.


시간이 지나 root패스워드가 가물가물할경우 혹시나 해서 로그인시 역시나 틀리다고 나올경우 아래와 같이 따라하시면 되겠습니다.

1. 서버 재부팅

패스워드를 몰라 서버에 접근할수없으니 Ctrl + Alt + Del 키로 재부팅을 진행합니다.
해당 키로 재부팅이 되지 않는다면, 어쩔수 없이 강제적인 재부팅 방법 뿐입니다.

2. 재부팅 진행시 edit mode 진입

상위 화면에서 e 버튼을 눌러 다음 모드로 진입합니다.

3. edit mode

edit mode의 첫화면입니다. 원하는 구문이 보이지 않아 아래로 내립니다.
상위 붉은 박스안의 내용에서 확인해야 할 사항은 다음과 같습니다.

ro : / 파티션을 read only로 마운트 하겠다는 옵션입니다.
init을 명령어가 가능한 쉘인 /bin/bash 로 지정해야합니다.

아래와 같이 변경합니다.

변경된 사항

rhgb quiet ----> init=/bin/bash
ro옵션은 single mode 진행후 rw로 재마운트하여 진행

4. single mode 진입
Ctrl + x를 눌러서 원하는 single mode로 진입합니다.

5. 패스워드 변경 1차 시도

상위와 같이 에러를 발생시킵니다.

6. 패스워드 변경 2차 시도

/ 파티션에 대한 재마운트 진행후 패스워드를 변경합니다.

재마운트 명령어
mount -o remount,rw /

7. 재부팅

부팅시 시스템이 전체 SELinux relabel을 자동으로 수행하도록 구성
(passwd 도구가 /etc/shadow 파일을 SELinux context없이 다시 만들기 때문이라고 합니다.)

touch /.autorelabel
명령어 입력후 재부팅을 진행합니다.

8. 로그인

이제 상위와 같이 변경된 패스워드로 접근이 가능합니다.

 

출처 : https://blog.naver.com/PostView.naver?blogId=ncloud24&logNo=221567607811&proxyReferer=https:%2F%2Fwww.google.com%2F&trackingCode=external

Logrotate 란?

 

리눅스내에서 시스템에 있는 모든 로그파일들을 관리할 수 있으며, 이들 로그파일들을 날짜를 지정하여 주기적으로 압축, 백업, 삭제, 메일로 보내는 등의 작업을 할 수 있도록 하여주는 기능

==============================================================

Logrotate가 필요한 이유

 

리눅스를 서버로 돌리면 하루에도 많은 로그 파일들이 생성된다. 서버 용량은 한정되어 있고 이와 같은 로그들이 차곡차곡 쌓이다보면 로그로 인해 하드 용량이 부족한 경우가 생겨 성능이 떨어질 수 있는데 매번 수동으로 로그파일이 저장되는 곳으로 이동하여 하나하나 삭제하는 일은 번거로운 일이 아닐수 없습니다. 이와 같이 로그파일를 수동으로 관리하지 않고 logrotate기능을 사용한다면 보다 효과적으로 관리할 수 있을것입니다.

 

rqm -qa | grep logrotate

 

yum -y install logrotate

==============================================================

기본적인 옵션 정보

 

daily : 매일 로테이트 진행

weekly : 매주 로테이트 진행
monthly : 매달 로테이트 진행
yearly : 매년 로테이트 진행
rotate [파일갯수] : 로테이트 진행될 파일갯수 ex) rotate 5
compress : 로테이트 진행된 로그파일 압축(gzip)

create [권한] [유저] [그룹] : 로테이트 되는 로그파일 권한 지정 ex) create 644 root root

nocompress : 로테이트 진행된 로그파일을 압축하지 않는다(기본값) 

compresscmd [압축명] : gzip 이외의 압축프로그램 지정 

uncompresscmd : 압축해제 명령 지정(기본값 : gunzip)
compressext [확장자명] : 압축된 백업 로그파일에 지정할 확장자 설정 
compressoptions [옵션] : 압축 프로그램에 대한 옵션 설정(-9 : 압축률 최대) 
dateext : 로그파일에 YYYYMMDD형식의 확장자 추가  백업 파일의 이름에 날짜가 들어가도록 함  
errors [메일주소] : 에러 발생시 지정된 메일주소로 메일발송
extention 확장자명 : 로테이트 진행된 로그파일의 확장자 지정 
ifempty : 로그파일이 비어있는 경우 로테이트 진행 (기본값)

noifempty : 로그파일이 비어있는 경우 순환하지 않는다 

mail [메일주소] : 순환후 이전 로그파일을 지정된 메일주소로 발송 
maxage : count로 지정된 날수가 지난 백업 파일 삭제 ex) maxage 30 30dl
missingok : 로그파일이 없을 경우에도 에러 처리하지 않는다
prerotate / endscript : 로테이트 진행작업 전에 실행할 작업 설정
postrotate / endscript : 로테이트 진행작업 후에 실행할 작업 설정
sharedscripts : prerotate, postrotate 스크립트를 한번만 실행 
size [사이즈] :  로테이트 진행 결과 파일사이즈가 지정한 크기를 넘지않도록 설정 
                            지정된 용량보다 클 경우 로테이트 실행 ex) size +100k
copytruncate : 현재 로그파일의 내용을 복사하여 원본 로그파일의 크기를 0으로 생성

==============================================================

logrotate 구동순서

 

 

 

cron(주기적으로 반복되는 일을 자동적으로 실행될수 있도록 설정해놓는 것, 데몬)을 이용해 logrotate 실행

 

crontab > cron.daily > logrotate > logrotate.conf > logrotate.d

 

vi  /etc/logrotate.conf

 

# see "man logrotate" for details

# rotate log files weekly   

#로그파일을 순환할 기간을 설정합니다 (yearly:매년, monthly:매달, weekly:매주, daily:매일)

 

weekly

 

# keep 4 weeks worth of backlogs  

#순환될 파일의 개수를 설정합니다. 최소값은 0입니다.

#예를들어 위에서 weekly로 설정하고 rotate 4를 주게되면 4주간 보관한뒤 순환하게 되며,

#위에서 daily로 설정하고 rotate 15를 주게되면 15일간 보관한뒤 순환하게 된다는 의미입니다.

 

rotate 4

 

# create new (empty) log files after rotating old ones 

#로그파일을 백업하고 새로운 파일을 생성할 것인지를 설정합니다.

create

 

#uncomment this if you want your log files compressed

#순환된 로그파일을 압축할것인지를 설정합니다.(압축방식 : gzip)

 

#compress

 

# RPM packages drop log rotation information into this directory

#로그 순환정보를 가진 디렉토리를 불러옵니다.

include /etc/logrotate.d

 

# no packages own wtmp -- we'll rotate them here

#/var/log/wtmp의 로그설정을 합니다.

#monthly, rotate 1, minsize 1M이므로 한달에 한번 로그파일용량이 1M가 되면 순환하게 되며

#백업파일은 root사용자의 utmp그룹의 소유로 퍼미션 644를 부여합니다.

 

/var/log/wtmp {

    monthly

    minsize 1M

    create 0664 root utmp

    rotate 1

}

==============================================================

vi /etc/logrotate.d/apache

==============================================================

/usr/local/apache/logs/*log{

weekly

rotate 5

compress

missingok

create 644 root root

dateext

}

==============================================================

정상적으로 동작하기 위해서 강제로 logrotate를 실행해보자.

강제로 실행하기 위해서는 다음과 같이 명령어를 입력하면 된다.
/usr/sbin/logrotate -f /etc/logrotate.conf

 

출처 : https://93it-security-service.tistory.com/123

RockyLinux 8.x 에는 openssl 1.1.1 버전이 설치되어 있으므로 기존 openssl 라이브러리인 libcrypto.so.10, libssl.so.10 파일이 존재하지 않는 것 같습니다.

​RockyLinux 8.x 에 libcrypto.so.10, libssl.so.10 파일을 설치하는 방법은 다음과 같은 것 같습니다.

# yum install compat-openssl10
compat-openssl10 패키지에 포함된 파일 리스트는 다음과 같습니다.

# repoquery -l compat-openssl10
/etc/pki
/etc/pki/openssl10.cnf
/usr/lib/.build-id
/usr/lib/.build-id/7b
/usr/lib/.build-id/7b/b58c473d7139e785790ba04ff391537f6dd1f9
/usr/lib/.build-id/97
/usr/lib/.build-id/97/f01bd6cb968372c03fea6fc7c0806adbf40ba0
/usr/lib64/.libcrypto.so.1.0.2o.hmac
/usr/lib64/.libcrypto.so.10.hmac
/usr/lib64/.libssl.so.1.0.2o.hmac
/usr/lib64/.libssl.so.10.hmac
/usr/lib64/libcrypto.so.1.0.2o
/usr/lib64/libcrypto.so.10
/usr/lib64/libssl.so.1.0.2o
/usr/lib64/libssl.so.10
/usr/share/doc/compat-openssl10
/usr/share/doc/compat-openssl10/FAQ
/usr/share/doc/compat-openssl10/NEWS
/usr/share/doc/compat-openssl10/README
/usr/share/doc/compat-openssl10/README.FIPS
/usr/share/doc/compat-openssl10/README.legacy-settings
/usr/share/licenses/compat-openssl10
/usr/share/licenses/compat-openssl10/LICENSE
/etc/pki
/etc/pki/openssl10.cnf
/usr/lib/.build-id
/usr/lib/.build-id/e5
/usr/lib/.build-id/e5/0572ab24f698a413b17a4bc6639ee04141e074
/usr/lib/.build-id/fd
/usr/lib/.build-id/fd/db58815e208df6a4da932ace9b21df133a9265
/usr/lib/.libcrypto.so.1.0.2o.hmac
/usr/lib/.libcrypto.so.10.hmac
/usr/lib/.libssl.so.1.0.2o.hmac
/usr/lib/.libssl.so.10.hmac
/usr/lib/libcrypto.so.1.0.2o
/usr/lib/libcrypto.so.10
/usr/lib/libssl.so.1.0.2o
/usr/lib/libssl.so.10
/usr/share/doc/compat-openssl10
/usr/share/doc/compat-openssl10/FAQ
/usr/share/doc/compat-openssl10/NEWS
/usr/share/doc/compat-openssl10/README
/usr/share/doc/compat-openssl10/README.FIPS
/usr/share/doc/compat-openssl10/README.legacy-settings
/usr/share/licenses/compat-openssl10
/usr/share/licenses/compat-openssl10/LICENSE


출처 :https://blog.naver.com/websearch/223125226220

리눅스 rpm 패키지는 의존적이다. 특정 패키지를 설치하기 위해서는 의존하고 있는 다른 패키지가 설치되어 있어야 한다.

패키지 의존성을 확인하려면 rpm 명령어에 -qpR 옵션을 사용하면 된다.

rpm -qpR [패키지명]

예를 들어 리눅스에 있는 openssl-1.0.2k-19.el7.x86_64.rpm 설치 시 필요한 의존성 확인을 위해서는

[root@newhost rpm]# rpm -qpR openssl-1.0.2k-19.el7.x86_64.rpm
/bin/bash
/bin/sh
coreutils
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.15)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.7)(64bit)
libcom_err.so.2()(64bit)
libcrypto.so.10()(64bit)
libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit)
libcrypto.so.10(OPENSSL_1.0.2)(64bit)
libcrypto.so.10(libcrypto.so.10)(64bit)
libdl.so.2()(64bit)
libgssapi_krb5.so.2()(64bit)
libk5crypto.so.3()(64bit)
libkrb5.so.3()(64bit)
libssl.so.10()(64bit)
libssl.so.10(libssl.so.10)(64bit)
libz.so.1()(64bit)
make
openssl-libs(x86-64) = 1:1.0.2k-19.el7
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

이런 식으로 확인할 수 있다.


다만 여기 출력된 건 말그대로 필요한 패키지 목록일뿐 이 리눅스에 해당 패키지들이 설치가 되어 있는지를 알려주지는 않는다. 
그래서 이거 확인하는 게 큰 의미가 있나… 싶은 생각도 들긴 한다.

하지만 필요한 glibc 버전을 알 수 있다는 점에서 어느 정도 도움은 되지 않나 싶다.

libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.15)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.7)(64bit)

이런 식으로 같은 so 라이브러리에 대해 여러 개의 GLIBC 버전이 보이기도 하는데 이중 가장 높은 버전의 GLIBC 버전이 설치되어 있어야 한다고 생각하면 된다.
이 경우엔 GLIBC_2.15이 설치되어 있어야 된다.

ldd 버전을 확인하면 현재 리눅스에 설치된 glibc 버전을 볼 수 있다.

[root@newhost rpm]# ldd --version
ldd (GNU libc) 2.17

출처 : https://binwrite.com/linux-rpm-dependencies/

원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어

Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

본문 : http://www.ischo.net -- 조인상 //시스템 엔지니어

+++++++++++++++++++++++++++++++++++++++++++++++++++++++



아래와 같은 오류가 발생하면, 99.9% /etc/mail/local-host-names 설정이 잘못되어 있기 때문이다.

  ----- The following addresses had permanent fatal errors -----
<center@center.co.kr>
  (reason: 553 5.3.5 system config error)

  ----- Transcript of session follows -----
553 5.3.5 217.129.242.1. config error: mail loops back to me (MX problem?)
554 5.3.5 Local configuration error


local-host-names 파일에 center.co.kr 도메인 이름을 추가하고,

sendmail 데몬을 다시 시작하면, 메일을 받을 수 있다.

물론, center.co.kr 도메인에 대한 MX 레코드가 해당 메일 서버로 지정되어 있어야만 한다.

 

출처 : https://ischo.net/bd_sun/757

출처 : http://coffeenix.net/board_view.php?bd_code=1678

제  목 : find명령에서 특정 디렉토리 제외하고 찾기(exclude)
작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
작성일 : 2009.7.3(금)

find 명령을 할 때, 특정 디렉토리 제외하고 find하는 방법은 없느냐고 주위분이 물어오셨다. 
개인적으로는 find에서 특정 디렉토리를 exclude하는 것 대신에 디렉토리를 나열하는 방법을 사용했다. 그러나 디렉토리 갯수가 많고, 같은 depth의 디렉토리가 아니고 하위 특정 디렉토리 몇개를 exclude해야한다면? 옵션을 활용할 수 밖에 없을 것이다.

man페이지를 확인해보니 -prune옵션이 있다. -prune 옵션은 찾아낸 것이 디렉토리이면 그 디렉토리내에는 find하지 않는다.

 
-name pattern
       ... 생략 ...
       To ignore a directory and the files under it, use -prune; see an example in the description of -wholename.

-prune If -depth is not given, true; if the file is a directory, do not descend into it.
       If -depth is given, false; no effect.
 



1. 예제로 살펴보기

[예제 1] 2009가 포함된 파일을 찾는다. 단 파일명이 디렉토리에 해당되면 해당 디렉토리 이하는 찾지 않는다.

find (전체 보기)
./
./check/check_list_2008_12.php
./check/check_list_2009_05.php
./check/check_list_2009_06.php
./2007_10_mobile
./2008_01_highlight
./2008_01_highlight/view.pl
./2008_01_highlight/view.sh
./2009_03_MSIE8
./2009_03_MSIE8/get_MSIE8.sh
./2009_05_apache
./2009_05_game
./2009_05_game/2009_05.log
find . -name "*2009*" -prune
./check/check_list_2009_05.php
./check/check_list_2009_06.php
./2009_03_MSIE8
./2009_05_apache
./2009_05_game

./2009_05_game/ 디렉토리 이하에 2009_05.log 파일이 있지만, -prune옵션으로 해당 디렉토리 이하는 찾지 않았다.

[예제 2] ./foo/bar 디렉토리는 제외하고, *.txt 파일을 찾아라.

find . ! \( -path './foo/bar' -prune \) -name "*.txt"
find . ! \( -type d -path './foo/bar' -prune \) -name "*.txt" (보다 정확한 표현)

[예제 3] ./foo/bar 디렉토리와 ./coffeenix/temp 디렉토리는 제외하고, *.bak 파일을 찾아라.

find . ! \( \( -path './foo/bar' -o -path './coffeenix/temp' \) -prune \) -name "*.bak"
find . ! \( \( -type d -path './foo/bar' -o -path './coffeenix/temp' \) -prune \) -name "*.bak" (보다 정확한 표현)

[예제 4] ./2008로 시작하는 디렉토리는 제외하고, .*.bak 파일을 찾아라.

find . ! \( -path './2008*' -prune \) -name "*.bak"
find . ! \( -type d -path './2008*' -prune \) -name "*.bak" (보다 정확한 표현)

-path 대신 -wholename 옵션을 사용해도 된다.

 
-path pattern
      See -wholename.   The predicate -path is also supported by HP-UX find.

-wholename pattern
      File name matches shell pattern pattern.  The metacharacters do not treat `/' or `.' specially; so, for example,
                find . -wholename './sr*sc'
      will  print  an entry for a directory called './src/misc' (if one exists).  To ignore a whole directory tree, use -prune rather
      than checking every file in the tree.  For example, to skip the directory `src/emacs' and all files and directories  under  it,
      and print the names of the other files found, do something like this:
                find . -wholename './src/emacs' -prune -o -print
 



2. 참고자료

* find manpage
  http://unixhelp.ed.ac.uk/CGI/man-cgi?find

* 유용한 find 명령어 예 모음 (2003, 글 좋은진호)
  http://coffeenix.net/board_view.php?bd_code=36

DNS 관련 포트 설정시 TCP 53번, UDP 53번을 허용해야 한다.
(다시 말해 네임서버 소프트웨어는 TCP도 지원을 할 필요가 있다)

[RFC1123 - 6.1.3.2]
DNS resolvers and recursive servers MUST support UDP, and SHOULD
support TCP, for sending (non-zone-transfer) queries.
https://tools.ietf.org/html/rfc1123#section-6.1.3.2

의무 사항은 아니나 권장이 되는 사항이다.

일반적인 DNS 질의는 UDP를 통해 이루어진다.
DNS 질의과정이 TCP를 쓰는 경우는 다음과 같다.

1. Zone-Transfer(AXFR/IXFR)

Master-Slave 구성시 Zone Transfer가 이루어지는데, 이때는 TCP를 사용하여 Zone File을 주고받는다.
전체 복사인 AXFR, 증분 복사인 IXFR 모두 TCP를 사용한다.

(BIND9 Zone-Transfer 로그)

2. 메시지가 512byte를 초과하는 경우

DNS 메시지에는 UDP 사용시 512byte 제한이 있다.

일반적인 DNS 메시지가 512byte를 초과하는 경우는 거의 없으나,
DNSSEC, IPv6 등에서 512byte를 초과하는 일이 종종 발생한다.

특히, NSEC3 레코드 등은 거의 필수적으로 512byte를 초과한다.


서버에서 주려는 응답이 512byte를 초과하는 경우,
TC Flag를 이용하여 DNS 질의자와 응답자는 TCP를 통해 질의 응답을 진행하게 된다.

(NSEC3 레코드는 사실상 512바이트를 초과할 수 밖에 없다)

요즘은 EDNS0 메커니즘에 의해,
EDNS0을 지원하는 조합이라면 512byte 이상의 UDP 메시지를 보낼 수 있다.
(권장되는 EDNS Payload는 512~4096byte이다)

하지만, 모든 클라이언트가 EDNS0을 지원하는 것은 아니며,
일부 오래된 방화벽이나 네트워크 정책 등에 의하여 512byte가 넘는 UDP 질의응답이 차단될 수도 있다.

[출처] https://dev.dwer.kr/2020/03/dns-tcp.html

EPEL 활성화 : yum install epel-release
관련 패키지 : yum install ntfs-3g ntfsprogs

리눅스 NTFS 포맷

mkntfs -f -L [사용할 볼륨 레이블 명] -v 장치명
ex) mkntfs -f -L BackupFile -v /dev/sdb1

-f : 빠른 포맷(= --fast) 동일한 기능 옵션으로 -Q(= --quick)를 사용 할 수 있음
-L : 볼륨 레이블명 설정(= --label)
-v : 자세한작업 수행 정보 출력(= --verbose)

리눅스 NTFS 마운트

mount -t ntfs-3g /dev/sdb1 /backup -o force,locale=ko_KR.euckr (시스템 로케일 설정과는 무관)
-o force,locale=ko_KR.euckr 옵션 미 적용 시 한글 인식이 안되어 한글 폴더, 파일 생성이 불가능하다.

리눅스 서버는 /etc/machine-id 라는 파일이 있다. 해당 파일은 machine의 고유 아이디값을 랜덤하게 생성하여 저장된 것으로 32글자로 된 16바이트/128비트 의 UUID값이다.

 machine-id는 dbus 또는 systemd 동작에 관련되어 있으며 /etc/machine-id 는 기본적으로 /var/lib/dbus/machine-id 에 심볼릭 링크되어있는 경우도 있다.

일단 해당 파일이 없는경우 어떤 문제가 일어나는지 알아보자

[    2.680252] systemd[1]: Inserted module 'ip_tables'
[    3.751916] systemd-journald[665]: Failed to get machine id: No such file or directory
[    3.755044] systemd-journald[677]: Failed to get machine id: No such file or directory
[    3.757980] systemd-journald[678]: Failed to get machine id: No such file or directory
[    3.760862] systemd-journald[679]: Failed to get machine id: No such file or directory
[    3.763454] systemd-journald[680]: Failed to get machine id: No such file or directory
[    4.023763] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:26] Failed to replace specifiers: /run/log/journal/%m
[    4.023804] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:28] Failed to replace specifiers: /run/log/journal/%m
[    4.023838] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:29] Failed to replace specifiers: /run/log/journal/%m
[    4.023873] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:32] Failed to replace specifiers: /var/log/journal/%m
[    4.023910] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:33] Failed to replace specifiers: /var/log/journal/%m/system.journal
[    4.031224] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:37] Failed to replace specifiers: /var/log/journal/%m
[    4.031259] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:38] Failed to replace specifiers: /var/log/journal/%m
[    4.031292] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:39] Failed to replace specifiers: /var/log/journal/%m/system.journal

시스템의 dmesg내용을 보면 위와같은 항목이 나타나게 된다. 이것은 systemd가 부팅시 machine-id 를 읽어 관련 동작을 초기화하는데 있어 machine-id값이 없어서 나는 오류메시지 이다.
파일이 없으면 자동으로 생성하면 되는게 아닌가 싶은데 일단 파일이 없는경우 자동생성되지 않고 위와같이 오류메세지가 나타난다.

또한 이 오류로 인해 systemd 관련 로그가 생성되지 않는다. 즉 대부분의 /var/log/에 쌓이는 로그들이 정상적으로 기록되지 않는다.

해결법

위 증세를 해결하기 위해서는 반드시 /etc/machine-id라는 파일이 존재하여야 한다.
두가지 방법이 있는데 아래를 참조하면 된다.

  • systemd-machine-id-setup 이용하는 방법
rm -f /etc/machine-id /var/lib/dbus/machine-id
systemd-machine-id-setup
  • dbus-uuidgen 사용법
rm -f /etc/machine-id /var/lib/dbus/machine-id
dbus-uuidgen --ensure=/etc/machine-id
dbus-uuidgen --ensure

시스템 재부팅 할 것~!

출처 : https://atl.kr/dokuwiki/doku.php/machine-id

  • 리눅스 history 날짜/시간 적용 방법

history에 날짜/시간을 적용하는 방법 자체도 매우 쉽고, 사용 하다보면 history에 날짜/시간이 적용되지 않아 history를 추적하기 힘든 상황이 발생할 수 있기 때문에 되도록 history에는 날짜와 시간을 적용하여 사용하는것이 좋습니다.

아래와 같이 /etc/profile 파일을 vi 편집기로 열은 후 맨 마지막 줄에 HISTTIMEFORMAT="[%Y-%m-%d_%H:%M:%S]  " 를 넣어주면 끝 입니다.

vi /etc/profile

# 맨 마지막 줄로 이동하여 아래 내용 기입
HISTTIMEFORMAT="[%Y-%m-%d_%H:%M:%S]  "
:wq

또는 아래와 같이 한줄로 간단하게 적용할 수 있습니다.

echo "HISTTIMEFORMAT=\"[%Y-%m-%d_%H:%M:%S]  \"" >> /etc/profile

적용 후 원격터미널을 로그아웃 후 재접속한 뒤 history 명령을 실행하면 입력했던 명령어 앞에 날짜와 시간이 나오는 것을
확인할 수 있다.

출처 : https://nirsa.tistory.com/234