Làm thế nào để hệ điều hành biết rằng một lệnh cần sudo?


16
  1. Khi bạn chạy một tệp thực thi, đôi khi HĐH sẽ từ chối sự cho phép của bạn. Ví dụ, chạy make installvới tiền tố là một đường dẫn hệ thống sẽ cần sudo, trong khi với tiền tố là một đường dẫn không phải là hệ thống sẽ không được yêu cầu sudo. Làm thế nào để HĐH quyết định rằng việc chạy một tệp thực thi sẽ đòi hỏi nhiều đặc quyền hơn người dùng có, ngay cả trước khi chương trình làm điều gì đó?
  2. Đôi khi, chạy một chương trình sẽ không bị từ chối cấp phép, nhưng chương trình sẽ có thể làm nhiều việc hơn nếu nó được chạy cùng sudo. Ví dụ, khi chạy dutrên một số thư mục hệ thống, chỉ với sudonó sẽ có thể truy cập một số thư mục. Tại sao HĐH không từ chối cấp phép chạy một chương trình như vậy, hoặc thân thiện thông báo thêm đặc quyền được ưu tiên hơn, trước khi chương trình có thể chạy?
  3. Có đúng là bất cứ khi nào sudolàm việc, sucũng sẽ làm việc, và bất cứ khi nào sulàm việc, sudocũng sẽ làm việc? hoặc với su, một người dùng có thể làm nhiều hơn với sudo? HĐH quyết định khi nào sudohoạt động và khi nào sucần thiết?

Câu hỏi này đã được trả lời cho bạn chưa, hoặc bạn muốn biết thêm thông tin?
ctrl-alt-delor

Câu trả lời:


14
  1. Đôi khi, thông báo "Quyền bị từ chối" là do quyền của hệ thống tệp từ chối bạn viết quyền truy cập, chẳng hạn. Công cụ thực thi / công cụ chỉ đơn giản kiểm tra xem hệ thống tập tin có cấp cho bạn đủ quyền để thực hiện những gì bạn sắp làm hay không và đưa ra lỗi nếu hệ thống tập tin từ chối. Những lần khác, chính công cụ sẽ kiểm tra ID người dùng của bạn trước khi cho phép bạn tiếp tục sử dụng nó.
  2. Khi bạn chạy một chương trình với sudobạn đang chạy nó dưới một số tên người dùng khác. Nếu người dùng đó "có thể làm nhiều việc hơn" người dùng của bạn và sudocấu hình cho phép bạn thực hiện những việc này thay cho người dùng khác thì có, sudosẽ cho phép bạn làm nhiều việc hơn. Điều này là không cần thiết, mặc dù. Nếu bạn chỉ giải sudoquyết ở đầu dòng lệnh, bạn thực sự đang sudolàm root, vì vậy, thông thường bạn có thể làm nhiều việc hơn là một phàm nhân.
  3. Chắc chắn là không. Để sử dụng, sudobạn cần cung cấp mật khẩu người dùng của riêng mình và sau đó bạn được phép thực hiện một số việc thay mặt người dùng mục tiêu. Để sử dụng su, bạn cần mật khẩu của người dùng mục tiêu và nếu bạn có mật khẩu đó, bạn sẽ trở thành người dùng mục tiêu đó theo như hệ thống có liên quan và có thể làm bất cứ điều gì mà người dùng có thể làm.

Xem thêm


Cảm ơn. Có phải "quyền hệ thống tập tin từ chối bạn viết quyền truy cập" = "chế độ truy cập của tệp không có bit thực thi được đặt cho người dùng, có thể được đặt bởi chmod" không?
StackExchange cho tất cả các

1
@Tim Trên thực tế, nó = "chế độ truy cập của tệp không có bit ghi được thiết lập cho người dùng". Và vâng, điều này tất nhiên có thể được khắc phục bằng cách chmodcung cấp bạn là chủ sở hữu của tệp hoặc root.
Joseph R.

Liệu sudo có cần thiết, hoàn toàn và chỉ phụ thuộc vào việc bit thực thi không được đặt cho người dùng không? Xem unix.stackexchange.com/q/147052/674
StackExchange cho tất cả các

@Tim Rõ ràng bạn cần bit thực thi để có thể chạy tệp thực thi ngay từ đầu.
Joseph R.

1
@JosephR. Không rõ ràng. chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./hellotạo ra một "Xin chào, thế giới!" đầu ra.
doneal24

24

