Điểm:4

Làm thế nào root có thể bắt đầu một quá trình mà chỉ root mới có thể giết chết?

lá cờ vn

Thật dễ dàng để bắt đầu một quá trình ở chế độ nền hoặc biến nó thành hệ thống dịch vụ.

Tuy nhiên, nếu tôi muốn bắt đầu một quá trình giám sát các hoạt động trên máy Linux, thì nó sẽ trở thành mục tiêu của các cuộc tấn công.Nếu bất kỳ người dùng nào muốn làm điều gì đó xấu, trước tiên nó sẽ giết quá trình này, ngay cả khi họ chỉ sudoers hoặc bánh xe người dùng, bằng cách thực hiện đơn giản giết chết hoặc dừng systemctl.

Có cách nào để thực thi một quy trình chỉ nguồn gốc có thể giết?


Các bạn, chỉ để nghĩ rằng thậm chí rsyslog service có thể bị giết, bạn nên thừa nhận Linux thực sự dễ bị tổn thương như thế nào. Nó giống như một phi công có thể tắt hộp đen. Có hãng hàng không nào cho phép điều này xảy ra không? Hay có ai đưa cho phi công một danh sách cho phép để cản trở họ làm bất cứ điều gì có thể để cứu máy bay không? Tất nhiên phi công có thể làm rơi máy bay nhưng hộp đen sẽ ghi lại điều đó.

Đề xuất của tôi về danh sách cấm là hợp pháp từ góc độ bảo mật, mặc dù nó có thể khiến bạn lo lắng. Vì vậy, đừng cố đổ lỗi cho người đã đặt câu hỏi, được chứ?

