Cho phép người dùng chỉ chạy các tệp nhị phân cụ thể với quyền / đặc quyền gốc


7

Tôi muốn cho phép một người dùng cụ thể chỉ có thể sudo /sbin/iptables.

Tôi có một tập lệnh bash cấu hình iptables. Vấn đề là cấu hình /sbin/iptablesnhư sudoable là không đủ - Bản thân kịch bản cũng phải là sudoable.

Vấn đề là tập tin đó có thể được chỉnh sửa bởi người dùng (anh ta có thể thay đổi cấu hình ở đó), cho anh ta khả năng chạy bất kỳ lệnh nào dưới dạng root.

Cách tiếp cận đúng đắn cho vấn đề này là gì?


2
Tui bỏ lỡ điều gì vậy? Tại sao bạn không thể chỉnh sửa /etc/sudoersvà thêm username ALL=/sbin/iptables /sbin/whatever?
nico

Câu trả lời:


6

Tôi có thể thấy hai phương pháp:

  1. Cho phép người dùng sử dụng /sbin/iptablesthông qua sudomà không bị hạn chế (điều này nguy hiểm, điều này có nghĩa là bạn tin tưởng người dùng bằng cách nào đó) và chạy tập lệnh với sự cho phép của người dùng. Kịch bản sẽ gọi sudomỗi lần /sbin/iptableslà cần thiết. Điều này giả định rằng việc thực thi tập lệnh sẽ nhanh chóng, vì một số đầu vào mật khẩu cuối cùng sẽ được yêu cầu theo chu kỳ đều đặn¹.

    • Ưu điểm: bạn không cần phải tin tưởng vào kịch bản.
    • Nhược điểm: như đã đề cập, cho phép người dùng sử dụng /sbin/iptablesmà không bị hạn chế là điều gì đó nguy hiểm.
  2. Cho phép người dùng chỉ gọi kịch bản thông qua sudo.

    • Ưu điểm: việc sử dụng /sbin/iptablesbị hạn chế bởi tập lệnh.
    • Nhược điểm: kịch bản phải hoàn hảo.

Về vấn đề bạn đã đề cập: nếu tập lệnh được sở hữu bởi hãy nói rootvà có các quyền thông thường:, rwxr-xr-xngười dùng khác không thể sửa đổi nó, họ chỉ có thể thực thi nó (cuối cùng thông qua sudođể có được nhiều đặc quyền hơn).

Với giải pháp 2 và trong trường hợp tập lệnh shell (so với các chương trình / chương trình nhị phân mạnh hơn), hãy cẩn thận với các biến môi trường và một số yếu tố bên ngoài có thể sửa đổi việc thực thi tập lệnh của bạn. Kiểm tra xem cấu hình sudo của bạn đặt lại đúng định nghĩa của mọi biến có hại.

-
1. Trong thực tế, sudocó thể được cấu hình với NOPASSWDnếu cần.



3

Từ wikipedia:

setuid và setgid (viết tắt của "set ID người dùng khi thực thi" và "đặt ID nhóm khi thực thi", tương ứng) [1] là các cờ quyền truy cập Unix cho phép người dùng chạy một tệp thực thi với quyền của chủ sở hữu hoặc nhóm của người thực thi. Chúng thường được sử dụng để cho phép người dùng trên hệ thống máy tính chạy các chương trình với các đặc quyền nâng cao tạm thời để thực hiện một tác vụ cụ thể. Mặc dù các đặc quyền id người dùng hoặc id nhóm được cung cấp không phải lúc nào cũng được nâng lên, tối thiểu chúng là cụ thể.

Hãy thử một cái gì đó như thế này

stefan@linux-ulsk:/usr/bin> zypper up
Root privileges are required for updating packages.
linux-ulsk:~ # whereis zypper
zypper: /usr/bin/zypper /usr/bin/X11/zypper /usr/include/zypper /usr/share/zypper /usr/share/man/man8/zypper.8.gz
linux-ulsk:~ # chmod u+s /usr/bin/zypper
linux-ulsk:~ # exit
stefan@linux-ulsk:/usr/bin> zypper up
Retrieving repository ...

Tôi có thể bắt đầu zypper mà không phải là root, điều mà trước đây tôi không thể làm được.

Hãy cẩn thận với setuid và setgid! Một số trích dẫn cuốn sách:

Không bao giờ cho phép kịch bản shell setuid. Một số kỹ thuật để lật đổ chúng được biết đến.


0

Bạn có thể thử thay đổi chủ sở hữu nhóm của tệp và thêm người dùng của mình vào nhóm đó. Sau đó, bạn có thể chmodtập tin để gán quyền nhóm cho phép bạn làm những gì bạn cần.

Đó là một giải pháp choppy nhưng nó sẽ làm việc.


Xin lỗi, nhưng câu trả lời của bạn thực sự không rõ ràng. Có lẽ bạn có thể thêm tên của các tệp và nhóm bạn đang nói đến.
Stéphane Gimenez

thay đổi nhóm của /sbin/iptables. thêm người dùng của bạn vào nhóm đó chmod /sbin/iptablesđể cho phép nhóm thực hiện các tập tin. Điều đó sẽ làm việc phải không?
n0pe

1
Về cơ bản, bạn tạo một nhóm mới chỉ dành cho người dùng và cấp quyền thực thi cho iptables cho nhóm đó.
nico

Câu trả lời này gây nhầm lẫn và không liên quan đến câu hỏi OP. Nó chỉ là vô ích để ngăn chặn người dùng khác thực thi tập lệnh (miễn là họ không được cấp đặc quyền nâng cao bởi sudo).
Stéphane Gimenez

@Stephane - Các op nói rằng anh ta chỉ muốn cấp quyền cho người dùng đó (xem câu đầu tiên). Tôi coi đó là một hạn chế.
n0pe

0

Đảm bảo rằng bạn (hoặc một tài khoản thích hợp) là chủ sở hữu của tệp và làm cho tệp chỉ có thể ghi được bởi bạn, không phải bởi nhóm. Vì vậy, quyền của bạn sẽ giống như 750, giả sử rằng người dùng của bạn nằm trong nhóm chính xác.

Nếu họ có thể thực thi nhưng không ghi tệp, thì bạn an toàn để thêm lệnh đó vào danh sách sudo của họ.


Lý do tôi đề nghị thay đổi nhóm thay vì chủ sở hữu là vì có khả năng root sở hữu tệp đó và thay đổi người dùng có thể gây ra xung đột ở một nơi khác.
n0pe
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.