Syslogd 리눅스 및 유닉스 명령

Sysklogd는 시스템 로깅 및 커널 메시지 트래핑을 지원하는 두 가지 시스템 유틸리티를 제공합니다. 인터넷 및 유닉스 도메인 소켓을 모두 지원 하므로이 유틸리티 패키지는 로컬 및 원격 로깅을 모두 지원할 수 있습니다.

시스템 로깅은 BSD 소스에서 파생 된 syslogd (8) 버전에서 제공됩니다. klogd (8) 유틸리티는 커널 로깅을 지원하며 커널 로깅을 독립형으로 수행하거나 syslogd의 클라이언트로 수행 할 수 있습니다.

Syslogd는 많은 현대 프로그램에서 사용하는 일종의 로깅을 제공합니다. 기록 된 모든 메시지에는 적어도 시간과 호스트 이름 필드 (일반적으로 프로그램 이름 필드)가 포함되지만 로깅 프로그램이 얼마나 신뢰할 수 있는지에 따라 달라집니다.

syslogd 소스가 크게 수정되었지만 두 개의 메모가 순서대로 있습니다. 우선 syslogd가 기본 표준 BSD 동작을 따르도록 체계적으로 시도했습니다. 두 번째 중요한 개념은이 버전의 syslogd가 표준 라이브러리에있는 syslog 버전과 투명하게 상호 작용한다는 점입니다. 표준 공유 라이브러리에 링크 된 바이너리가 올바르게 작동하지 않으면 우리는 비정상적인 동작의 예를 원합니다.