lá cờ cn
Nhận xét không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được [chuyển sang trò chuyện](https://chat.stackexchange.com/rooms/129511/discussion-on-question-by-george-y-how-can-root-start-a- process-that- chỉ-root-c).
Điểm:30
lá cờ za

Có các đặc quyền sudo/wheel không giới hạn, bất kỳ ai cũng có thể hoàn tác bất kỳ điều gì bạn đã làm. Ngay cả khi bạn quản lý để đạt được điều này bằng cách loại bỏ khả năng giết quá trình trực tiếp, ví dụ:. với sudo giết, điều này vẫn có thể bị phá vỡ bằng cách sử dụng các lệnh sudoed khác hoặc bạn cũng tự khóa quyền quản trị của mình.

Hãy tự hỏi bản thân, tại sao những người dùng không đáng tin cậy lại có đặc quyền sudo không hạn chế ngay từ đầu? Họ không nên. Chỉ dành những đặc quyền như vậy cho những người bạn hoàn toàn tin tưởng. Nếu có một số lệnh đặc quyền vẫn cần được thực thi, chỉ bật sudo cho các lệnh đó:

+netmgr /usr/sbin/ifup, /usr/sbin/ifdown

(sử dụng visudo -f /etc/sudoers.d/netmgr để đưa cái này vào tệp bổ trợ sudoers).

Bằng cách này, bạn có thể cho phép người dùng chỉ chạy sudo /usr/sbin/ifupsudo /usr/sbin/ifdown, nhưng không có lệnh sudo nào khác. Rất nhiều ví dụ, hướng dẫn và cân nhắc về bảo mật khác có trong người đàn ông sudoers. Đọc nó!

Kiểm toán được thực hiện thường theo cách khác. Đặc biệt, bạn thiết lập nữa máy, hãy định cấu hình nhật ký hệ thống của nó để chấp nhận nhật ký từ các trạm từ xa. Trên máy được đề cập, bạn thiết lập ghi nhật ký để nó gửi tất cả nhật ký vào máy ghi, ngoài việc lưu trữ cục bộ. Ngay cả khi ai đó vô hiệu hóa việc gửi nhật ký này, hành động vô hiệu hóa chính nó sẽ được ghi lại, vì vậy ít nhất bạn sẽ biết ai là thủ phạm.

George Y avatar
lá cờ vn
Thật không may, tôi phải cho phép chúng sử dụng `kill` hoặc `systemctl stop` vì có một số ứng dụng cần các đặc quyền này để thực hiện công việc của chúng. Tôi chỉ cần một chương trình giám sát nhất định từ chối tín hiệu dừng của họ.
George Y avatar
lá cờ vn
Một ví dụ khác là tôi thêm trình kích hoạt trong cài đặt `/etc/bashrc` - tôi muốn nó được bảo vệ, nhưng tôi không thể cấm chạy trình chỉnh sửa như `vim` hoặc `nano`.
Michael Hampton avatar
lá cờ cz
@GeorgeY Nếu ai đó có quyền truy cập root thì họ có thể hủy quy trình của bạn. Nếu ai đó _thực sự_ làm việc này và không chịu dừng lại, thì giải pháp không phải là kỹ thuật: Bạn cần có sự tham gia của ban quản lý.
Nikita Kipriyanov avatar
lá cờ za
@GeorgeY, bạn không thể tạo một quy trình không thể thực hiện được bằng root. Gốc là thượng đế, bạn không thể vô hiệu hóa nó khi làm gì đó. Và sudo giúp bạn root hiệu quả. Các giải pháp khả thi duy nhất mà tôi thấy đó là không cấp quyền root. Những gì tôi đề xuất là sử dụng các khả năng tích hợp sẵn của sudo; nếu nó không đủ, bạn phải phát minh ra sudo của riêng mình. Viết một ứng dụng proxy cho kill hoặc systemctl stop, ứng dụng này sẽ lọc ra những thứ bị cấm giết hoặc tốt hơn là chỉ cho phép giết một số thứ nhất định, v.v. Bạn phải bọc *tất cả* những thứ bạn muốn người dùng không phải root có thể gọi được.
Matthew Ife avatar
lá cờ jo
Nếu bạn đã root, bạn có thể thực hiện một bước tồi tệ hơn và thay thế quy trình nói trên bằng một quy trình báo cáo mọi thứ đều ổn nhưng vẫn cho phép bạn tiếp tục các hoạt động bất chính của mình.
George Y avatar
lá cờ vn
@Nikita Kipriyanov Tất nhiên tôi sẽ không cấp cho họ quyền truy cập `root`, thực ra tôi cấp cho họ đặc quyền `wheel`, nhưng họ vẫn có thể vô tư giết bất kỳ tiến trình nào. Điều tôi muốn là chúng không thể hủy một loại quy trình nhất định, chẳng hạn như do người dùng root khởi xướng hoặc một tệp trong `/root`.
Nikita Kipriyanov avatar
lá cờ za
"root" và "wheel" chính xác là những đặc quyền giống như thần thánh. Chịu đựng nó. Nếu bạn không muốn cho họ root, đừng cho bánh xe. Giai đoạn = Stage.
lá cờ sa
@GeorgeY vậy điều gì ngăn họ chỉ chạy `sudo bash` và sau đó là root?
raj avatar
lá cờ ye
raj
@GeorgeY Nếu bạn muốn người dùng ** đã root thực sự ** có thể hủy bất kỳ quy trình nào ngoại trừ một quy trình cụ thể hoặc chỉnh sửa bất kỳ tệp nào ngoại trừ một quy trình cụ thể, bạn phải thiết kế hạt nhân của riêng mình có các khả năng như vậy :). Linux không hoạt động theo cách này.
George Y avatar
lá cờ vn
@raj Vậy đây là cách Linux mở đường cho các tội phạm nội bộ như rò rỉ dữ liệu? :)
lá cờ mt
@GeorgeY điều đó thật thú vị: vấn đề đặc quyền tương tự cũng tồn tại trong Windows, với các chi tiết hơi khác nhau giữa ADMINISTRATOR/LOCALSYSTEM và quản trị viên miền, đồng thời việc rò rỉ dữ liệu thường được thực hiện mà không có sự leo thang đặc quyền nào bằng cách xâm phạm ứng dụng web có quyền truy cập vào dữ liệu.
lá cờ mt
(có quản trị viên tên miền thậm chí còn thú vị hơn vì bạn có thể chạy bất kỳ chương trình nào trên bất kỳ máy tính nào trong tổ chức!)
lá cờ mt
.. có thể giải pháp bạn muốn là theo hướng khác? Nếu bạn muốn cho phép người dùng chỉ hủy một số quy trình nhất định, hãy xác định các quy trình đó và làm cho *chúng* chạy dưới dạng không root? Hoặc chạy chúng trong một thùng chứa hoặc VM?
Nikita Kipriyanov avatar
lá cờ za
@pjc50 điều buồn cười ở đây là tác giả của câu hỏi đã ngoan cố từ chối làm theo cách này, mặc dù thực tế đây là điều mà mọi người khuyên anh ta. Thay vì làm theo cách của Linux để làm mọi thứ trong Linux, anh ấy nghĩ rằng đây là lỗi của Linux khiến nó không hoạt động theo cách mà anh ấy cho là nó phải hoạt động.
Điểm:18
lá cờ in
bta

