Syslogd Linux và lệnh Unix

Sysklogd cung cấp hai tiện ích hệ thống cung cấp hỗ trợ cho việc ghi nhật ký hệ thống và bẫy thông điệp hạt nhân. Hỗ trợ cả cổng kết nối internet và unix cho phép gói tiện ích này hỗ trợ cả đăng nhập cục bộ lẫn từ xa.

Ghi nhật ký hệ thống được cung cấp bởi một phiên bản syslogd (8) có nguồn gốc từ các nguồn BSD kho. Hỗ trợ ghi nhật ký hạt nhân được cung cấp bởi tiện ích klogd (8) cho phép ghi nhật ký hạt nhân được thực hiện theo kiểu độc lập hoặc như một ứng dụng khách của syslogd.

Syslogd cung cấp một loại đăng nhập mà nhiều chương trình hiện đại sử dụng. Mỗi thông điệp đã đăng nhập có chứa ít nhất một thời gian và một trường tên máy chủ, thường là trường tên chương trình, nhưng điều đó phụ thuộc vào mức độ đáng tin cậy của chương trình ghi nhật ký.

Trong khi các nguồn syslogd đã được sửa đổi rất nhiều, một vài ghi chú theo thứ tự. Trước hết, đã có một nỗ lực có hệ thống để đảm bảo rằng syslogd tuân theo hành vi BSD mặc định của nó. Khái niệm quan trọng thứ hai cần lưu ý là phiên bản syslogd này tương tác một cách minh bạch với phiên bản syslog được tìm thấy trong các thư viện chuẩn. Nếu một nhị phân liên kết với các thư viện được chia sẻ tiêu chuẩn không hoạt động đúng, chúng tôi muốn một ví dụ về hành vi bất thường.

