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 lệnh với nhau bằng các đường dẫn và hoàn thành rất nhiều công việc mà không cần phải nỗ lực nhiều. Tôi có thể tạo đầu ra ở dạng mà tôi cần. Đó không chỉ là sự tồn tại của bản thân 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 các lệnh, chọn các phần của đầu ra, sắp xếp kết quả hoặc đối sánh trên các chuỗi cụ thể và bạn có thể chia nhỏ kết quả xuống thành những gì bạn muốn xem.
Trong bài đăng này, chúng ta sẽ xem xét một số lệnh thể hiện sức mạnh của đường ống và bạn có thể dễ dàng hiểu được các lệnh việc cùng nhau như thế nào.
Kiểm tra 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 các dấu hiệu liên quan đến các 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ư sau:
$ 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 dưới dạng root, 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 thể thay thế cho việc xem xét đầu ra hoàn chỉnh, nhưng nó có thể cho bạn biết rất nhiều điều về trạng thái của hệ thống liên quan đến các rootkit có thể tìm thấy.
Trong kết quả đầu ra ở trên, chúng ta có thể dễ dàng thấy rằng hầu hết kết quả đầu ra này có thể là những gì chúng ta hy vọng sẽ thấy. Thông báo “nothing deleted” và “nothing detected” là tốt, nhưng lưu ý 41 thông báo “not infected” rõ ràng là tin tốt. Thông báo “suspect files” có thực sự là “no suspect files” và để xác nhận yêu cầu xem xét lần thứ hai so với kết quả đầu ra ban đầu.
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 biểu thị số lượng trường của awk, $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 dấu ngoặc kép giúp tạo khoảng cách giữa các trường này.
Sau đó, lệnh sort sẽ sắp xếp tất cả đầu ra theo chữ và số . Trong khi lệnh cuối cùng, uniq –c sẽ đếm số 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 việc làm quen với nguồn gốc của tất cả các số liệu sẽ rất hữu ích. 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
Tất cả các dòng này đều cho thấy chkrootkit đã kiểm tra rất nhiều lệnh có thể bị nhiễm, nhưng không tìm thấy vấn đề gì. Sau đó, bạn có thể thấy những dòng như thế này cho biết rằng các dấu hiệu có thể có 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 chuyển thành tập lệnh để bạn không cần phải nhập hoặc thậm chí ghi nhớ nó mỗi khi bạn muốn sử dụng.
#!/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 tôi và giúp tôi rất dễ dàng thực hiện các bước kiểm tra này thường xuyên.
Quy trình của người dùng
Để tạo danh sách các 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 lệnh như sau:
$ 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 đang được chạy bởi người dùng nemo, loại trừ lệnh “grep nemo” (vì nó không được chạy bởi nemo) và sau đó giảm danh sách xuống chỉ các 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 quy trình, hãy thêm một đường dẫn khác và một lệnh wc -l.
$ ps aux | grep nemo | grep -v grep | awk ‘{print $2}’ | wc -l5
Nếu bạn đang xem một người dùng đã đăng nhập trên bảng điều khiển hệ thống, bạn có thể muốn chuyển đầu ra thành lệnh cột để bạn thấy tất cả các quy trình trên một màn hình.
$ 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
Tóm tắt
Như bạn có thể thấy từ các lệnh trên, các đường dẫn có thể giúp bạn biến đầu ra của các lệnh Linux thành một dạng hiển thị những gì bạn muốn biết. Bất kể các lệnh này phức tạp đến mức nào, bạn có thể lưu chúng dưới dạng bí danh hoặc tập lệnh để không phải tạo lại chúng mỗi khi cần sử dụng.