Bạn không thể trao cho ai đó quyền lực và sau đó ngăn cản họ sử dụng nó. Bạn phải tập trung một cách hẹp quyền lực mà bạn trao cho họ để chỉ bao gồm những gì bạn muốn họ có.

Trong một bình luận, bạn đã nói:

Tôi phải cho phép họ sử dụng giết chết hoặc dừng systemctl bởi vì có một số ứng dụng cần những đặc quyền này để làm công việc của họ

Điều đó không có nghĩa là những người dùng cần truy cập vào các lệnh đó, chỉ những lệnh đó các ứng dụng. Người dùng có quyền hạn chế để chạy sudo ./someprogram và một khi chương trình đó đang chạy với quyền root, nó có thể sử dụng giết chết, vv khi cần thiết. Tuy nhiên, người dùng không có quyền truy cập trực tiếp vào các lệnh nội bộ đó.

Về cơ bản, người dùng không cần truy cập vào mệnh lệnh, họ cần truy cập vào chức năng. Nếu giết chết quá rủi ro, hãy chặn quyền truy cập vào nó và cung cấp một số cách khác an toàn hơn để đạt được kết quả tương tự. Có lẽ bạn tạo một tiện ích nhỏ tiêu diệt an toàn hoạt động như giết chết nhưng từ chối yêu cầu giết một số tiến trình. Cấp cho người dùng của bạn quyền truy cập sudo vào tiêu diệt an toàn nhưng không phải là thật giết chết. Nếu người dùng luôn sử dụng các lệnh này để thực hiện cùng một việc, hãy gói gọn toàn bộ quy trình đó trong một chương trình nhỏ và yêu cầu họ sử dụng thay vì thực hiện thủ công (ví dụ: họ sẽ chạy sudo khởi động lại_máy chủ web thay vì tắt và khởi động lại tất cả các quy trình máy chủ khác nhau). Người dùng của bạn vẫn có quyền truy cập vào chức năng họ cần, nhưng họ không thể trực tiếp sử dụng vũ khí nguy hiểm.

Có một cơ chế thực thi khác, cực đoan hơn có thể khả dụng tùy thuộc vào thiết lập cụ thể của bạn. Một số bộ vi xử lý có đồng hồ bấm giờ có sẵn. Sửa đổi chương trình giám sát hoạt động của bạn để khởi động cơ quan giám sát và đặt lại chương trình sau mỗi vài giây. Nếu ai đó cố gắng giết màn hình của bạn, bộ đếm thời gian giám sát sẽ hết hạn và hệ thống sẽ tự khởi động lại, khởi chạy lại chương trình màn hình khi khởi động. Điều này sẽ không hoàn toàn ngăn màn hình bị vô hiệu hóa, nhưng nó sẽ cấm bất kỳ ai làm bất cứ điều gì có ý nghĩa sau khi vô hiệu hóa nó. Điều này cũng sẽ tạo ra những lá cờ đỏ lớn đẹp mắt trong nhật ký hệ thống của bạn. Hầu hết các hệ thống có cơ quan giám sát sẽ báo cáo khi cơ quan giám sát kích hoạt một lần khởi động lại cụ thể. Việc khởi động lại do cơ quan giám sát kích hoạt xảy ra trong khi người dùng đã đăng nhập vào trình bao sẽ được coi là rất khả nghi.