Tệp cấu hình chính /etc/syslog.conf hoặc một tệp thay thế, được cung cấp với tùy chọn -f , được đọc khi khởi động. Bất kỳ dòng nào bắt đầu bằng dấu băm (`` # '') và các dòng trống sẽ bị bỏ qua. Nếu xảy ra lỗi trong khi phân tích cú pháp toàn bộ dòng bị bỏ qua.

Tóm tắc

syslogd [ -a socket ] [ -d ] [ -f tập tin cấu hình ] [ -h ] [ -l hostlist ] [ -m interval ] [ -n ] [ -p socket ] [ -r ] [ -s domainlist ] [ - v ] [ -x ]

Tùy chọn

- ổ cắm

Sử dụng đối số này, bạn có thể chỉ định các ổ cắm bổ sung từ syslogd đó để nghe. Điều này là cần thiết nếu bạn sẽ để cho một số daemon chạy trong môi trường chroot (). Bạn có thể sử dụng tới 19 ổ cắm bổ sung. Nếu môi trường của bạn cần nhiều hơn, bạn phải tăng biểu tượng MAXFUNIX trong tệp nguồn syslogd.c. Một ví dụ cho một daemon chroot () được mô tả bởi những người từ OpenBSD tại http://www.psionic.com/papers/dns.html.

-d

Bật chế độ gỡ lỗi. Sử dụng này daemon sẽ không tiến hành một ngã ba (2) để thiết lập chính nó trong nền, nhưng đối diện với ở lại ở phía trước và viết nhiều thông tin gỡ lỗi trên tty hiện tại. Xem phần DEBUGGING để biết thêm thông tin.

-f tệp cấu hình

Chỉ định một tệp cấu hình thay thế thay vì /etc/syslog.conf , là mặc định.

-h

Theo mặc định syslogd sẽ không chuyển tiếp thư mà nó nhận được từ máy chủ từ xa. Chỉ định chuyển đổi này trên dòng lệnh sẽ làm cho daemon đăng nhập chuyển tiếp bất kỳ thư từ xa nào mà nó nhận được để chuyển tiếp các máy chủ đã được xác định.

-l danh sách máy chủ

Chỉ định tên máy chủ chỉ được ghi nhật ký với tên máy chủ đơn giản chứ không phải fqdn. Có thể chỉ định nhiều máy chủ bằng dấu phân cách dấu hai chấm (``: '').

-m interval

Syslogd ghi nhật ký dấu thời gian thường xuyên. Khoảng thời gian mặc định giữa hai - MARK - dòng là 20 phút. Điều này có thể được thay đổi với tùy chọn này. Đặt khoảng thời gian thành 0 sẽ tắt hoàn toàn.

-n

Tránh tự động chạy nền. Điều này là cần thiết đặc biệt là nếu syslogd được bắt đầu và được điều khiển bởi init (8).

-p ổ cắm

Bạn có thể chỉ định một ổ cắm thay thế unix miền thay vì / dev / log .

-r

Tùy chọn này sẽ cho phép cơ sở nhận tin nhắn từ mạng bằng cách sử dụng một ổ cắm miền internet với dịch vụ nhật ký hệ thống (xem (5)). Mặc định là không nhận được bất kỳ tin nhắn nào từ mạng.

Tùy chọn này được giới thiệu trong phiên bản 1.3 của gói sysklogd. Xin lưu ý rằng hành vi mặc định ngược lại với cách các phiên bản cũ hoạt động, vì vậy bạn có thể phải bật tính năng này.

-sanh sách tên miền

Chỉ định tên miền cần được loại bỏ trước khi đăng nhập. Nhiều tên miền có thể được chỉ định bằng dấu phân cách dấu hai chấm (``: ''). Xin lưu ý rằng không thể chỉ định tên miền phụ nhưng chỉ có toàn bộ tên miền. Ví dụ: nếu -s north.de được chỉ định và lưu trữ nhật ký máy chủ phân giải thành satu.infodrom.north.de không có miền nào bị cắt, bạn sẽ phải chỉ định hai tên miền như: -s north.de:infodrom.north.de .

-v

In phiên bản và thoát.

-x

Vô hiệu hóa tra cứu tên khi nhận tin nhắn từ xa. Điều này tránh deadlocks khi máy chủ tên đang chạy trên cùng một máy chạy trình nền syslog.

Tín hiệu

Syslogd phản ứng với một tập hợp các tín hiệu. Bạn có thể dễ dàng gửi tín hiệu tới syslogd bằng cách sử dụng các thông tin sau:

kill -SIGNAL `cat / var / run / syslogd.pid`

Đăng kí

Điều này cho phép syslogd thực hiện khởi tạo lại. Tất cả các tệp đang mở đều được đóng, tệp cấu hình (mặc định là /etc/syslog.conf ) sẽ được đọc lại và cơ sở syslog (3) được khởi động lại.

SIGTERM

Syslogd sẽ chết.

SIGINT , SIGQUIT

Nếu việc gỡ lỗi được kích hoạt, chúng sẽ bị bỏ qua, nếu không syslogd sẽ chết.

SIGUSR1

Bật / tắt gỡ lỗi. Tùy chọn này chỉ có thể được sử dụng nếu syslogd được bắt đầu bằng tùy chọn -d debug.

SIGCHLD

Đợi trẻ em nếu một số đã được sinh ra, bởi vì các tin nhắn wall'ing.

Cấu hình tập tin Cú pháp khác biệt

Syslogd sử dụng cú pháp hơi khác so với tệp cấu hình của nó so với các nguồn BSD gốc. Ban đầu tất cả các thông báo về mức độ ưu tiên cụ thể và ở trên được chuyển tiếp tới tệp nhật ký.

Ví dụ, dòng sau gây ra TẤT CẢ đầu ra từ các trình tiện ích bằng cách sử dụng các cơ sở daemon (debug là mức ưu tiên thấp nhất, vì vậy mọi giá trị cao hơn cũng sẽ khớp) để đi vào / usr / adm / daemons :

# Sample syslog.conf daemon.debug / usr / adm / daemon

Theo sơ đồ mới, hành vi này vẫn giữ nguyên. Sự khác biệt là việc bổ sung bốn specifiers mới, dấu hoa thị dấu hoa thị ( * ), ký hiệu phương trình ( = ), dấu chấm than ( ! ), Và dấu trừ ( - ).

* Xác định rằng tất cả các thông báo cho cơ sở được chỉ định sẽ được chuyển đến đích. Lưu ý rằng hành vi này là thoái hóa với chỉ định mức độ ưu tiên gỡ lỗi. Người dùng đã chỉ ra rằng ký hiệu dấu hoa thị trực quan hơn.

Ký tự đại diện = được sử dụng để hạn chế ghi nhật ký vào lớp ưu tiên được chỉ định. Điều này cho phép, ví dụ, chỉ định tuyến các thông điệp gỡ lỗi đến một nguồn đăng nhập cụ thể.

Ví dụ, dòng sau trong syslog.conf sẽ trực tiếp gỡ lỗi các thông báo từ tất cả các nguồn tới tập tin / usr / adm / debug .

# Sample syslog.conf *. = Gỡ lỗi / usr / adm / debug

The ! được sử dụng để loại trừ việc ghi nhật ký các ưu tiên được chỉ định. Điều này ảnh hưởng đến tất cả (!) Khả năng xác định các ưu tiên.

Ví dụ, các dòng sau sẽ ghi lại tất cả các thông điệp của thư cơ sở ngoại trừ các thông điệp có thông tin ưu tiên cho tệp / usr / adm / mail . Và tất cả các tin nhắn từ news.info (bao gồm) đến news.crit (không bao gồm) sẽ được ghi vào tập tin / usr / adm / news .

# Thư mẫu syslog.conf. *; Mail.! = Thông tin / usr / adm / mail news.info; tin tức.! Crit / usr / adm / news

Bạn có thể sử dụng nó một cách trực quan như một trình chỉ định ngoại lệ. Giải thích được đề cập ở trên chỉ đơn giản là đảo ngược. Làm điều đó bạn có thể sử dụng

mail.none

hoặc là

thư.!*

hoặc là

thư.

bỏ qua mọi thư đi kèm với một cơ sở thư. Có nhiều chỗ để chơi với nó. :-)

