Có thể 'ẩn' một quy trình khỏi danh sách `ps` hoặc` top` trên Linux


10

Đầu tiên, tôi cho rằng nếu điều này là có thể thì nó cần phải được thực hiện với quyền root (hoặc là người dùng chia sẻ UID gốc của 0).

Làm thế nào một quá trình có thể được khởi chạy để nó không hiển thị trong một ps auxhoặc ps efhoặc topliệt kê nếu lệnh được chạy bởi không phải root?

Điều này thậm chí có thể?

Các bản phân phối tôi thường chạy là RHEL / CentOS và Ubuntu - vì vậy nếu có câu trả lời dành riêng cho phân phối, điều đó cũng tốt.


warren: Bao giờ tìm thấy một giải pháp cho điều này?
Chris

@Chris - Không ... câu trả lời của @ fianchetto dường như là con đường duy nhất, và đó là công việc nhiều hơn tôi thoải mái thực hiện: - |
warren

Tôi sẽ thực hiện dự án này và sẽ báo cáo lại với bất cứ điều gì tôi xác định.
Chris

Câu trả lời:


5

Vâng, bạn có một vài lựa chọn ở đây. Cách dễ dàng sẽ là trao đổi các chương trình ps và hàng đầu với các phiên bản sửa đổi ẩn những gì bạn muốn ẩn.

Cách khác là chạy mã của bạn được nhúng trong một quy trình hiện có hoặc viết một tập lệnh bao bọc xung quanh mã của bạn với một tên vô hại.

Trong một số phiên bản của PS, bạn có thể sửa đổi nó bằng cách thay đổi argv [], nhưng không chắc nó có hoạt động không, và không chắc nó có hoạt động trong linux không (Chủ yếu là quy ước BSD).

Tất cả phụ thuộc, vào chính xác những gì bạn đang muốn đạt được bằng cách làm điều này?


Mục tiêu của tôi ở đây là cho các quá trình được sinh ra từ root để không hiển thị cho tất cả người dùng (có thể là các trình tiện ích liên quan đến bảo mật hoặc tương tự)
warren

@flanchetto Vì vậy, bạn có nói rằng nếu tôi có một chương trình đang chạy và sau đó nó chạy một dòng lệnh với mật khẩu trong đó trong cùng một quy trình rằng mật khẩu sẽ được cung cấp an toàn? ví dụ: chạy python myScript.pyvà tất cả các subprocess.Popenlệnh (có thể có hoặc không chứa mật khẩu) không được hiển thị, miễn là cùng một quy trình?
Brōtsyorfuzthrāx 11/2/2016

Dù sao, điều đó không hoạt động (tôi chỉ cần thử và thấy mật khẩu). Vì vậy, tôi cho rằng bạn có ý gì khác. Hãy làm rõ. :)
Brōtsyorfuzthrāx 11/2/2016

13

Theo bản vá kernel http://git.kernel.org/cgit/linux/kernel/git/urdy/linux-urdy.git/commit/?id=0499680a42141d86417a8fbaa8c8db806bea1201 , bạn có thể sử dụng tùy chọn hidepid

hidepid = 0 (mặc định) có nghĩa là hành vi cũ - bất kỳ ai cũng có thể đọc tất cả các tệp / Proc / PID / * có thể đọc được trên thế giới.

hidepid = 1 có nghĩa là người dùng không thể truy cập bất kỳ thư mục / Proc // nào, nhưng riêng của họ. Các tệp nhạy cảm như cmdline, lịch trình *, trạng thái hiện được bảo vệ chống lại người dùng khác. Vì việc kiểm tra quyền được thực hiện trong Proc_pid_ allow () và quyền của tệp không bị ảnh hưởng, các chương trình mong đợi các chế độ của tệp cụ thể không bị nhầm lẫn.

hidepid = 2 có nghĩa là hidepid = 1 cộng với tất cả / Proc / PID / sẽ ẩn với người dùng khác. Điều đó không có nghĩa là nó che giấu liệu một quá trình có tồn tại hay không (nó có thể được học bằng các phương tiện khác, ví dụ như bằng cách giết -0 $ PID), nhưng nó che giấu quá trình 'euid và egid. Nó bao gồm nhiệm vụ của kẻ xâm nhập là thu thập thông tin về các quy trình đang chạy, cho dù một số daemon chạy với các đặc quyền nâng cao, cho dù người dùng khác chạy một số chương trình nhạy cảm, cho dù người dùng khác có chạy bất kỳ chương trình nào không, v.v.

gid = XXX xác định một nhóm sẽ có thể thu thập thông tin của tất cả các quy trình (như trong chế độ hidepid = 0). Nhóm này nên được sử dụng thay vì đưa người dùng nonroot vào tập tin sudoers hoặc một cái gì đó. Tuy nhiên, không nên thêm người dùng không đáng tin cậy (như daemon, v.v.) để theo dõi các tác vụ trong toàn hệ thống.

Bạn không thể kiểm soát mức độ hiển thị ở cấp độ quy trình tuy nhiên bạn có thể đảm bảo rằng người dùng của bạn chỉ có thể nhìn thấy các quy trình của riêng họ.

Trong trường hợp bạn có phiên bản kernel lớn hơn 3,3, bạn có thể thử bằng lệnh sau:

 
mount /proc -o remount,hidepid=2


Bạn có thể giới hạn hidepid=2điều này để nó chỉ ảnh hưởng đến người dùng cụ thể (hoặc vì vậy nó đưa vào danh sách người dùng nhất định)?
Brōtsyorfuzthrāx

Hoạt động tuyệt vời! Vấn đề của tôi là tôi đang kết nối với máy chủ bằng cách sử dụng tập lệnh cron và bất kỳ người dùng nào cũng có thể xem thông tin đăng nhập bằng cách sử dụng "htop" (ví dụ). Cài đặt thành "hidepid = 2" người dùng không thể thấy các quy trình do người dùng khác khởi chạy, đó là điều tôi đang tìm kiếm. Tại sao không được đặt mặc định?
lepe

@lepe có lẽ vì lý do di sản. Sẽ phá vỡ cái này và cái kia và do đó không thể (chưa) được sử dụng ở mọi nơi.
Florian Wendelborn

OP yêu cầu pid là vô hình trong tổng thể, không chỉ cho người dùng khác ...?
phil294

Có cách nào để ẩn các quy trình được tạo bởi chỉ một số người dùng không? ví dụ. root?
Avery235

-2

sử dụng lệnh F trong lệnh top và n, ví dụ để định cấu hình những gì bạn muốn xem. sử dụng lệnh W để viết cấu hình bạn muốn ~ / .toprc - sử dụng? để xem các lệnh hàng đầu. Điều này có thể giải quyết vấn đề của bạn một cách nhanh chóng - nó đã làm cho tôi. Với F tôi có thể thêm / xóa các trường tôi muốn xem, trong khi trong f có thể sử dụng s để đặt sắp xếp, sau đó q để quay lại hiển thị. sau đó n để đặt bao nhiêu quá trình tôi muốn xem và W để lưu vào .toprc


Điều đó chỉ che giấu một cái gì đó trong quan điểm của tôi
warren
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.