Làm cách nào tôi có thể kiểm tra người dùng và truy cập các nỗ lực vào SSH trên máy chủ của mình?


28

Tôi đã gặp một vài vấn đề về bảo mật với máy chủ của mình, một vài người dùng SSH đã thiết lập các vụ cháy hay còn gọi là sự cố.

Tôi muôn:

  • Theo dõi thông tin đăng nhập và đăng xuất của người dùng
  • Theo dõi hoạt động của các SSH này, để khám phá mọi hoạt động độc hại
  • Ngăn người dùng xóa nhật ký

Tôi không phải là một quản trị viên hệ thống và tôi khá thiếu kinh nghiệm trong vấn đề này, vì vậy bất kỳ lời khuyên nào cũng sẽ rất được hoan nghênh và rất hữu ích. :)

Câu trả lời:


27

Vì chúng ta đang nói về máy chủ SSH, tôi sẽ cung cấp cho bạn các giải pháp dòng lệnh.

  • Theo dõi đăng nhập và đăng xuất của người dùng. Điều đó thật dễ dàng, tập tin /var/log/auth.lognên có thông tin này.

  • Theo dõi hoạt động của những người dùng đó: Nếu họ khá vô tội, bạn có thể kiểm tra tệp .bash_historytrong thư mục nhà của họ. Bạn sẽ thấy một danh sách các lệnh mà họ đã thực thi. Vấn đề tất nhiên là họ có thể xóa hoặc chỉnh sửa tập tin này.

  • Ngăn người dùng xóa nhật ký: Người dùng không thể chạm vào auth.log. Để ngăn họ chơi với .bash_historybạn, bạn cần phải thực hiện một vài thủ thuật .

  • Điều gì xảy ra nếu người dùng quản lý để có quyền truy cập root? : Bạn đang say sưa. Trừ khi họ phạm sai lầm, họ sẽ có thể che giấu tất cả các bước chân của họ.


Lưu ý rằng không có cách nào để ngăn người dùng nhập unset HISTFILEvào bash, và sau đó lịch sử bash của họ sẽ không được ghi lại.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles, vui lòng đọc các thủ thuật liên kết. Họ đặt HITSFILE làm biến chỉ đọc trong .profile.
Javier Rivera

Tôi nghĩ rằng bạn có thể bỏ đặt một biến chỉ đọc trong một bash không bị hạn chế, nhưng dường như là không. Điều này cải thiện khả năng truy nguyên một chút kể từ khi bắt đầu một shell khác (sẽ không đọc ~/.bash_historyhoặc ~/.bashrc) sẽ hiển thị trong $HISTFILE. Nhưng điều đó tự nó có thể là hoàn toàn hợp pháp (ví dụ: người dùng chỉ muốn chạy zshhoặc muốn đặt tùy chọn riêng của họ trong một thay thế bashrc).
Gilles 'SO- ngừng trở nên xấu xa'

1
Vâng. Bạn có thể hạn chế anh ta bash hoặc một số vỏ khác. Sau tất cả an ninh chỉ là một cuộc đua.
Javier Rivera

Điều đó không đúng khi "nếu người dùng quản lý để có quyền truy cập root" thì họ có thể ẩn tất cả các bước. Bạn luôn có thể sử dụng máy chủ bên ngoài để kiểm toán, trong đó tất cả các bước sẽ được ghi lại, bao gồm cả việc chúng trở thành root.
Petr

6

[TUYÊN BỐ TỪ CHỐI] Tôi nhận ra rằng tôi đến bữa tiệc muộn, nhưng tôi muốn dán một câu trả lời mà tôi đã đưa ra cho một câu hỏi khác , bởi vì tôi cảm thấy như nó có thể cung cấp một cái nhìn sâu sắc tốt cho độc giả, và câu hỏi này dường như là câu hỏi hay nơi cho thông tin ssh cơ bản.

Có một vấn đề tương tự xảy ra với tôi sau khi đọc câu hỏi này ở đây trên AskUbfox và kiểm tra VPS của tôi, chỉ để thấy một lượng lớn các nỗ lực vũ phu. Đó là khi tôi quyết định hành động.

Bây giờ theo câu hỏi tôi đã liên kết đến, nếu bạn muốn thấy các lần đăng nhập thất bại trên máy của bạn qua ssh (có thể là các nỗ lực vũ phu hoặc bất cứ điều gì), hãy thử gõ này:

grep sshd.\*Failed /var/log/auth.log | less

Nếu đầu ra bao gồm nhiều dòng, đó là nhiều nỗ lực vũ phu, đặc biệt nếu chúng xảy ra giữa các khoảng thời gian ngắn, bạn có thể muốn thực hiện các hành động sau:

Thay đổi tập tin cấu hình ssh

Để thực hiện việc này, hãy mở tệp nằm ở / etc / ssh / sshd_config bằng trình chỉnh sửa yêu thích của bạn, như thế này vim /etc/ssh/sshd_config.

1. Cố gắng di chuyển ssh từ cổng 22 : Bây giờ xác định vị trí dòng đọc:

# What ports, IPs and protocols we listen for
Port 22

và nhận xét Cổng 22, và sử dụng bất cứ ai bạn có thể thích. Thí dụ:

# What ports, IPs and protocols we listen for
# Port 22
Port 28934

Xin nhớ rằng các cổng dưới 1024 cần có sự cho phép đặc biệt (root). Tôi không biết làm thế nào điều này có thể can thiệp vào nó, nhưng tôi chỉ nói.

2. Vô hiệu hóa thông tin đăng nhập Root qua ssh : Vì tên người dùng gốc có thể dự đoán được và cung cấp quyền truy cập hoàn toàn vào hệ thống của bạn, việc cung cấp quyền truy cập không bị chặn vào tài khoản này qua SSH là không khôn ngoan. Xác định vị trí dòng đọc PermitRootLogin và đặt thành không .

PermitRootLogin no

3. Vô hiệu hóa xác thực mật khẩu : Tạo và sử dụng các khóa SSH để đăng nhập vào hệ thống của bạn. Nếu không có mật khẩu được kích hoạt, kẻ tấn công sẽ cần đoán (hoặc đánh cắp) khóa riêng SSH của bạn để có quyền truy cập vào máy chủ của bạn. Một cái gì đó rất rất khó khăn. Tiếp tục tìm dòng đọc Mật khẩu xác thực và đặt thành không

PasswordAuthentication no

!CẢNH BÁO! Trước khi làm như vậy, vui lòng tham khảo hướng dẫn này ở đây về cách thiết lập xác thực chứng chỉ.

LƯU Ý: Sau khi bạn đã thực hiện các thay đổi sử dụng sudo /etc/init.d/ssh restart. Để kết nối với một cổng khác thông qua ssh sử dụng : ssh username@hostname.com -p <port_number>.

Thiết lập tường lửa

Vui lòng xem hướng dẫn này về cách thiết lập tường lửa cực kỳ mạnh mẽ và hiệu quả, được tích hợp vào Linux, IPTables .

Thiết lập tập lệnh để giúp bạn bảo mật

Một cái mà tôi sử dụng cá nhân và nhanh chóng xuất hiện trong tâm trí là Fail2Ban . Fail2ban sẽ giám sát các tệp nhật ký của bạn cho các lần đăng nhập thất bại. Sau khi một địa chỉ IP đã vượt quá số lần thử xác thực tối đa, nó sẽ bị chặn ở cấp mạng và sự kiện sẽ được đăng nhập /var/log/fail2ban.log. Để cài đặt nó:sudo apt-get install fail2ban

Kiểm tra lịch sử lệnh thông qua ssh

Có một lệnh linux, được đặt tên history, cho phép bạn xem các lệnh nào đã được nhập cho đến thời điểm đó. Hãy thử gõ historyvào một thiết bị đầu cuối để xem tất cả các lệnh cho đến thời điểm đó. Nó có thể giúp nếu bạn đã root .

Để tìm kiếm một lệnh cụ thể, hãy thử:history | grep command-name

Để liệt kê tất cả các lệnh sau ssh :fc -l ssh

Bạn cũng có thể chỉnh sửa các lệnh bằng vi (chưa thử vim, mặc dù tôi cho rằng nó cũng hoạt động):fc -e vi

Bạn cũng có thể xóa lịch sử :history -c

LƯU Ý: Nếu bạn không phải là người hâm mộ của lệnh history, thì cũng có một tệp trong thư mục chính của bạn ( cd ~), được gọi là .bash_history (nếu bạn đang sử dụng bash) mà bạn có thể catthấy tất cả những gì đã được nhập vào bash shell.


câu trả lời rất hay Bạn cũng nên xem hướng dẫn được chỉ định bởi @radu trong Askubfox.com/a/3906/59250
Cerber


3
  1. Javier đã trả lời câu hỏi này: /var/log/auth.log
  2. Tôi đã tìm thấy một bài viết tuyệt vời về điều này ở đây .
  3. Nếu người dùng của bạn không có quyền truy cập vào root thì các tệp nhật ký của bạn sẽ an toàn. Bạn có thể thử xây dựng một số quy tắc tùy chỉnh trong tệp sudoers để hạn chế những gì người dùng của bạn có thể truy cập và làm thế nào. Ngoài ra, bạn có thể tăng mức độ nhật ký cho daemon sshd.

3

Ngoài việc đăng nhập, không có cách nào an toàn để theo dõi / ghi nhật ký hành động của người dùng sau khi họ đăng nhập, giả sử họ có kiến ​​thức cơ bản về Linux, họ sẽ có thể vô hiệu hóa ghi nhật ký shell hoặc đơn giản là chạy các lệnh từ các shell khác (ví dụ python).

Thay vào đó bạn nên thận trọng về việc cung cấp quyền truy cập ssh, họ có thực sự cần nó không? Nó không phổ biến để cấp quyền truy cập ssh trừ khi bạn đang ở trong vỏ cung cấp cho doanh nghiệp.

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.