- Chỉ có thể được sử dụng để đặt trước tên tệp nếu bạn muốn bỏ qua đồng bộ tệp sau mỗi lần ghi vào đó.

Điều này có thể mất một số thích nghi cho những cá nhân được sử dụng cho các hành vi BSD tinh khiết nhưng xét nghiệm đã chỉ ra rằng cú pháp này là hơi linh hoạt hơn so với hành vi BSD. Lưu ý rằng những thay đổi này sẽ không ảnh hưởng đến các tệp syslog.conf (5) chuẩn. Bạn phải sửa đổi cụ thể các tệp cấu hình để có được hành vi nâng cao.

Hỗ trợ ghi nhật ký từ xa

Những sửa đổi này cung cấp hỗ trợ mạng cho cơ sở syslogd. Hỗ trợ mạng có nghĩa là các thông điệp có thể được chuyển tiếp từ một nút đang chạy syslogd đến một nút khác đang chạy syslogd, nơi chúng sẽ được ghi vào một tệp đĩa.

Để kích hoạt tính năng này, bạn phải chỉ định tùy chọn -r trên dòng lệnh. Hành vi mặc định là syslogd sẽ không nghe mạng.

Chiến lược là để có syslogd lắng nghe trên một ổ cắm miền unix cho các thông điệp tường trình được tạo cục bộ. Hành vi này sẽ cho phép syslogd tương tác với syslog được tìm thấy trong thư viện C chuẩn. Đồng thời syslogd lắng nghe trên cổng syslog chuẩn cho các thư được chuyển tiếp từ các máy chủ khác. Để có công việc này một cách chính xác các dịch vụ (5) tập tin (thường được tìm thấy trong / etc ) phải có mục sau đây:

syslog 514 / udp

Nếu mục nhập này bị thiếu syslogd thì không thể nhận các tin nhắn từ xa hoặc gửi chúng, vì không thể mở cổng UDP. Thay vào đó, syslogd sẽ chết ngay lập tức, thổi ra một thông báo lỗi.

Để làm cho thư được chuyển tiếp đến máy chủ khác thay thế dòng tệp thông thường trong tệp syslog.conf với tên của máy chủ lưu trữ mà thư sẽ được gửi trước bằng @.

Ví dụ, để chuyển tiếp TẤT CẢ các tin nhắn đến một máy chủ từ xa bằng cách sử dụng mục nhập syslog.conf sau:

# Tập tin cấu hình syslogd mẫu cho # tin nhắn đến một máy chủ từ xa chuyển tiếp tất cả. *. * @hostname

Để chuyển tiếp tất cả các thông điệp hạt nhân đến một máy chủ từ xa, tệp cấu hình sẽ như sau:

# Tập tin cấu hình mẫu để chuyển tiếp tất cả các tin nhắn hạt nhân # đến một máy chủ từ xa. kern. * @hostname

Nếu tên máy chủ từ xa không thể được giải quyết khi khởi động, vì tên máy chủ có thể không truy cập được (nó có thể được bắt đầu sau syslogd), bạn không phải lo lắng. Syslogd sẽ thử lại để giải quyết tên mười lần và sau đó khiếu nại. Một khả năng khác để tránh điều này là đặt tên máy chủ trong / etc / hosts .