기본 구성 파일 /etc/syslog.conf 또는 -f 옵션과 함께 제공되는 대체 파일은 시작시 읽습니다. 해쉬 마크 (``# '')로 시작하고 빈 줄은 무시됩니다. 파싱하는 동안 오류가 발생하면 전체 줄이 무시됩니다.

개요

syslogd [ -a 소켓 ] [ -d ] [ -f 구성 파일 ] [ -h ] [ -l 호스트 목록 ] [ -m 간격 ] [ -n ] [ -p 소켓 ] [ -r ] [ -s 도메인 목록 ] [ - v ] [ -x ]

옵션

- 소켓

이 인수를 사용하면 syslogd 에서 추가 소켓을 지정할 수 있습니다. chroot () 환경에서 데몬을 실행 시키려면이 작업이 필요합니다. 최대 19 개의 추가 소켓을 사용할 수 있습니다. 환경이 더 필요하면 syslogd.c 소스 파일 내에서 MAXFUNIX 기호를 늘려야 합니다. chroot () 데몬의 예제는 OpenBSD (http://www.psionic.com/papers/dns.html)의 사람들이 설명합니다.

-디

디버그 모드를 켭니다. 이 데몬을 사용하면 백그라운드에서 포크 (2)를 진행하지 않고 포 그라운드에 머물러있는 것과 반대가되며 현재 tty에 많은 디버그 정보를 기록합니다. 자세한 정보는 DEBUGGING 섹션을 참조하십시오.

-f 설정 파일

기본값 인 /etc/syslog.conf 대신 대체 구성 파일을 지정하십시오.

-h

기본적으로 syslogd는 원격 호스트에서받은 메시지를 전달하지 않습니다. 명령 행에서이 스위치를 지정하면 로그 디먼은 수신 된 모든 원격 메시지를 전달 호스트에 전달합니다.

-l hostlist

fqdn이 아닌 간단한 호스트 이름으로 만 기록되어야하는 호스트 이름을 지정하십시오. 콜론 (``: '') 구분 기호를 사용하여 여러 호스트를 지정할 수 있습니다.

-m 간격

syslogd 는 정기적으로 마크 타임 스탬프를 기록합니다. 두 개의 MARK 사이의 기본 간격 은 20 분입니다. 이 옵션으로 변경할 수 있습니다. 간격 을 0으로 설정하면 완전히 간격 을 끕니다.

-엔

자동 backgrounding을 피하십시오. 이것은 syslogdinit (8)에 의해 시작되고 제어되는 경우에 특히 필요합니다.

-p 소켓

/ dev / log 대신에 대체 유닉스 도메인 소켓을 지정할 수 있습니다.

-아르 자형

이 옵션을 사용하면 시설에서 syslog 서비스가있는 인터넷 도메인 소켓을 사용하여 네트워크에서 메시지를 수신 할 수 있습니다 ((5) 참조). 기본값은 네트워크에서 메시지를받지 않는 것입니다.

이 옵션은 sysklogd 패키지의 버전 1.3에 도입되었습니다. 기본 동작은 이전 버전의 동작 방식과 반대이므로이 기능을 켜야 할 수도 있습니다.

-s domainlist

로깅하기 전에 제거해야 할 도메인 이름을 지정하십시오. 여러 도메인은 콜론 (``: '') 구분 기호를 사용하여 지정할 수 있습니다. 하위 도메인은 지정하지 않고 전체 도메인 만 지정할 수 있습니다. 예를 들어, -s north.de 가 지정되고 호스트 로깅이 satu.infodrom.north.de로 해석되지 않으면 도메인이 제거되지 않을 것이므로 -s north.de:infodrom.north.de 와 같은 두 개의 도메인을 지정해야합니다.

-V

버전을 인쇄하고 종료하십시오.

-엑스

원격 메시지를받을 때 이름 조회를 사용하지 않습니다. 이렇게하면 syslog 데몬을 실행하는 동일한 시스템에서 네임 서버가 실행될 때 교착 상태가 발생하지 않습니다.

신호

syslogd 는 일련의 신호에 반응합니다. 다음을 사용하여 syslogd 로 신호를 쉽게 보낼 수 있습니다.

kill - 시그널`cat / var / run / syslogd.pid`

Sighup

이를 통해 syslogd 는 재 초기화를 수행 할 수 있습니다. 열려있는 모든 파일이 닫히고 구성 파일 (기본값은 /etc/syslog.conf )이 다시 읽히고 syslog (3) 기능이 다시 시작됩니다.

시걸

syslogd 가 종료됩니다.

SIGINT , SIGQUIT

디버깅이 활성화 된 경우 무시되며, 그렇지 않으면 syslogd 가 종료됩니다.

SIGUSR1

디버깅을 켜고 끕니다. 이 옵션은 syslogd-d 디버그 옵션으로 시작된 경우에만 사용할 수 있습니다.

SIGCHLD

벽에 걸린 메시지 때문에 태어난 아기가있을 때까지 기다리십시오.

구성 파일 구문 차이점

Syslogd 는 원래 BSD 소스와 약간 다른 구문을 사용합니다. 원래 특정 우선 순위 이상의 모든 메시지가 로그 파일로 전달되었습니다.

예를 들어, 다음 행은 / usr / adm / daemons 로 이동하기 위해 데몬 기능을 사용하는 데몬에서 모든 출력을 발생시킵니다 (디버그가 가장 낮은 우선 순위이므로 모든 상위 항목도 일치합니다).

# 예제 syslog.conf daemon.debug / usr / adm / daemons

새로운 계획 하에서,이 행동은 동일하게 유지됩니다. 차이점은 별표 ( * ) 와일드 카드, 수식 기호 ( = ), 느낌표 ( ! ) 및 빼기 기호 ( - )의 네 가지 새로운 지정자가 추가 된 것입니다.

* 는 지정된 기능에 대한 모든 메시지를 대상으로 지정하도록 지정합니다. 이 동작은 우선 순위 수준의 디버그를 지정하면 저하됩니다. 사용자는 별표 표기법이 더 직관적임을 나타냅니다.

= 와일드 카드는 지정된 우선 순위 클래스로 로깅을 제한하는 데 사용됩니다. 예를 들어, 디버그 메시지 만 특정 로깅 소스로 라우팅 할 수 있습니다.

예를 들어, syslog.conf 의 다음 행은 모든 소스의 디버그 메시지를 / usr / adm / debug 파일로 보냅니다.

# 샘플 syslog.conf *. = 디버그 / usr / adm / debug

! 지정된 우선 순위의 로깅을 제외하는 데 사용됩니다. 이는 우선 순위를 지정할 수있는 모든 (!) 가능성에 영향을 미칩니다.

예를 들어, 다음 행은 우선 순위 정보가있는 메일을 제외하고 설비 메일의 모든 메시지를 / usr / adm / mail 파일에 기록합니다. news.info (포함)에서 news.crit (제외)까지의 모든 메시지는 / usr / adm / news 파일에 기록됩니다.

# 예제 syslog.conf 메일. *; 메일.! = 정보 / usr / adm / mail news.info; news.! crit / usr / adm / news

직관적으로 예외 지정자로 사용할 수 있습니다. 위에서 언급 한 해석은 단순히 반전됩니다. 그렇게하면

mail.none

또는

우편.!*

또는

메일!

메일 기능과 함께 제공되는 모든 메시지를 건너 뜁니다. 그것으로 놀 수있는 많은 공간이 있습니다. :-)

파일을 쓸 때마다 파일을 동기화하지 않으려면 파일 이름의 접두사로만 사용할 수 있습니다.

순수한 BSD 동작에 익숙한 사람들에게는 약간의 적응이 필요할 수 있지만 테스터는이 구문이 BSD 동작보다 다소 유연하다는 것을 나타 냈습니다. 이러한 변경 사항은 표준 syslog.conf (5) 파일에 영향을 미치지 않습니다. 향상된 동작을 얻으려면 구성 파일을 특별히 수정해야합니다.

원격 로깅 지원

이러한 수정은 syslogd 기능에 대한 네트워크 지원을 제공합니다. 네트워크 지원은 syslogd를 실행하는 한 노드에서 syslogd를 실행하는 다른 노드로 메시지를 전달할 수 있음을 의미합니다. syslogd가 실제로 디스크 파일에 기록됩니다.

이를 가능하게하려면 명령 행에 -r 옵션을 지정해야합니다. 기본 동작은 syslogd 가 네트워크를 청취하지 않는다는 것입니다.

이 전략은 syslogd가 로컬로 생성 된 로그 메시지에 대해 유닉스 도메인 소켓에서 청취하도록하는 것입니다. 이 동작으로 인해 syslogd는 표준 C 라이브러리에있는 syslog와 상호 작동 할 수 있습니다. 동시에 syslogd는 다른 호스트에서 전달 된 메시지의 표준 syslog 포트를 수신합니다. 이 작업을 제대로 수행하려면 services (5) 파일 (일반적으로 / etc에 있음 )에 다음 항목이 있어야합니다.

syslog 514 / udp

이 항목에 syslogd 가 없으면 UDP 포트를 열 수 없으므로 원격 메시지를 수신하거나 보낼 수 없습니다. 대신 syslogd 가 즉시 죽어 오류 메시지가 나옵니다.

메시지를 다른 호스트로 전달하려면 syslog.conf 파일의 일반 파일 행을 메시지 앞에 @가 붙은 호스트 이름으로 바꿉니다.

예를 들어 다음 syslog.conf 항목을 사용하여 모든 메시지를 원격 호스트로 전달하려면 다음을 입력하십시오.

# syslogd 구성 파일을 # 원격 호스트에 보내는 메시지를 모두 전달합니다. *. * @hostname

모든 커널 메시지를 원격 호스트에 전달하려면 구성 파일은 다음과 같습니다.

# 모든 커널 # 메시지를 원격 호스트로 전달하는 샘플 구성 파일. kern. * @hostname

시작할 때 원격 호스트 이름을 확인할 수 없으면 이름 서버에 액세스 할 수 없으므로 (syslogd 이후에 시작할 수 있음) 걱정할 필요가 없습니다. Syslogd 는 이름을 10 번 해결하고 불평을 다시 시도합니다. 이것을 피할 수있는 다른 방법은 / etc / hosts에 호스트 이름을 두는 것입니다.

보통의 syslogd를 사용하면 원격 호스트에서 수신 한 메시지를 동일한 호스트로 보내거나 (세 번째 호스트에서 더 복잡해지면서 첫 번째 호스트로 다시 보내는 등) syslog 루프를 사용하게됩니다. 내 도메인 (Infodrom Oldenburg)에서는 우발적으로 하나의 디스크를 얻었고 디스크에는 동일한 단일 메시지가 채워졌습니다. :-(

이 시간을 피하기 위해 원격 호스트에서 수신 된 메시지는 더 이상 다른 (또는 동일한) 원격 호스트로 전송되지 않습니다. 시나리오가 이치에 맞지 않으면 저를 (조이) 한 줄을 떨어 뜨리십시오.

원격 호스트가 호스트와 동일한 도메인에 있으면 syslogd 가 실행되고 전체 fqdn 대신 간단한 호스트 이름 만 기록됩니다.

로컬 네트워크에서 모든 중요한 정보를 하나의 시스템에 보관할 수 있도록 중앙 로그 서버를 제공 할 수 있습니다. 네트워크가 서로 다른 도메인으로 구성되어 있으면 간단한 호스트 이름 대신 완전한 이름을 기록하는 것에 대해 불평하지 않아도됩니다. 이 서버의 스트립 도메인 기능을 사용할 수 있습니다. syslogd 에게 서버가 위치한 도메인이 아닌 여러 도메인을 제거하고 간단한 호스트 이름 만 기록하도록 지정할 수 있습니다.

-l 옵션을 사용하면 단일 호스트를 로컬 시스템으로 정의 할 수도 있습니다. 이것 역시 fqdns가 아닌 단순한 호스트 이름 만 로깅합니다.

원격 호스트에 메시지를 전달하거나 메시지를 수신하기 위해 사용되는 UDP 소켓은 필요한 경우에만 열립니다. 1.3-23 이전의 릴리스에서는 매번 열렸지 만 읽기 또는 전달을 위해 열리지 않았습니다.

Named Pipe (FIFO) 로의 출력

이 버전의 syslogd는 명명 된 파이프 (fifo)로 출력을 로깅 할 수 있습니다. fifo 또는 명명 된 파이프는 파일 이름에 파이프 기호 (``| '')를 추가하여 로그 메시지의 대상으로 사용할 수 있습니다. 이것은 디버깅에 편리합니다. syslogd를 시작하기 전에 FIFO를 mkfifo 명령으로 작성해야합니다.

다음 구성 파일은 커널의 디버그 메시지를 fifo로 라우팅합니다.

# 커널 디버깅 # 메시지를 # named pipe 인 / usr / adm / debug로만 라우트하는 예제 설정. 커널. = 디버그 | / usr / adm / debug

설치 문제

이 버전의 syslogd를 설치할 때 중요한 고려 사항이 하나 있습니다. syslogd의이 버전은 syslog 기능에 의한 메시지의 적절한 형식에 따라 다릅니다. 공유 라이브러리의 syslog 기능의 기능은 libc.so.4. [2-4] .n의 어딘가에서 변경되었습니다. 특별한 변화는 / dev / log 소켓으로 메시지를 전송하기 전에 메시지를 null로 종료하는 것이 었습니다. 이 버전의 syslogd의 올바른 작동은 메시지의 null-termination에 달려 있습니다.

이 문제는 일반적으로 오래된 정적으로 링크 된 바이너리가 시스템에서 사용되는 경우 자체적으로 나타납니다. syslog 함수의 이전 버전을 사용하는 바이너리는 빈 줄이 기록되고 그 뒤에 메시지의 첫 번째 문자가 제거 된 메시지가 기록됩니다. 이러한 바이너리를 새로운 버전의 공유 라이브러리에 다시 링크하면이 문제가 해결됩니다.

syslogd (8)와 klogd (8)은 init (8)에서 실행하거나 rc. * 시퀀스의 일부로 시작할 수 있습니다. init에서 시작되면 -n 옵션을 설정해야합니다. 그렇지 않으면 많은 수의 syslog 데몬이 시작됩니다. 이것은 init (8)이 프로세스 ID에 의존하기 때문입니다.

보안 위협

syslogd 데몬이 서비스 거부 공격의 도관으로 사용될 가능성이 있습니다. John Morrison (jmorriso@rflab.ee.ubc.ca)에게이 잠재력에 대해 알려 주신 것에 감사드립니다. 악의적 인 프로그램 (mer)은 syslogd 데몬을 syslog 메시지로 매우 쉽게 범람시킬 수 있습니다. 그 결과 로그 파일은 파일 시스템 의 나머지 모든 공간을 소모합니다. inet 도메인 소켓을 통한 로깅 활성화는 물론 시스템을 로컬 시스템의 프로그램이나 개인 외부의 위험에 노출시킵니다.

컴퓨터를 보호하는 데는 여러 가지 방법이 있습니다.

  1. 커널 방화벽을 구현하여 어느 호스트 또는 네트워크가 514 / UDP 소켓에 액세스 할 수 있는지 제한하십시오.
  2. 로깅은 고립 된 파일 시스템이나 루트가 아닌 파일 시스템으로 보내질 수 있으며, 파일 시스템이 가득차면 시스템을 손상시키지 않습니다.
  3. ext2 파일 시스템을 사용하여 특정 비율의 파일 시스템을 루트에 의한 사용으로 제한하도록 구성 할 수 있습니다. syslogd를 비 루트 프로세스로 실행해야합니다. 또한 syslogd가 514 / UDP 소켓에 바인드 할 수 없기 때문에 이렇게하면 원격 로깅 사용이 금지됩니다.
  4. inet 도메인 소켓을 비활성화하면 로컬 시스템의 위험이 제한됩니다.
  5. 4 단계를 사용하고 문제가 지속되고 불량 프로그램 / 데몬이 2 차가 아닌 경우 3.5 피트 (약 1 미터) 길이의 빨판 막대 *를 가져 와서 해당 사용자와 채팅하십시오. 빨판 막대 def. --- 3/4, 7/8 또는 1in. 경화 된 강철 막대, 양쪽 끝에 나사산이있는 남성. Western North Dakota 및 기타 지역의 석유 산업에서 유정에서 오일을 빨아들입니다. 2 차 용도는 가축 사료 제비를 만들고 가끔 난폭 한 또는 호전적 인 개인을 다루는 것입니다.

디버깅

-d 옵션을 사용하여 디버깅을 설정하면 syslogd 는 stdout에서 수행하는 작업의 상당 부분을 작성하여 매우 자세한 정보를 표시합니다. 구성 파일을 다시 읽고 다시 구문 분석 할 때마다 내부 데이터 구조에 해당하는 표가 나타납니다. 이 도표는 4 개의 필드로 구성됩니다.

번호

이 필드에는 0으로 시작하는 일련 번호가 있습니다. 이 숫자는 내부 데이터 구조 (즉, 배열)의 위치를 ​​나타냅니다. 하나의 숫자가 생략되면 /etc/syslog.conf 의 해당 행에 오류가있을 수 있습니다.

무늬

이 필드는 까다 롭고 내부 구조를 정확하게 나타냅니다. 모든 열은 기능을 나타냅니다 ( syslog (3) 참조). 보시다시피, 이전 시설로 남아있는 시설이 아직 남아 있습니다. 가장 왼쪽의 것만 사용됩니다. 열의 모든 필드는 우선 순위를 나타냅니다 ( syslog (3) 참조).

동작

이 필드는 패턴과 일치하는 메시지를받을 때마다 발생하는 특정 작업을 설명합니다. 가능한 모든 작업은 syslog.conf (5) 맨 페이지를 참조하십시오.

인수들

이 필드는 마지막 필드의 활동에 대한 추가 인수를 표시합니다. 파일 로깅의 경우 이것은 로그 파일의 파일 이름입니다. 사용자 로깅의 경우 이는 사용자 목록입니다. 원격 로깅의 경우 이것은 로그온 할 시스템의 호스트 이름입니다. 콘솔 로깅의 경우 이것은 사용 된 콘솔입니다. tty-logging의 경우 이것은 지정된 tty입니다. 벽에는 추가 인수가 없습니다.

참고 사항

logger (1), syslog (2), (5)

공동 작업자

Syslogd 는 BSD 소스에서 가져온 것이고 Greg Wettstein (greg@wind.enjellic.com)은 Linux 로이 포트를 수행했으며 Martin Schulze (joey@linux.de)는 몇 가지 버그를 수정하고 몇 가지 새로운 기능을 추가했습니다. Klogd 는 원래 Steve Lord (lord@cray.com)에 의해 작성되었으며, Greg Wettstein은 크게 개선되었습니다.

Dr. Greg Wettstein
Enjellic 시스템 개발

종양학 연구실 컴퓨터 시설
로저 마리스 암 센터
파고, 노스 다코타 주
greg@wind.enjellic.com

스티븐 트위디
컴퓨터 과학과
에딘버러 대학교, 스코틀랜드
sct@dcs.ed.ac.uk

주하 비르 타넨
jiivee@hut.fi

쉐인 알더턴
shane@ion.apana.org.au

마틴 슐츠
인포 트롬 올덴 부르크
joey@linux.de

중요 : man 명령 ( % man )을 사용하여 특정 컴퓨터에서 명령이 어떻게 사용되는지보십시오.

관련 기사