SỬ DỤNG PIPES TRÊN LINUX ĐỂ HOÀN THÀNH NHIỀU VIỆC HƠN –

Một trong những điều mà tôi luôn yêu thích về Unix và sau đó là Linux là cách nó cho phép tôi kết nối một loạt các lệnh với các đường ống và hoàn thành rất nhiều công việc mà không cần nhiều nỗ lực. Bạn có thể tạo ra đầu ra ở dạng mà bạn cần. Nó không chỉ là sự tồn tại của chính các đường ống, mà còn là sự linh hoạt của các lệnh Linux. Bạn có thể chạy lệnh, chọn các phần của đầu ra, sắp xếp kết quả hoặc khớp trên các chuỗi cụ thể và bạn có thể phân tích kết quả xuống đúng với những gì bạn muốn xem.

Trong bài đăng này, chúng ta sẽ xem xét một vài lệnh thể hiện sức mạnh của đường ống và cách dễ dàng bạn có thể nhận được các lệnh để làm việc cùng nhau.

Kiểm tra số liệu thống kê chkrootkit

 

Lệnh ví dụ đầu tiên này bắt đầu bằng cách sử dụng sudo để chạy lệnh chkrootkit. Lệnh này kiểm tra các dấu hiệu của rootkit trên hệ thống của bạn bằng cách sử dụng một quy trình chi tiết để phát hiện chữ ký có liên quan đến rootkit đã biết. Lệnh sẽ dễ dàng tạo ra hơn 100 dòng đầu ra. Tuy nhiên, để có được một bản tóm tắt rất hữu ích về những gì nó tìm thấy, bạn có thể chạy một lệnh như thế này:

$ sudo chkrootkit | awk ‘{print $(NF-1) ” ” $NF}’ | sort | uniq -c

      1 a while…

      2 enp0s25: PF_PACKET(/usr/sbin/NetworkManager)

      1 is `/’

     21 not found

      3 nothing deleted

      2 nothing detected

     56 nothing found

     41 not infected

      3 not tested

      1 PF_PACKET sockets

      1 pts/0 bash

      1 suspect files

      1 TTY CMD

      1 /usr/lib/.build-id /usr/lib/debug/.dwz

      1 /var/run/utmp !

Các lệnh ở trên chạy chkrootkit làm gốc, chỉ chọn hai chuỗi cuối cùng trong mỗi dòng đầu ra, sắp xếp kết quả và sau đó đếm số lần mỗi kết quả hai chuỗi được trả về. Mặc dù điều này không có cách nào thay thế cho việc nhìn vào đầu ra hoàn chỉnh, nhưng nó có thể cho bạn biết rất nhiều về tình trạng của hệ thống liên quan đến các rootkit có thể tìm thấy.

Trong đầu ra ở trên, chúng ta có thể dễ dàng thấy rằng hầu hết đầu ra này có khả năng là những gì chúng ta hy vọng sẽ thấy. “Không có gì bị xóa” và “không có gì được phát hiện” là tốt đẹp, nhưng lưu ý 41 tin nhắn “không bị nhiễm” rõ ràng là tin tốt. Thông báo “tệp nghi ngờ” duy nhất thực sự là “không có tệp nghi ngờ” và yêu cầu xem xét lại đầu ra ban đầu để xác nhận.

Biểu thức awk trong lệnh tổng thể đang hiển thị hai trường cuối cùng. Vì NF là cách awk thể hiện số lượng trường, $NF là giá trị của trường cuối cùng và $(NF-1) là giá trị của trường trước đó. Khoảng trống trong các trích dẫn giữ cho các trường này không bị kẹt lại với nhau.

Lệnh sort sau đó sắp xếp tất cả các chữ số đầu ra trong khi lệnh cuối cùng, uniq -c, đếm bao nhiêu lần mỗi dòng đầu ra xuất hiện trong mỗi nhóm tuần tự trong đầu ra tổng thể.

Lưu ý rằng nó giúp làm quen với nơi tất cả các số liệu thống kê đến từ đâu. Nhìn trực tiếp vào đầu ra chkrootkit, bạn có thể sẽ thấy nhiều dòng như thế này

ROOTDIR is `/'
Checking `amd'... not found
Checking `basename'... not infected
Checking `biff'... not found
Checking `chfn'... not infected
Checking `chsh'... not infected
Checking `cron'... not infected
Checking `crontab'... not infected
Checking `date'... not infected
Checking `du'... not infected
Checking `dirname'... not infected
Checking `echo'... not infected
Checking `egrep'... not infected
Checking `env'... not infected
Checking `find'... not infected
Checking `fingerd'... not found
Checking `gpm'... not found
Checking `grep'... not infected

Những dòng này đều cho thấy chkrootkit đã kiểm tra rất nhiều về các nhiễm trùng lệnh có thể xảy ra, nhưng không tìm thấy vấn đề gì. Một lát sau, bạn có thể thấy các dòng như thế này chỉ ra rằng các dấu hiệu có thể của phần mềm độc hại không được tìm thấy trên hệ thống.

Searching for sniffer's logs, it may take a while... nothing found
Searching for HiDrootkit's default dir... nothing found
Searching for t0rn's default files and dirs... nothing found
Searching for t0rn's v8 defaults... nothing found

Lệnh piped cung cấp một bản tóm tắt hữu ích và có thể dễ dàng biến thành một kịch bản để bạn không phải gõ nó hoặc thậm chí nhớ nó mỗi khi bạn muốn sử dụng nó.

#!/bin/bash
sudo chkrootkit | awk '{print $(NF-1) " " $NF}' | sort | uniq -c

Lệnh chỉ mất khoảng 30 giây để chạy trên hệ thống của bạn và giúp bạn dễ dàng chạy các kiểm tra này thường xuyên.

Quy trình người dùng

Để tạo danh sách ID quy trình được liên kết với các quy trình mà một số người dùng cụ thể đang chạy, bạn có thể sử dụng một lệnh như thế này:

$ ps aux | grep nemo | grep -v grep | awk '{print $2}'
903665
903674
903680
903695
903703

Lệnh piped này sử dụng ps aux để liệt kê tất cả các quy trình đang chạy, thu hẹp đầu ra xuống chỉ những quy trình được điều hành bởi người dùng nemo, loại trừ lệnh “grep nemo” (vì nó không được điều hành bởi nemo) và sau đó giảm danh sách xuống chỉ còn ID quy trình. Nếu bạn chỉ muốn xem số lượng quy trình thay vì tất cả các ID quá trình, hãy thêm một đường ống khác và lệnh wc -l.

$ ps aux | grep nemo | grep -v grep | awk '{print $2}' | wc -l
5

Nếu bạn đang nhìn vào một người dùng đăng nhập vào bảng điều khiển hệ thống, bạn có thể muốn ống đầu ra đến lệnh cột để bạn thấy tất cả các quy trình trên một màn hình duy nhất.

$ ps aux | grep shs | grep -v grep | awk '{print $2}' | column
4508    4620    4728    4764    4802    4856    4884    4893    5030    6003
4515    4621    4729    4770    4814    4868    4886    4895    5046    897442
4528    4623    4737    4774    4819    4869    4888    4896    5049    897447
4538    4650    4741    4775    4821    4878    4889    4897    5092    897455
4541    4703    4742    4781    4827    4879    4890    4992    5258    904175
4543    4710    4745    4788    4839    4880    4891    5016    5276    904178
4545    4723    4753    4790    4846    4881    4892    5021    5997    904179

Wrap-up

Như bạn có thể thấy từ các lệnh ở trên, các đường ống có thể giúp bạn biến đầu ra của các lệnh Linux thành một biểu mẫu hiển thị đúng những gì bạn muốn biết. Và, bất kể các lệnh này trở nên phức tạp như thế nào, bạn có thể lưu chúng dưới dạng bí danh hoặc kịch bản để bạn không phải tạo lại chúng mỗi khi bạn cần sử dụng chúng.