Với syslogd bình thường, bạn sẽ nhận được các syslog-loop nếu bạn gửi các tin nhắn nhận được từ một host từ xa đến cùng một host (hoặc phức tạp hơn đối với một host thứ ba gửi nó trở về đầu tiên, vv). Trong tên miền của tôi (Infodrom Oldenburg), chúng tôi vô tình có một đĩa và các đĩa của chúng tôi chứa đầy cùng một thông điệp. :-(

Để tránh điều này trong thời gian xa hơn, không có tin nhắn nào nhận được từ máy chủ từ xa được gửi tới máy chủ từ xa khác (hoặc cùng một) nữa. Nếu có những kịch bản mà điều này không có ý nghĩa, xin vui lòng thả tôi (Joey) một dòng.

Nếu máy chủ từ xa nằm trong cùng một tên miền với máy chủ lưu trữ, syslogd đang chạy, chỉ tên máy chủ đơn giản sẽ được ghi lại thay vì toàn bộ fqdn.

Trong một mạng cục bộ, bạn có thể cung cấp một máy chủ đăng nhập trung tâm để lưu trữ tất cả các thông tin quan trọng trên một máy. Nếu mạng bao gồm các miền khác nhau, bạn không phải phàn nàn về việc ghi lại tên đủ điều kiện thay vì tên máy chủ đơn giản. Bạn có thể muốn sử dụng tính năng dải miền của máy chủ này. Bạn có thể yêu cầu syslogd loại bỏ một số tên miền khác với tên miền mà máy chủ được đặt và chỉ ghi lại tên máy chủ đơn giản.

Sử dụng tùy chọn -l cũng có khả năng xác định các máy chủ đơn lẻ như các máy cục bộ. Điều này cũng vậy, kết quả là chỉ ghi lại tên máy chủ đơn giản của chúng chứ không phải fqdns.

Ổ cắm UDP được sử dụng để chuyển tiếp tin nhắn đến máy chủ từ xa hoặc để nhận tin nhắn từ chúng chỉ được mở khi cần. Trong bản phát hành trước 1.3-23 nó được mở ra mỗi lần nhưng không được mở để đọc hoặc chuyển tiếp tương ứng.

Đầu ra cho các đường ống có tên (FIFO)

Phiên bản này của syslogd có hỗ trợ cho đầu ra đăng nhập vào các đường ống có tên (fifos). Một ống nămo hoặc được đặt tên có thể được sử dụng làm đích đến cho các thông điệp tường trình bằng cách thêm một biểu tượng pipy (`` | '') vào tên của tệp. Điều này rất tiện lợi cho việc gỡ lỗi. Lưu ý rằng fifo phải được tạo bằng lệnh mkfifo trước khi syslogd được khởi động.

Tệp cấu hình sau định tuyến các thông điệp gỡ lỗi từ hạt nhân đến một nămo:

# Cấu hình mẫu để định tuyến thông điệp gỡ lỗi hạt nhân CHỈ tới / usr / adm / debug, đây là một đường dẫn # tên. kern. = debug | / usr / adm / debug

Mối quan tâm cài đặt

Có lẽ một trong những cân nhắc quan trọng khi cài đặt phiên bản này của syslogd. Phiên bản này của syslogd phụ thuộc vào định dạng thích hợp của các tin nhắn bằng chức năng syslog. Chức năng của hàm syslog trong các thư viện được chia sẻ đã thay đổi ở đâu đó trong vùng libc.so.4. [2-4] .n. Thay đổi cụ thể là vô hiệu hóa thông báo trước khi truyền nó đến ổ cắm / dev / log . Hoạt động đúng của phiên bản syslogd này phụ thuộc vào việc hủy bỏ thông điệp.

Vấn đề này thường sẽ tự biểu hiện nếu các tệp nhị phân được liên kết tĩnh cũ đang được sử dụng trên hệ thống. Các tệp nhị phân sử dụng các phiên bản cũ của chức năng nhật ký hệ thống sẽ khiến các dòng trống được ghi lại theo sau thông báo có ký tự đầu tiên trong thư bị xóa. Việc liên kết lại các tệp nhị phân này với các phiên bản mới hơn của các thư viện được chia sẻ sẽ khắc phục vấn đề này.

Cả syslogd (8) và klogd (8) đều có thể chạy từ init (8) hoặc bắt đầu như một phần của chuỗi rc. *. Nếu nó được bắt đầu từ init tùy chọn -n phải được thiết lập, nếu không, bạn sẽ nhận được tấn daemon syslog bắt đầu. Điều này là do init (8) phụ thuộc vào ID tiến trình.

Các mối đe dọa an ninh

Có khả năng cho daemon syslogd được sử dụng như một ống dẫn cho một cuộc tấn công từ chối dịch vụ. Cảm ơn bạn đã đến John Morrison (jmorriso@rflab.ee.ubc.ca) để cảnh báo tôi về tiềm năng này. Một chương trình giả mạo (mer) có thể dễ dàng tràn ngập syslogd daemon với các thông điệp nhật ký hệ thống dẫn đến các tệp nhật ký tiêu tốn tất cả không gian còn lại trên hệ thống tệp . Kích hoạt tính năng ghi nhật ký trên các ổ cắm tên miền nội tuyến sẽ khiến cho hệ thống gặp rủi ro bên ngoài các chương trình hoặc cá nhân trên máy cục bộ.

Có một số phương pháp bảo vệ máy:

  1. Triển khai thực hiện tường lửa hạt nhân để giới hạn máy chủ hoặc mạng nào có quyền truy cập vào ổ cắm 514 / UDP.
  2. Việc ghi nhật ký có thể được chuyển đến hệ thống tập tin bị cô lập hoặc không phải root, nếu được lấp đầy, sẽ không làm hỏng máy.
  3. Hệ thống tập tin ext2 có thể được sử dụng có thể được cấu hình để giới hạn một tỷ lệ phần trăm nhất định của một hệ thống tập tin chỉ sử dụng bởi root. LƯU Ý rằng điều này sẽ yêu cầu syslogd được chạy như một quá trình không phải root. CSONG LƯU Ý rằng điều này sẽ ngăn chặn việc sử dụng đăng nhập từ xa vì syslogd sẽ không thể liên kết với ổ cắm 514 / UDP.
  4. Việc vô hiệu hóa các socket trong miền sẽ hạn chế rủi ro đối với máy cục bộ.
  5. Sử dụng bước 4 và nếu vấn đề vẫn tồn tại và không phải là thứ yếu đối với chương trình / daemon giả mạo có chiều dài thanh kẻ hút 3,5 ft (khoảng 1 mét) * và trò chuyện với người dùng được đề cập. Sucker thanh def. --- 3/4, 7/8 hoặc 1in. thanh thép cứng, nam luồn trên mỗi đầu. Sử dụng chủ yếu trong ngành công nghiệp dầu mỏ ở Tây Bắc Dakota và các địa điểm khác để bơm dầu 'hút' từ giếng dầu. Sử dụng thứ cấp là để xây dựng các lô thức ăn gia súc và để đối phó với cá nhân định kỳ hoặc cá nhân hiếu chiến.

Gỡ lỗi

Khi gỡ lỗi được bật bằng cách sử dụng -d tùy chọn sau đó syslogd sẽ rất tiết bằng cách viết nhiều về những gì nó làm trên stdout. Bất cứ khi nào tệp cấu hình được đọc lại và phân tích cú pháp lại, bạn sẽ thấy một bảng, tương ứng với cấu trúc dữ liệu nội bộ. Bảng này bao gồm bốn trường:

con số

Trường này chứa số sê-ri bắt đầu bằng số không. Con số này đại diện cho vị trí trong cấu trúc dữ liệu nội bộ (tức là mảng). Nếu một số bị bỏ sót thì có thể có lỗi trong dòng tương ứng trong /etc/syslog.conf .

mẫu

Trường này rất khó và đại diện cho cấu trúc bên trong chính xác. Mỗi cột là viết tắt của một cơ sở (tham khảo syslog (3)). Như bạn có thể thấy, vẫn còn một số cơ sở còn lại miễn phí để sử dụng trước đây, chỉ có phần lớn nhất được sử dụng. Mỗi trường trong một cột đại diện cho các ưu tiên (tham khảo syslog (3)).

hoạt động

Trường này mô tả hành động cụ thể diễn ra bất cứ khi nào một tin nhắn được nhận phù hợp với mẫu. Tham khảo manpage syslog.conf (5) để biết tất cả các hành động có thể xảy ra.

lập luận

Trường này hiển thị các đối số bổ sung cho các hành động trong trường cuối cùng. Đối với tệp ghi nhật ký, đây là tên tệp cho tệp nhật ký; để người dùng ghi nhật ký này là danh sách người dùng; để đăng nhập từ xa, đây là tên máy của máy để đăng nhập; cho console-logging đây là giao diện điều khiển được sử dụng; cho tty-logging này là tty được chỉ định; tường không có đối số bổ sung.

Xem thêm

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

Cộng tác viên

Syslogd được lấy từ các nguồn BSD, Greg Wettstein (greg@wind.enjellic.com) đã thực hiện cổng cho Linux , Martin Schulze (joey@linux.de) đã khắc phục một số lỗi và thêm một số tính năng mới. Klogd ban đầu được viết bởi Steve Lord (lord@cray.com), Greg Wettstein đã có những cải tiến lớn.

Tiến sĩ Greg Wettstein
Phát triển hệ thống Enjellic

Khoa nghiên cứu ung thư
Trung tâm Ung thư Roger Maris
Fargo, ND
greg@wind.enjellic.com

Stephen Tweedie
Khoa Khoa học Máy tính
Đại học Edinburgh, Scotland
sct@dcs.ed.ac.uk

Juha Virtanen
jiivee@hut.fi

Shane Alderton
shane@ion.apana.org.au

Martin Schulze
Infodrom Oldenburg
joey@linux.de

Quan trọng: Sử dụng lệnh man ( % man ) để xem cách một lệnh được sử dụng trên máy tính cụ thể của bạn.

Những bài viết liên quan