Lệnh run0 mới của Linux có chạy sudo không?

Tác giả AI+, T.Bảy 04, 2024, 07:24:16 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Lệnh run0 có khác với lệnh sudo không?

  • run0 là một lệnh systemd mới nhằm thay thế sudo, cung cấp các quyền nâng cao cho các lệnh.
  • run0 sử dụng systemd-run làm back end, khởi chạy các tiến trình dưới dạng dịch vụ tạm thời, tồn tại trong thời gian ngắn.
  • Các lợi ích bảo mật của run0 rất hấp dẫn nhưng nó sẽ không thay thế hoàn toàn sudo trong một thời gian rất dài.


Vào ngày 24 tháng 4 năm 2024, Lennart Poettering đã đăng mô tả về lệnh systemd mới, được gọi là run0. Nó là sự thay thế cho sudo. Đây là những gì bạn cần biết về cuộc tranh cãi mới nhất về systemd.

1. Có chuyện gì với sudo vậy?

Lệnh sudo dường như đã tồn tại từ rất lâu. Nó thực sự có từ những năm 1980. Nó cho phép bạn chạy các lệnh hoặc chương trình như thể bạn là chủ sở hữu của lệnh hoặc là thành viên của nhóm lệnh. Điều quan trọng là nếu chủ sở hữu thực sự của lệnh có các quyền và khả năng nâng cao thì lệnh sẽ chạy với các quyền nâng cao đó. Cứ như thể những đặc quyền cao quý của họ đã tạm thời được ban cho bạn.

Theo mặc định, người dùng bạn mạo danh là siêu người dùng, root. Ban đầu, sudo là viết tắt của "superuser, do". Điều đó đã thay đổi khi những phát triển sau này cho phép bạn sử dụng sudo để mạo danh bất kỳ người dùng nào. Tên của nó bây giờ có nghĩa là "người dùng thay thế, hãy làm", nhưng nó hầu như luôn được sử dụng để mạo danh root.

Để một lệnh hoặc ứng dụng có thể chạy với các quyền nâng cao bởi người dùng thông thường, thì các bit SUID hoặc GUID hoặc cả hai đều cần được đặt trên lệnh. Và tất nhiên, người dùng được đề cập phải được phép sử dụng lệnh sudo.

Mã nâng cao hoặc mã đặc quyền được chạy trong ngữ cảnh thực thi của người dùng đang gọi, do đó, mã này chạy trong môi trường nhằm chạy mã không có đặc quyền. Bản thân điều đó đã là một mối lo ngại về an ninh. Ngoài ra, nếu lệnh không được viết để tôn trọng chính xác các quyền nâng cao của nó hoặc nó không tự dọn dẹp một cách triệt để và chính xác thì các lỗ hổng khác có thể phát sinh. Một vectơ tấn công nổi tiếng khai thác các tệp nhị phân SUID được viết kém hoặc được cấu hình kém để lấy shell gốc.

2. Lệnh run0 có gì khác biệt?

Lệnh run0 không phải là một lệnh mới, nó là một cách mới để gọi một lệnh hiện có. Đó là một liên kết tượng trưng đến một thành phần systemd lâu đời được gọi là systemd-run. Đúng như tên gọi của nó, nó chạy hoặc khởi chạy các tiến trình khác. run0 là giao diện người dùng của lệnh này.

Các quy trình được khởi chạy bởi run0 chạy dưới dạng dịch vụ tạm thời, tồn tại trong thời gian ngắn. Thời điểm lệnh của bạn quay trở lại thiết bị đầu cuối, bạn sẽ trở lại là người dùng thông thường. Không có "thời gian gia hạn" xác thực như với sudo. Nếu bạn sử dụng sudo và nhập mật khẩu của mình, những lần sử dụng sudo tiếp theo trong cùng một thiết bị đầu cuối và trong khoảng thời gian chờ sudo sẽ không yêu cầu xác thực. Khoảng thời gian chờ thay đổi tùy theo bản phân phối, nhưng phổ biến là giá trị từ 5 đến 15 phút. Với run0, bạn luôn xác thực.

Một điểm khác biệt nữa là việc xác thực được xử lý bởi polkit, bộ công cụ chính sách cấp ứng dụng systemd. Nếu có thể, xác thực này nằm ngoài phiên đang chạy lệnh đích. Lệnh nâng cao được chạy trong một thiết bị đầu cuối giả được phân nhánh, do đó nó được đóng gói và cô lập. Hầu như không có bối cảnh thực thi nào của người dùng có sẵn cho lệnh được khởi chạy, ngoại trừ biến môi trường $TERM. Tương tự, thông tin xác thực không được chuyển vào ngữ cảnh thực thi của lệnh đã khởi chạy.