George Y avatar
lá cờ vn
Tôi nghĩ đề xuất của bạn là xác định một "Danh sách trắng" về những gì người dùng không phải `root` CÓ THỂ làm, thay vì nhu cầu ban đầu của tôi về những gì họ KHÔNG THỂ làm. Đây thực sự là một cuộc dạo chơi, nhưng sẽ giảm bớt nhiệm vụ của họ quá nhiều.
lá cờ in
`Bạn không thể trao cho ai đó một quyền lực và sau đó ngăn cản họ sử dụng nó` - nghe có vẻ giống hoàng gia Anh. Nữ hoàng có quyền ra lệnh hành quyết bất cứ ai mà bà không thích, nhưng nếu bà thực sự sử dụng quyền đó, có lẽ bà sẽ bị phế truất trước khi bất kỳ cuộc hành quyết thực sự nào diễn ra.
lá cờ in
bta
@GeorgeY Hầu hết các quản trị viên đều sử dụng danh sách cho phép, vâng. Bạn cũng có thể đưa vào danh sách đen một số lệnh nhất định một cách hiệu quả. Một cái gì đó như `baduser localhost = (baduser) /bin/kill` sẽ cho phép người dùng 'baduser' chỉ chạy kill với tư cách tài khoản của chính họ (không phải với quyền root). Có nhiều thông tin hơn và các tùy chọn nâng cao trong `man sudoers`.
ilkkachu avatar
lá cờ us
@hanshenrik, phải không? Bạn có một nguồn về điều đó?
lá cờ cn
@ilkkachu: Chà, khi Vương quốc Anh vẫn còn hình phạt tử hình, về mặt kỹ thuật, bất kỳ vụ hành quyết nào cũng sẽ được thực hiện dưới danh nghĩa của cô ấy (vì cô ấy luôn là nguyên đơn trong một vụ án hình sự ở Vương quốc Anh). Nhưng điều đó có lẽ không được tính.
ilkkachu avatar
lá cờ us
@Kevin, vâng, tất nhiên, các tài liệu tham khảo về Vua/Hoàng hậu hoặc Vương miện tồn tại dưới dạng hình thức ở đó. Nhưng tôi có ấn tượng rằng Vương quốc Anh và các quốc gia thuộc khối thịnh vượng chung khác hiện nay đã có luật cấm hình phạt phi pháp. (Và trong trường hợp của nước Anh, khái niệm này thường đi kèm với các tham chiếu đến Magna Carta, khoảng 800 năm trước...) Và trong khi họ có một thứ gì đó giống như quyền lực lý thuyết của Nữ hoàng trong việc từ chối ký các dự luật thành luật, thì điều đó vẫn còn hơi khác một chút so với việc Nữ hoàng chỉ vi phạm luật đã được Vua/Nữ hoàng phê chuẩn. (Chủ quyền của nghị viện và tất cả những thứ đó.)
George Y avatar
lá cờ vn
@hanshenrik Vậy ý bạn là những người lính phụ trách tên lửa hạt nhân có thể khai hỏa theo ý muốn của họ? Câu hỏi của tôi tương đương với - một phi công có thể làm bất cứ điều gì trên máy bay, ngoại trừ việc dừng hoặc hack hộp đen.
lá cờ mt
"xác định" Danh sách trắng "về những gì người dùng không phải root CÓ THỂ làm, thay vì nhu cầu ban đầu của tôi về những gì họ KHÔNG THỂ làm" - thật không may, điều này là bắt buộc trong bảo mật, bởi vì nếu không, mọi người sẽ tiếp tục tìm cách sử dụng chức năng mà họ phải làm những việc bạn không muốn. Đối với các vũ khí hạt nhân của Vương quốc Anh, vâng, chúng (được cho là) ​​có khả năng phóng độc lập - và thực sự đó là những gì chúng dự định, sẽ được phóng trong trường hợp tất cả các hệ thống phân cấp ở trên đã chết.
raj avatar
lá cờ ye
raj
@GeorgeY nhưng hầu hết các hệ điều hành (không chỉ Linux) đều được thiết kế sao cho chúng không có bất kỳ loại "hộp đen" nào. Tôi cực lực phản đối ý tưởng có một số "hộp đen" mà tôi không thể kiểm soát trong máy tính mà TÔI SỞ HỮU.
timuzhti avatar
lá cờ eg
@raj, có thể hầu hết các hệ điều hành không thể có hộp đen, nhưng hầu hết phần cứng ngày nay đều có. Cả Intel và AMD đều có thêm một bộ xử lý nhỏ và quyền kiểm soát của bạn đối với bộ xử lý đó rất đa dạng tùy thuộc vào tính năng quản lý nào được bật.
Lodinn avatar
lá cờ in
@GeorgeY Một phi công CÓ THỂ dừng máy bay nhiều như vật lý cho phép. Vấn đề này (và vấn đề ban đầu của bạn) mang tính xã hội hơn là vấn đề kỹ thuật. Hãy tự hỏi bản thân điều này: tại sao trong khi có khả năng kỹ thuật để làm điều gì đó tồi tệ, hãy nói rằng một phi công hầu như sẽ không bao giờ thực sự làm điều đó; tại sao người dùng của bạn lại khác? Nếu không, đó không phải là vấn đề, nếu có, thì bạn gặp phải một vấn đề ít liên quan đến máy tính và liên quan nhiều đến con người. Không cấp quyền truy cập vào những thứ mà bạn không tin tưởng người dùng, đặc biệt nếu nghi ngờ có ác ý.
raj avatar
lá cờ ye
raj
@timuzhti Và đó là điều khiến nhiều người khó chịu, bạn có thể thấy các bài báo bày tỏ sự lo lắng về vấn đề này trên Internet, bởi vì mọi người chắc chắn không muốn điều này.
Điểm:10
lá cờ tn