Đối với các mục đích bạn đã mô tả, HĐH không quyết định liệu bạn có cần sudo để chạy chương trình ban đầu hay không . Thay vào đó, sau khi chương trình bắt đầu chạy và sau đó cố gắng làm điều gì đó mà người dùng hiện tại không cho phép (chẳng hạn như viết tệp /usr/binđể cài đặt lệnh mới), HĐH sẽ ngăn chặn quyền truy cập tệp. Hành động để thực hiện điều kiện này là tùy thuộc vào chương trình; makedừng chạy nhưng dusẽ chuyển sang tập tin / thư mục tiếp theo sau khi in một tin nhắn.

Các lệnh susudolà hai cách khác nhau để chạy một chương trình với quyền root. Chúng có thể khác nhau về các chi tiết nhỏ như nội dung của môi trường khi bắt đầu chương trình mới, tùy thuộc vào các tùy chọn được sử dụng. HĐH không cần quyết định khi nào cái này có thể hoạt động.


6

susudolà những chương trình đặc quyền. suthay đổi (sau khi xác thực thành công) id người dùng và nhóm thực sự và hiệu quả đối với người dùng mà bạn sử dụng su. Như vậy, sutương tự như login. Lưu ý rằng sucó thể được sử dụng để thay đổi cho bất kỳ người dùng nào, không chỉ root. sudocũng thay đổi id người dùng và nhóm thực sự và hiệu quả. Cho đến thời điểm này susudotương tự (nhưng không liên quan), ngoài ra chúng rất khác nhau.

Với su, bạn cần biết mật khẩu của mục tiêu và sau khi xác thực, bạn có thể làm bất cứ điều gì bạn muốn với tư cách là người dùng đó. Việc sử dụng sucó thể được hạn chế bằng cách thiết lập SU_WHEEL_ONLYtrong /etc/login.defs. Nếu được đặt, chỉ người dùng trong nhóm wheelcó thể sử dụng su, nếu không, nó không bị hạn chế. Ngoài ra, sulà tất cả hoặc không có gì.

sudolà hoàn toàn khác nhau về điều đó. Với sudobạn có thể định nghĩa các chính sách khá phức tạp /etc/sudoersvề việc sudoer (người dùng gọi sudo) được phép làm gì. Chẳng hạn, bạn có thể xác định các chính sách trong đó người dùng nhất định chỉ có thể chạy một số chương trình nhất định với các đặc quyền nhất định, trong khi những người dùng khác có thể chạy các chương trình khác với các đặc quyền khác.

Một trong những tính năng nổi bật của sudonó là bạn có thể định cấu hình nó sao cho người dùng phải tự xác thực bằng mật khẩu của chính mình (thay vì mật khẩu của mục tiêu). Do đó, sudođã trở nên rất phổ biến trong số các quản trị viên, vì nó cho phép người dùng chỉ thực hiện các hoạt động đặc quyền được xác định mà không xử lý mật khẩu siêu người dùng, cộng với bạn có được một số mức độ trách nhiệm.


2

tl; dr Access được xác định bởi người dùng đang chạy ứng dụng và sudochạy các ứng dụng với tư cách là người dùng khác nhau.

Phiên bản đầy đủ:

Làm thế nào để hệ điều hành biết rằng một lệnh cần sudo?

Nó không biết. UNIX quản lý các quyền không ở cấp ứng dụng mà ở cấp hệ thống tệp: quyền được cấp cho người dùng truy cập các tệp cụ thể. Các ứng dụng sau đó được chạy thay mặt người dùng - mỗi quy trình đang chạy có người dùng liên kết với nó. Người dùng đó được sử dụng để xác định quyền cho ứng dụng đó. Sudo hoạt động bằng cách chạy các ứng dụng thay mặt cho người dùng khác (có quyền liên quan đến người dùng khác), cụ thể là rootsiêu người dùng.

Ví dụ của bạn:

  1. Nếu người dùng có quyền ghi vào thư mục cụ thể, họ có thể make installvào thư mục đó. Nếu không họ có thể đã rootlàm điều đó - bằng cách sử dụng sudo.

  2. Nếu bạn không thể truy cập các tập tin trong một thư mục, duchạy cho bạn cũng không thể truy cập nó. rootcó thể truy cập hầu như mọi tệp, vì vậy sudo du( duchạy thay mặt root) cũng có thể truy cập chúng.

Có đúng là bất cứ khi nào sudo hoạt động, su cũng sẽ hoạt động, và bất cứ khi nào su hoạt động, sudo cũng sẽ hoạt động?

