Làm cách nào để chạy tập lệnh shell khi phát hiện thiết bị lưu trữ USB mới?


17

Tôi muốn một tập lệnh loại bỏ nhật ký và bắt đầu đăng nhập vào nó ngay khi cắm bộ lưu trữ lớn USB (với tệp 'OKdump' trên đó). Và nếu có bất cứ điều gì bất thường (Giống như lỗi xuất hiện trực quan) tôi muốn nó để chụp ảnh màn hình và lưu nó trên cùng một ổ đĩa.

Câu trả lời:


13

Sử dụng Udev. Udev là một trình quản lý thiết bị. Trong số những thứ khác, nó có trách nhiệm đặt tên cho thiết bị của bạn. Bạn có thể xác định quy tắc udev bằng cách đặt các tệp có cú pháp nhất định trong thư mục quy tắc. Các quy tắc có thể làm nhiều việc - đặc biệt là chúng có thể chạy các tập lệnh, khi một thiết bị nhất định được kết nối.

Cách giải quyết vấn đề của bạn:

Đầu tiên bạn cần thu thập thông tin trên thiết bị của mình. Giả sử bạn đã kết nối nó và biết nó có tên /dev/sdb1. Nếu vậy chạy:

udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)

Lệnh sẽ xuất thông tin về thiết bị của bạn. Nó khá dài. Bạn cần tìm một cái gì đó xác định duy nhất thiết bị. Đó có thể là một chuỗi nối tiếp ATTRS{serial}=="UA04FLGC"hoặc kết hợp của các thuộc tính khác như ATTRS{idVendor}ATTRS{idProduct}. Hầu hết các tên là ít nhiều tự giải thích. Chọn một hoặc kết hợp một vài thứ có vẻ hợp lý - nếu chúng không hoạt động, hãy thử thứ khác.

Khi bạn đã tìm thấy một mã định danh duy nhất, hãy tạo một tệp /etc/udev/rules.dbắt đầu bằng hai chữ số và kết thúc bằng .rules. Hai chữ số chỉ định thứ tự xử lý các tệp .rules này - 70-usb-log-custom.rulessẽ là một lựa chọn tốt cho bạn. Cú pháp của tệp quy tắc này có thể rất phức tạp. Nếu bạn quan tâm, google udev. Nếu không chỉ mở tệp vừa tạo và chỉnh sửa nó để trông giống như thế này:

# /etc/udev/rules.d/70-usb-log-custom.rules

KERNEL=="sd?1", ATTRS{serial}=="UA04FLGC", ACTION=="add", SYMLINK+="cusb1", RUN+="/home/confus/bin/usb-encrypt.sh add %k"
ENV{ID_FS_USAGE}=="crypto", ACTION=="remove", RUN+="/home/confus/bin/usb-encrypt.sh remove %k"
SUBSYSTEM=="usb", SYSFS{idVendor}=="1781", SYSFS{idProduct}=="0c9f", GROUP="users", MODE="0666"

Đây là một tập tin udev thực tế tôi đang sử dụng. Nó có ba quy tắc trong đó. Mỗi dòng là một quy tắc của riêng nó. Dòng đầu tiên chạy tập lệnh để tạo một thiết bị được giải mã bất cứ khi nào một đĩa được mã hóa được kết nối. Dòng thứ hai gọi cùng một tập lệnh với các tùy chọn khác nhau trong trường hợp thiết bị được giải mã bị xóa. Dòng thứ ba đặt quyền cho thiết bị khác có liên quan.

Nhiều khả năng bạn sẽ chỉ cần dòng đầu tiên. Xóa phần còn lại và chèn nối tiếp bên phải (hoặc tổng hợp các tham số bạn đã chọn để xác định thiết bị của mình).

Giải thích về tập tin của tôi:

KERNEL=="sd?1"cho biết thiết bị mà chúng tôi đang tìm kiếm trong quy tắc này được đặt tên theo dòng /dev/sda1, /dev/sdc1hoặc một cái gì đó tương tự. Dấu hỏi là ký tự đại diện cho bất kỳ chữ cái nào. ATTRS{serial}=="UA04FLGC"là định danh duy nhất ở đây. Đối với thiết bị khác mà tôi đã nói về (dòng thứ ba) Tôi không sử dụng số sê-ri mà là sự kết hợp SYSFS{idVendor}=="1781"SYSFS{idProduct}=="0c9f"để xác định nó.

ACTION=="add"cho biết quy tắc nó chỉ nên hoạt động khi thiết bị được thêm vào; không phải khi nó được gỡ bỏ.

SYMLINK+="cusb1"tạo một liên kết tượng trưng cho đĩa để người ta sẽ tìm thấy nó bên dưới /dev/cusb1.

RUN+="/home/confus/bin/usb-encrypt.sh add %k" chạy tập lệnh và chuyển 'add' và '% k' (tên thiết bị) cho tập lệnh.

Tôi sẽ không cung cấp thêm chi tiết, vì có những hướng dẫn tuyệt vời về các quy tắc udev. Những gì bạn đọc ở đây là đủ để có được nhìn chằm chằm mặc dù.


Câu trả lời tuyệt vời nhưng bây giờ tôi muốn có một kịch bản ghi nhật ký
Amith KK

4
Sau đó, BẠN sẽ phải viết nó hoặc cụ thể hơn về chính xác những gì bạn muốn. Ví dụ, tôi không thấy những gì một ảnh chụp màn hình sẽ cho bạn biết. Ngoài ra, "bỏ nhật ký hệ thống" ở đâu? "Bất cứ điều gì bất thường" cũng là một thuật ngữ khá rộng. Chúng tôi không phải là quân đội cá nhân của bạn - nếu bạn biết một vài điều về bash-script thì bây giờ bạn có tất cả các công cụ bạn cần để tự viết kịch bản.
con-f-sử dụng

: D xin lỗi @ con-f-use
Amith KK
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.