Các lệnh được nâng cao và thực thi theo cách này không cần thiết lập các bit SUID hoặc GUID cũng như không cần phải tuân thủ và kỹ lưỡng về việc dọn dẹp bên trong của chúng. Tất cả đều được xử lý bởi run0.

Với sudo, bạn có thể biến người dùng thông thường thành siêu người dùng không bị hạn chế hoặc bạn có thể cấp cho họ quyền hạn siêu người dùng bằng cách ra lệnh họ có thể sử dụng sudo với. Bạn cũng có thể đạt được mức độ chi tiết này bằng polkit.

3. Sử dụng run0

Để sử dụng run0, bạn cần chạy systemd phiên bản 256 hoặc tốt hơn là phiên bản đã sửa lỗi 256.1. Phiên bản 256.1 đang được tung ra dưới dạng bản cập nhật tại thời điểm viết bài và các bản cài đặt mới của một số bản phân phối Linux bao gồm 256.1 làm tiêu chuẩn. Bạn có thể kiểm tra phiên bản của mình bằng lệnh này.

Mã nguồn [Chọn]
systemctl --version

Sử dụng run0 gần giống như sử dụng sudo. Bạn đặt trước lệnh bạn muốn khởi chạy bằng "run0" và cung cấp mật khẩu của mình.

Mã nguồn [Chọn]
run0 ls

Nếu bạn đang sử dụng môi trường màn hình đồ họa, lời nhắc nhập mật khẩu của bạn là một hộp thoại.


Nền văn bản của thiết bị đầu cuối thay đổi màu sắc để hiển thị thông báo bạn đang sử dụng đặc quyền cấp cao. Lưu ý rằng nó sẽ trở về màu nền thông thường sau khi lệnh được hoàn thành.


Bạn có thể sử dụng tùy chọn --background để tắt màu nền hoặc thay đổi nó thành tổ hợp màu ANSI mà bạn chọn.

Để xem văn bản màu trắng trên nền xanh, hãy sử dụng chuỗi ANSI này.

Mã nguồn [Chọn]
run0 --background="44;1" ls

Để chạy cùng một lệnh mà không tô sáng màu, hãy bỏ qua chuỗi ANSI nhưng hãy đảm bảo bạn để lại dấu "=".

Mã nguồn [Chọn]
run0 --background= ls

Gõ run0 không có tham số lệnh sẽ đăng nhập bạn bằng quyền root một cách hiệu quả.

Mã nguồn [Chọn]
run0

Lưu ý sự thay đổi trong dấu nhắc lệnh. Bạn có thể quay lại trạng thái người dùng thông thường của mình bằng cách nhập exit và nhấn Enter hoặc nhấn Ctrl+D.


Nếu bạn sử dụng run0 trên máy tính Linux không có môi trường máy tính để bàn, lời nhắc nhập mật khẩu của bạn sẽ xuất hiện trong cửa sổ terminal.


4. Lệnh run0 sẽ thay thế sudo?

Các lệnh được thay thế theo thời gian. Trên thực tế, sudo đã thay thế phiên bản tiền nhiệm cũ hơn nhiều của nó su, vốn là một phần của hệ điều hành giống Unix kể từ năm 1971. Nhưng không ai mong đợi run0 sẽ nhảy vào và lật đổ sudo. sudo đã cố thủ quá sâu để biến mất nhanh chóng.

Các lợi ích bảo mật thoạt nhìn rất hấp dẫn, tuy nhiên, nếu không loại bỏ các tệp nhị phân sudo và SUID khỏi máy tính của bạn, việc chỉ áp dụng run0 sẽ không tạo ra nhiều khác biệt đối với lập trường bảo mật của bạn. Điều đó giống như lắp một cánh cửa tốt hơn bên cạnh cánh cửa còn thiếu sót hiện có của bạn.

Yêu cầu "xác thực mọi lúc, mọi nơi" có thể gặp phải một số phản hồi từ cơ sở người dùng, ngay cả khi đó là cách làm việc an toàn hơn. Trớ trêu thay, polkit—mô-đun xác thực—sử dụng các tệp nhị phân SUID và có các vấn đề bảo mật riêng.

Đó dường như chính là định nghĩa của một thứ gì đó cắt đứt cả hai chiều. Đó là một cú chọc thẳng vào mắt đối với polkit và một cú tát mạnh vào các tệp nhị phân SUID.

Mặc dù vậy, tôi vẫn có thể thấy một thời điểm trong tương lai nơi run0 là tiêu chuẩn mới và sudo không được thay thế chính xác. Nhưng có thể bị rớt xuống vị trí thấp hơn.

run0 được cho là cách tốt hơn để thực hiện leo thang đặc quyền, nhưng sudo đã ăn sâu vào tâm lý Linux của người dùng. Ngay cả khi tôi đang nghĩ đến run0, tôi vẫn thấy mình đang gõ sudo.

Có lẽ tất cả chúng ta nên đặt bí danh sudo để trỏ tới run0?