Có và không. Có, nếu chương trình thực sự được chạy, nó sẽ hoạt động giống nhau theo cả hai sudosu. Tuy nhiên, việc sudocung cấp cho phép kiểm soát chi tiết hơn về những người có thể chạy những gì theo bộ quy tắc được lưu trữ trong /etc/sudoerstệp. suđơn giản hơn - nếu bạn biết mật khẩu của người dùng mục tiêu, bạn có thể chạy các chương trình thay mặt cho người dùng đó.

Lưu ý cuối cùng: cách ứng dụng xử lý từ chối truy cập (trong đó ứng dụng hủy bỏ hoặc bỏ qua hoặc cảnh báo người dùng) tùy thuộc vào ứng dụng.


1

Không ai có ✓, vì vậy tôi đưa ra một câu trả lời có mọi thứ tôi có thể nghĩ ra.

1 Khi bạn chạy một tệp thực thi, đôi khi HĐH sẽ từ chối sự cho phép của bạn. Ví dụ: chạy make install với tiền tố là đường dẫn hệ thống sẽ cần sudo, trong khi với tiền tố là đường dẫn không phải hệ thống sẽ không được yêu cầu sudo. Làm thế nào để HĐH quyết định rằng việc chạy một tệp thực thi sẽ đòi hỏi nhiều đặc quyền hơn người dùng có, ngay cả trước khi chương trình làm điều gì đó?

Không, nó không được thực hiện khi một thực thi được bắt đầu. Nó được thực hiện khi thực thi cố gắng làm một cái gì đó.

Os sẽ kiểm tra các quyền và khả năng của hệ thống tệp (các quyền này không được bao phủ bởi các quyền của hệ thống tệp và bao gồm giảm mức độ đẹp, mknode, một số nội dung mạng cấp thấp, tiêu diệt các quy trình khác, khởi động lại, đặt thời gian, v.v.). Nếu bạn không có quyền thì bạn không thể làm được. Root có đầy đủ các khả năng, bao gồm cả CAP_DAC_OVERRIDE (bỏ qua quyền truy cập tệp).

2 Đôi khi, chạy chương trình sẽ không bị từ chối cấp phép, nhưng chương trình sẽ có thể làm nhiều việc hơn nếu chương trình được chạy bằng sudo. Ví dụ, khi chạy du trên một số thư mục hệ thống, chỉ với sudo, nó mới có thể truy cập một số thư mục. Tại sao HĐH không từ chối cấp phép chạy một chương trình như vậy, hoặc thân thiện thông báo thêm đặc quyền được ưu tiên hơn, trước khi chương trình có thể chạy?

HĐH không thể biết chương trình sẽ làm gì. Vì vậy, tùy thuộc vào chương trình để kiểm tra quyền trước khi bắt đầu và quyết định phải làm gì. Nó không phải làm điều này mặc dù.

Lưu ý: trên Android có một bảng kê khai, trong ứng dụng này khai báo những đặc quyền nào nó có thể sử dụng. HĐH sẽ giết bất kỳ ứng dụng nào cố gắng sử dụng một đặc quyền mà nó không khai báo và HĐH không phải lúc nào cũng đảm bảo rằng một đặc quyền có thể được tôn vinh. ví dụ truy cập mạng có thể không có sẵn.

2 Có đúng là bất cứ khi nào sudo hoạt động, su cũng sẽ hoạt động và bất cứ khi nào su hoạt động, sudo cũng sẽ hoạt động? hoặc với su, một người dùng có thể làm nhiều hơn với sudo? HĐH quyết định khi nào sudo hoạt động và khi nào cần su?

sudosulàm đại khái việc lấy mẫu. Một số khác biệt là xử lý biến môi trường và tránh sự cố bảo mật khác. Tuy nhiên, cả hai đều là công cụ cho phép bạn trở thành người dùng khác và cả hai đều có người dùng root mặc định.

su là công cụ ban đầu, nó yêu cầu bạn nhập mật khẩu của người dùng / nhóm mà bạn đang thay đổi.

sudolà mới hơn và theo mặc định, bạn phải nhập mật khẩu của riêng mình, nhưng có thể được cấu hình để chấp nhận mật khẩu của người dùng / nhóm mà bạn đang chuyển sang hoặc không có mật khẩu nào cả. Nó cũng cho phép rất nhiều cấu hình, về những lệnh mà nó sẽ làm việc với ai, cho ai và cách nó sẽ xác thực với chương trình này cho người dùng này trên máy này. Ngoài ra, đây cũng sudoeditlà một phần sudovà có thể được sử dụng để cho phép chỉnh sửa với tư cách là một người dùng khác và tránh vấn đề bảo mật tách ra khỏi trình soạn thảo (gọi exec từ trình soạn thảo để chạy một quy trình tùy ý với các đặc quyền leo thang).

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.