Linux noob ở đây. Bạn có thể cân nhắc việc viết các chương trình hoặc tập lệnh chỉ thực hiện những gì mà những người này dự định làm, sau đó biến chúng thành chủ sở hữu gốc và thêm bit setuid cho chúng không? Tất nhiên, một vấn đề lớn là bạn có thể không muốn người khác chạy các lệnh này. Tôi không chắc liệu bạn có thể lấy thông tin người dùng ban đầu hay không. Và tất nhiên, luôn cần phải cẩn thận hơn với setuid/setgid.

lá cờ sa
Chương trình * có thể * lấy thông tin người dùng ban đầu. getuid() rõ ràng vẫn trả về người dùng ban đầu. Người dùng setuid là geteuid() ("UID hiệu quả")
Nikita Kipriyanov avatar
lá cờ za
Trên thực tế, *đây* là cách thông thường. *Đây* là cách thức hoạt động của `sudo`.
lá cờ do
JoL
"hoặc tập lệnh" -- Setuid không hoạt động trên tập lệnh. Chúng cần phải là tệp thực thi nhị phân.
Điểm:2
lá cờ cn

Nếu bạn trao cho người dùng quyền cai trị miễn phí với quyền root, thì người dùng đó có thể giết hầu hết mọi thứ. Đối với một số cuộc thảo luận chuyên sâu và cách giải quyết có thể xem: thảo luận sigkill ngăn xếp unix.

Ngoài ra, giải pháp giám sát được đề cập bởi @bta rất thú vị. Trên thực tế, có sẵn một gói cơ quan giám sát phần mềm, có thể được định cấu hình để theo dõi việc thay đổi tệp hoặc thực thi tập lệnh người dùng. Tuy nhiên, trên hầu hết các hạt nhân tiêu chuẩn, cơ quan giám sát này có thể bị dừng bởi người dùng root hoặc bạn có thể thay đổi cấu hình của nó. Nhưng những người dùng khác sẽ phải nhận thức được điều này để tránh nó. Nhìn thấy: https://linux.die.net/man/8/watchdog

Nhưng nếu bạn không phải cho phép toàn quyền truy cập root mà có thể quản lý quyền truy cập của họ bằng cơ chế sudo, thì bạn có thể đặt một số lệnh với đối số rõ ràng để họ thực thi và không cho phép bất kỳ thứ gì khác ngoài quyền người dùng mặc định của họ.

Ví dụ, bạn có thể đặt /bin/giết bên trong /etc/sudoers tệp, nhưng chỉ cho phép các đối số cụ thể.

bob TẤT CẢ=(root) /bin/kill -sigTERM [1-9][0-9][0-9][0-9]

