Tôi thấy hai cách tốt để có được loại thông tin này. Một là bằng cách tăng ghi nhật ký từ chính sshd, và thứ hai bằng cách giám sát sâu hơn kho lưu trữ git trên đĩa. Vì không ai cung cấp cho bạn thông tin bạn muốn, bạn có thể muốn thực hiện cả hai và tương quan dữ liệu nhật ký bằng cách sử dụng công cụ phân tích nhật ký bên ngoài hoặc theo yêu cầu bằng mắt người và dấu thời gian.
Sửa đổi sshd
Theo mặc định, như bạn không nghi ngờ gì, bạn có thể thấy khi người dùng đăng nhập và từ đâu, sử dụng nhật ký xác thực ssh. Những gì bạn muốn làm là thay đổi cấp độ với việc bạn đăng xuất khỏi sshd. Vì vậy, chỉnh sửa của bạn /etc/ssh/sshd_config
và tìm dòng giống như
#LogLevel INFO
và thay đổi nó thành
LogLevel VERBOSE
sau đó khởi động lại dịch vụ sshd. Điều này làm tăng mức ghi nhật ký của sshd thêm 1 bước, cung cấp nhiều thông tin hơn. Kiểm tra đoạn nhật ký này của truy cập từ xa của tôi sau khi thực hiện thay đổi đó.
Nov 2 08:37:09 node1 sshd[4859]: Connection from 10.10.10.5 port 50445
Nov 2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov 2 08:37:10 node1 sshd[4860]: Postponed publickey for scott from 10.10.10.5 port 50445 ssh2
Nov 2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov 2 08:37:10 node1 sshd[4859]: Accepted publickey for scott from 10.10.10.5 port 50445 ssh2
Nov 2 08:37:10 node1 sshd[4859]: pam_unix(sshd:session): session opened for user scott by (uid=0)
Nov 2 08:37:10 node1 sshd[4859]: User child is on pid 4862
Nov 2 08:40:27 node1 sshd[4862]: Connection closed by 10.10.10.5
Nov 2 08:40:27 node1 sshd[4862]: Transferred: sent 30632, received 7024 bytes
Nov 2 08:40:27 node1 sshd[4862]: Closing connection to 10.10.10.5 port 50445
Nov 2 08:40:27 node1 sshd[4859]: pam_unix(sshd:session): session closed for user scott
Những điều quan trọng cần chú ý ở đây là hai lần
- Chúng tôi thấy dấu vân tay của khóa công khai được sử dụng để xác thực tôi
- Chúng tôi thấy dấu thời gian đăng xuất của tôi
Sử dụng sshd LogLevel (INFO) mặc định sẽ không ghi các mục đó. Lấy dấu vân tay của một phím là một bước thêm. Bạn phải xử lý authorized_keys
tệp thích hợp với ssh-keygen như vậy.
[root@node1 ssh]# ssh-keygen -l -f /home/scott/.ssh/authorized_keys
4096 f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06 /home/scott/.ssh/authorized_keys (RSA)
Vì vậy, bây giờ bạn biết các mẩu thông tin sau:
- Tên đăng nhập
- Thời gian người dùng đăng nhập
- Khóa công khai nào đã được sử dụng để xác thực
- Thời gian người dùng đăng xuất
Bây giờ chúng ta có một cách để quy kết hành động của người dùng tại một thời điểm cụ thể, giả sử cả hai người dùng không đăng nhập cùng một lúc, chúng ta có thể bắt đầu xem xét các thay đổi được thực hiện cho kho lưu trữ.
Giám sát thư mục với Auditd
Như sysadmin1138 đã nói, đây có thể là một trường hợp sử dụng tuyệt vời cho hệ thống con Audd. Nếu bạn không sử dụng bản phân phối dựa trên RedHat thì có thể có một loại tương tự, nhưng bạn sẽ phải tìm nó. Cấu hình cho Audd khá mãnh liệt và có số lượng tùy chọn cấu hình lớn. Để có ý tưởng về một số tùy chọn, vui lòng xem câu hỏi này trên trang web dành cho Chuyên gia An toàn Thông tin của chúng tôi .
Tối thiểu, tôi khuyên bạn nên thiết lập cái được gọi là "đồng hồ" trên thư mục trên đĩa có chứa kho git của bạn. Những gì nó làm là hướng dẫn mô-đun hạt nhân báo cáo về các nỗ lực thực hiện các cuộc gọi truy cập tệp, chẳng hạn như open()
, hoặc creat()
trên các tệp xử lý tệp trỏ đến các tệp hoặc thư mục chúng tôi liệt kê.
Đây là một cấu hình mẫu sẽ làm điều này và chỉ có điều này. Vì vậy, hãy cẩn thận để đọc qua và hiểu, hiện tại của bạn /etc/audit/audit.rules
để tích hợp các thay đổi một cách thích hợp.
# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.
# First rule - delete all
-D
# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 1024
-w /path/to/git/repos-p wa
# Disable adding any additional rules - note that adding *new* rules will require a reboot
-e 2