Điều gì xác định các lệnh Linux nào yêu cầu quyền truy cập root?


23

Điều gì xác định các lệnh Linux nào yêu cầu quyền truy cập root? Tôi hiểu lý do tại sao mong muốn rằng, apt-getcần phải có rootđặc quyền; Nhưng những gì phân biệt các lệnh này với phần còn lại? Có phải nó chỉ đơn giản là vấn đề quyền sở hữu và quyền thực thi của tệp thực thi?


2
Đây chủ yếu là chức năng của tập tin họ chạm vào và chức năng họ gọi.
Federico klez Culloca

9
Một số ứng dụng cần truy cập vào tệp / thư mục, thuộc sở hữu của root. Vì vậy, họ chỉ cần gọi openvà nhận được "quyền từ chối". Một số ứng dụng kiểm tra getuidvà ngừng hoạt động nếu chúng không được gọi bằng root. Một số thuộc sở hữu vật lý của root và chỉ chủ sở hữu mới có thể thực thi chúng (xem chmod). Nếu bạn đang hỏi liệu có một số dấu hiệu "cần root" trong tiêu đề ứng dụng hay không - câu trả lời là không. Không có điều đó afaik
user996142

1
ps: một số tòa nhà (như liên kết với cổng nổi tiếng <1024) cũng có thể cần quyền truy cập root.
user996142

apt-get hoàn toàn không yêu cầu root. Nó nằm trong thư mục / usr / bin, xem Askubfox.com/a/440791/169736
Braiam

Bạn có thể hiểu rõ ý của bạn bằng cách "yêu cầu" ở đây. Bạn có nghĩa là chương trình sẽ không thực thi trừ khi bạn root (hoặc có quyền sudo), hoặc nó cần phải root để thực hiện đúng công việc của nó?
jamesqf

Câu trả lời:


15

Trong linux, các đặc quyền của root tại một thời điểm được chia thành "các khả năng", do đó bạn có thể nhận được một danh sách đầy đủ các đặc quyền đặc biệt của root bằng cách xem tài liệu đó : man 7 capabilities.

Để trả lời câu hỏi của bạn, một lệnh sẽ yêu cầu chạy bằng root khi nó cần một trong những đặc quyền này và thực thi phi tập lệnh của nó không có khả năng liên quan được đặt trong siêu dữ liệu tệp của nó (ví dụ: nếu tập lệnh python yêu cầu khả năng, thì khả năng sẽ cần phải có trong trình thông dịch python được chỉ định trong dòng shebang).

Xin lưu ý rằng một số lệnh cần quyền truy cập root không cần một cái gì đó giống như sudovì chúng có bit SUID được đặt trong tệp thực thi của chúng. Bit này làm cho tệp thực thi chạy như chủ sở hữu (thường là root) khi được thực thi bởi bất kỳ ai có quyền truy cập. Một ví dụ là sudochính việc thay đổi người dùng là một hành động đặc quyền mà nó cần phải làm.

EDIT: Tôi lưu ý từ câu hỏi của bạn rằng bạn có thể có ý tưởng rằng bạn có thể xác định xem một lệnh có cần quyền truy cập root hay không trước khi chạy nó. Đó không phải là trường hợp. Một chương trình đôi khi có thể yêu cầu quyền root và những lần khác thì không, và đây có thể là một quyết định được đưa ra bởi chương trình vì dữ liệu được cung cấp trong thời gian chạy. Lấy ví dụ, gọi vim, giống như vậy mà không có đối số, và sau đó thông qua một loạt các phím bấm và dán, bảo nó viết một cái gì đó vào một tệp mà nó không có quyền để viết, hoặc có thể thực thi một lệnh khác mà chính nó sẽ yêu cầu quyền root. Không có gì về lệnh trước khi thực thi có thể chỉ ra rằng cuối cùng nó sẽ yêu cầu quyền truy cập root. Đó là điều chỉ có thể được xác định tại thời điểm nó cố gắng làm điều gì đó đòi hỏi nó.

Dù sao, đây là rất ít ví dụ từ trang chủ được tham chiếu về các đặc quyền của root:

  • Thực hiện các thao tác tùy ý của các UID quá trình (setuid (2), setreuid (2), setresuid (2), setfsuid (2));
  • Bỏ qua tập tin đọc, viết và thực hiện kiểm tra quyền. (DAC là tên viết tắt của "kiểm soát truy cập tùy ý".)
  • Bỏ qua kiểm tra quyền để gửi tín hiệu (xem kill (2)). Điều này bao gồm việc sử dụng thao tác KDSIGACCEPT của ioctl (2).
  • Thực hiện các hoạt động khác nhau liên quan đến mạng:
    • cấu hình giao diện;
    • quản trị tường lửa IP, giả mạo và kế toán;
    • sửa đổi bảng định tuyến;
  • Ràng buộc một ổ cắm với các cổng đặc quyền miền Internet (số cổng nhỏ hơn 1024).
  • Tải và dỡ bỏ các mô-đun hạt nhân (xem init_module (2) và xóa_module (2));
  • Đặt đồng hồ hệ thống (ổn định ngày (2), stime (2), adjtimex (2)); đặt đồng hồ thời gian thực (phần cứng).
  • Thực hiện một loạt các hoạt động quản trị hệ thống bao gồm: quotactl (2), mount (2), umount (2), hoán đổi (2), hoán đổi (2), sethostname (2) và setdomainname (2);
  • Sử dụng khởi động lại (2) và kexec_load (2).
  • Sử dụng chroot (2).
  • Tăng quy trình giá trị tốt đẹp (đẹp (2), setp Warriority (2)) và thay đổi giá trị đẹp cho các quy trình tùy ý;