Điều này sẽ cho phép người dùng bồng bềnh để thực hiện /bin/giết, nhưng chỉ hủy các tiến trình có PID trong khoảng từ 1000 đến 9999. Nếu bạn thực thi trình theo dõi của mình đủ sớm, nó sẽ có PID thấp và không thể hủy theo cách này. Người dùng bồng bềnh Tất nhiên, vẫn có thể gây rối với bạn bằng cách giết chết các quy trình người dùng của chính bạn .... và những gì với gói PID, điều này có thể không quá hữu ích.

Có thể trừ một số tùy chọn nhất định khỏi một bộ đầy đủ. Ví dụ: hủy tất cả PID không âm, nhưng không cho phép báo hiệu PID chứa 1337 và không cho phép hủy -1.

bob ALL=(root) /bin/kill -sigTERM *,!/bin/kill *1337*,!bin/kill *-1*

Nhưng điều đó sẽ hơi khó xử và bạn sẽ rất chắc chắn rằng chương trình không bao gồm các số nguyên của nó. Procps kill không xa như tôi có thể thấy, nhưng ví dụ này vẫn cho phép hủy một quy trình với pid 1337 nếu nó là một phần của nhóm quy trình mà nó không phải là thủ lĩnh. Vì vậy, điều này cho thấy việc làm việc với các phủ định hoặc danh sách đen phức tạp như thế nào.

Tùy chọn tốt hơn, chỉ cho phép hủy một số quy trình nhất định theo tên

bob ALL=(root) /usr/bin/pkill -sigTERM -f name process

Hoặc chỉ khởi động lại dịch vụ cụ thể

bob ALL=(root) /bin/systemctl khởi động lại dịch vụ

Người dùng có thể xem các lệnh sudo có sẵn với sudo -l

Điều quan trọng là nếu bạn cho phép một số chương trình chỉ định chúng sẽ có đường dẫn đầy đủ. Và người dùng cũng không được có quyền hủy liên kết hoặc chỉnh sửa trên chương trình đó, nếu không chương trình có thể bị thay thế bằng một thứ khác.

Nikita Kipriyanov avatar
lá cờ za
Hạn chế pid là vô ích. Hệ thống đang chạy đủ lâu sẽ có các pid được bao bọc, do đó, hệ thống sẽ có cả quy trình người dùng và quy trình hệ thống với bất kỳ pid nào, không có phân phối rõ ràng. Chắc chắn sẽ không có cách nào để thể hiện một tập hợp các pids không thể bị giết.
George Y avatar
lá cờ vn
Chính xác, các vòng lặp pid trong khoảng 0 ~ 2^16-1=65535.
Nikita Kipriyanov avatar
lá cờ za
PID_MAX là 32767 theo mặc định, nhưng nó có thể được điều chỉnh lên tới 2²²-1, xem http://web.archive.org/web/20111209081734/http://research.cs.wisc.edu/condor/condorg/linux_scalability. Html . Mặc định quá nhỏ để không phá vỡ phần mềm cũ.
Điểm:0
lá cờ vn

Tôi đã nghĩ ra A Start!

nguồn gốc có thể đặt MẶC ĐỊNH MẶC ĐỊNH cho người dùng như thế này:

useradd [someuser] -s [một tệp thực thi nào đó]

Sau đó, nếu tệp thực thi nhất định = Tập lệnh kiểm duyệt:

  1. Tự động kiểm duyệt các lệnh nhất định không được thực thi. Thích dừng lại & rsyslog cộng lại.

  2. cấm các lệnh để thoát khỏi trình bao này và sử dụng trình bao khác ngay cả bản gốc đánh đập

  3. cấm các lệnh để ngăn người dùng giành được vai trò nguồn gốc như những gì @ user253751 đã đề cập ở trên.

  4. Truyền phần còn lại của lệnh cho /bin/bash

Sau đó, chỉ cần thiết lập nó r+x cho bất kỳ người dùng nào.

Bất kỳ đề nghị được đánh giá cao dưới câu trả lời này. Đặc biệt đối với 2 & 3 dường như có nhiều phương tiện khác nhau.


Bash sẽ tải các cài đặt trong /etc/hồ sơ/etc/bashrc đầu tiên. Tôi đã nhận thấy các thỏa thuận sau với PROMPT_COMMAND Biến đổi. Có thể chiếm đoạt điều này ở dòng cuối cùng của nó để thêm vào tập lệnh kiểm duyệt, nhưng tên người dùng được miễn trừ là cần thiết đối với một số hệ thống vì theo mặc định, không ai có quyền root để thay đổi lại tên người dùng đó.

Một kiểm duyệt hoàn chỉnh đáp ứng 4+1 ở trên sẽ được đánh dấu là câu trả lời hợp pháp.

Tôi sẽ không bao giờ đánh dấu câu trả lời "bạn sẽ từ bỏ nó" là hợp pháp.

câu hỏi liên quan là:

Làm cách nào tôi có thể ghi lại các lệnh bash của người dùng?

Làm cách nào tôi có thể tạo bash để ghi các lệnh shell vào nhật ký hệ thống?

Đăng nhập mà không cần chạy bash_profile hoặc bashrc

lá cờ mt
Kịch bản kiểm duyệt là một ý kiến ​​hay; bạn cũng có thể thực hiện việc này thông qua sudo, vì vậy người dùng có quyền truy cập bình thường khi họ không có đặc quyền, nhưng hãy chạy "bản kiểm duyệt sudo" để chạy nó. Vấn đề là đảm bảo rằng bạn đã nắm bắt được hoàn toàn mọi cách mà mọi người có thể lẻn qua nó. Ví dụ: bạn không thể để chúng chạy emacs hoặc vi vì chúng có thể khởi động trình bao. Do đó, việc đưa vào danh sách trắng dễ dàng hơn.
Gerrit avatar
lá cờ cn
Công cụ thực thi kiểm duyệt khả thi duy nhất chạy bằng quyền root sẽ là một menu giống như danh sách trắng các hành động. Nhấn 1 để dừng dịch vụ A, nhấn 2 để dừng dịch vụ B. Bất kỳ cách tiếp cận nào khác sẽ luôn đưa ra các cách để lẻn ra ngoài. Và thậm chí sau đó, nó sẽ phải được biên dịch tĩnh và thực hiện tất cả các loại biện pháp phòng ngừa để cách ly đối với môi trường mà nó bắt đầu. Tốt hơn là không phát minh lại bánh xe và sử dụng các tiện ích như sudo có nhiều kinh nghiệm trong lĩnh vực này của hành động.
Nikita Kipriyanov avatar
lá cờ za
Bạn phải coi chừng nhiều thứ như thoát vỏ, v.v. Và, "kịch bản kiểm duyệt" thực sự không thể là một kịch bản. Linux chỉ cho phép cài đặt setuid/setgid cho các tệp nhị phân, không phải cho tập lệnh, vì vậy tập lệnh của bạn không thể được bắt đầu bởi người dùng không có đặc quyền.Và, tôi muốn viết lại @Gerrit, tốt hơn hết hãy xây dựng danh sách các lệnh hoàn chỉnh được phép (không có trình giữ chỗ) và đó sẽ là biện pháp bảo vệ bạn, vì sẽ không thể phá vỡ.
Nikita Kipriyanov avatar
lá cờ za
Ngoài ra, hãy lưu ý rằng những gì bạn nhận được là phiên bản đặc biệt của `sudo`. Vì vậy, tốt hơn hãy đọc hướng dẫn sử dụng sudo và điều chỉnh cấu hình của nó hơn là phát minh ra sudo của riêng bạn.
George Y avatar
lá cờ vn
@ pjc50 Cảm ơn bạn đã chỉ ra phương tiện tấn công phụ thông qua `vi` và `vim` . Nhưng tôi nghi ngờ liệu họ có thể phá vỡ giới hạn của shell hay không vì `vi` và `vim` chỉ có thể gửi một dòng lệnh tới shell hiện tại, tương tự với `htop` và các ứng dụng khác.
lá cờ ca
Chỉ cần lưu ý rằng phương pháp này sẽ bị hỏng ngay khi bạn cho phép bất kỳ loại ghi nào vào các tệp tùy ý với quyền root (thậm chí chỉ cần chuyển hướng đầu vào là đủ). Người dùng chỉ có thể viết lại một tệp thực thi tùy ý và chạy bất cứ thứ gì họ muốn. (mọi thứ trừ danh sách trắng các lệnh sẽ gặp vấn đề tương tự)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.