32

Đây chủ yếu là vấn đề của những gì công cụ hoặc chương trình làm . Hãy nhớ rằng một người không phải là siêu người dùng chỉ có thể chạm vào các tệp mà họ sở hữu hoặc có quyền truy cập, bất kỳ công cụ nào cần có thể đưa ngón tay vào mọi thứ sẽ yêu cầu quyền truy cập của siêu người dùng để thực hiện công việc đó. Một mẫu nhanh về những thứ có thể yêu cầu quyền truy cập siêu người dùng bao gồm, nhưng không giới hạn ở:

  • Mở ổ cắm TCP nghe trên cổng dưới 1024
  • Thay đổi cấu hình hệ thống (ví dụ: mọi thứ trong /etc)
  • Thêm thư viện mới có thể truy cập toàn cầu ( /lib/usr/lib) hoặc nhị phân ( /bin, /usr/bin)
  • Chạm vào bất kỳ tệp nào không thuộc sở hữu của người dùng đang thực hiện thao tác chạm mà không có chế độ cho phép đủ
  • Thay đổi quyền sở hữu tệp của người dùng khác
  • Ưu tiên quá trình vượt trội (ví dụ renice)
  • Bắt đầu hoặc dừng hầu hết các dịch vụ
  • Cấu hình kernel (ví dụ: điều chỉnh swappiness)
  • Điều chỉnh hạn ngạch hệ thống tập tin
  • Ghi vào đĩa "đầy đủ" (hầu hết các hệ thống tệp dành một số không gian cho người dùng root)
  • Thực hiện các hành động như những người dùng khác

4
"Thay đổi ưu tiên quá trình" người dùng không root có thể thay đổi chi tiết, để đẹp hơn. Điều duy nhất họ không thể làm là trở nên kém đẹp.
Braiam

1
Tôi biết danh sách này chưa đầy đủ, nhưng tôi cảm thấy một nhiệm vụ rất quan trọng mà chỉ những người siêu nhân mới có thể làm là mạo danh - hoặc đơn giản là đăng nhập như - những người dùng khác.
phihag

Tôi đã điều chỉnh điểm nhấn về các ưu tiên của quy trình và thêm "Thực hiện các hành động như những người dùng khác". Hy vọng với đủ thời gian và bình luận, danh sách này sẽ trở nên toàn diện hơn.
DopeGhoti

0

Tôi nghĩ rằng nó phù hợp với danh tính của người dùng để xác minh quyền, không theo thứ tự để phân chia quyền. Các tập tin và người dùng được đặc quyền và các lệnh không nên được chia.


3
Tôi không có ý nói thô lỗ và tôi hiểu tiếng Anh có thể không phải là ngôn ngữ đầu tiên của bạn, nhưng tôi hoàn toàn không hiểu câu trả lời này, giống như những gì nó thậm chí đang cố gắng nói. "Phù hợp" có nghĩa là "thỏa thuận" hoặc "sự phù hợp"; Tôi không thể thấy nó có thể được sử dụng như thế nào với "danh tính người dùng". "Thứ tự phân chia quyền" nghĩa là gì? "Chia" có nghĩa là "tách". "Đặt hàng" của ai? Làm thế nào các tập tin "được bảo mật" khi chúng không phải là thứ có thể hành động để sử dụng bất kỳ quyền riêng tư nào? Tôi đoán tôi có thể hiểu "các lệnh không nên được phân chia" trong bối cảnh của câu hỏi này, nhưng đó là nó. Như nó là, nó dường như không thể nhìn thấy.
JoL

@JoL Tôi nghĩ rằng "mệnh lệnh" là một sự dịch sai và phải là "lệnh", cho phép phân tích khác nhau của câu đó. Hơi lúng túng khi sử dụng những gì trong câu trả lời này càng nhiều càng tốt: "Tôi nghĩ rằng nó phù hợp với cách sử dụng danh tính của người dùng để xác minh các quyền mà các quyền không bị phân tách theo lệnh. Đặc quyền là về các tệp và người dùng, nên có không được chia cho các lệnh. " Điều này vẫn chưa quá rõ ràng, nhưng nó có ý nghĩa hơn đối với tôi so với bạn. Tôi hy vọng rằng nhận xét của tôi sẽ giúp ai đó hiểu đầy đủ câu trả lời này và chỉnh sửa nó thành hình
hvd
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.