Làm cách nào để hạn chế chạy các lệnh trong thư mục cụ thể thông qua SUDOERS?


13

Tôi có thể cấu hình sudo (thông qua tệp sudoers) để cho phép người dùng chạy chownchmodcác lệnh trên bất kỳ tệp hoặc thư mục nào trong hệ thống. Tuy nhiên, tôi chỉ muốn cấp quyền cho người dùng để chạy các lệnh này trên các tệp nằm bên dưới /var/www/htmlthư mục.

Làm cách nào tôi có thể hạn chế các lệnh đặc quyền sao cho người dùng chỉ có thể chạy chúng trong thư mục được chỉ định trước?

Ví dụ: Lệnh sau cấp quyền 777 cho index.htmltệp.

sudo chmod 777 /var/www/html/index.html

Bây giờ tôi muốn thực hiện hai hành động

  1. Hạn chế sudođể người dùng chỉ có thể chạy chmodchowntừ bên trong/var/www/html

  2. Không cho phép người dùng thực thi các lệnh này ở nơi khác trong hệ thống (ví dụ: các lệnh không thể chạy trong /var/wwwhoặc /var/ftp)


1
Xin đừng vượt qua - superuser.com/questions/456662/
Ấn

7
Đây thực sự là cách đúng đắn? Làm thế nào về một www-datanhóm loại bỏ sự cần thiết chmod/ chownbất cứ điều gì?
sr_

Mát mẻ. Bằng cách đó bạn có được root khá dễ dàng. Đó là một ý tưởng rất xấu để cho đi chown. Ngoài ra, tôi thấy không có lý do tại sao chmodphải được chạy như root.
Nils

Câu trả lời:


13

Những gì bạn đang hỏi là khó khăn nếu không phải là không thể. Ngay cả khi bạn đã hạn chế ứng dụng chownchmodvào các tệp trong một thư mục cụ thể, ai đó vẫn có thể vượt qua một liên kết tượng trưng và do đó ảnh hưởng đến các tệp ở bất cứ đâu họ muốn.

May mắn thay, rất có thể những gì bạn đang cố gắng làm không phải là giải pháp phù hợp cho vấn đề thực tế của bạn và có một phương pháp khác hiệu quả.

Thông thường, người dùng cần quyền bổ sung để tạo và sửa đổi các tệp theo /var/wwwđược thêm vào một nhóm (thường www-datahoặc bạn có thể có các nhóm khác nhau cho các phần khác nhau của trang web). Bạn có thể sử dụng quyền sở hữu nhóm và thư mục setgid: chgrp www-data /var/www/html; chmod g+ws /var/www/htmlcho phép mọi người trong www-datanhóm ghi vào /var/www/htmlthư mục và các tệp được tạo trong thư mục đó sẽ thuộc sở hữu của www-datanhóm thay vì nhóm chính của người dùng đã tạo tệp. Tuy nhiên, điều này không linh hoạt lắm.

Những gì bạn có thể nên làm là thiết lập danh sách kiểm soát truy cập cho các tập tin bên dưới /var/www. Trước tiên, hãy đảm bảo rằng ACL được bật: hệ thống tệp /var/wwwđược bật phải được gắn với acltùy chọn. Xem Tạo tất cả các tệp mới trong một thư mục có thể truy cập vào một nhóm để được trợ giúp về điều đó. Cũng cài đặt các tiện ích ACL ( getfaclsetfacl). Sau đó cấp thêm quyền cho cây bên dưới /var/www/htmlcho người dùng nên có chúng. Bạn có thể đặt ACL cho mỗi người dùng, nhưng thường dễ dàng hơn khi đặt những người dùng có cùng quyền đối với một phần của hệ thống tệp trong một nhóm và đặt ACL cho nhóm đó. Ví dụ: nếu người dùng trong nhóm html-writersnên có quyền truy cập đọc-ghi vào cây bên dưới /var/www/html:

setfacl -d -m group:html-writers:rwx /var/www/html
setfacl -m group:html-writers:rwx /var/www/html

Liên quan đến "điều này không linh hoạt" (ở cuối đoạn 3) - tại sao nó không? Có phải vì mọi người cần phải ở trong một nhóm nhất định? (Tôi hầu như không biết gì về quyền và ACL và những thứ liên quan.)
KajMagnus

3
@KajMagnus Không linh hoạt vì root phải quản lý các nhóm và các tệp chỉ có thể thuộc về một nhóm duy nhất. ACL cho phép bất kỳ người dùng nào chọn ai có thể truy cập các tệp họ sở hữu và nhiều người dùng và nhóm có thể được đề cập trong ACL.
Gilles 'SO- ngừng trở nên xấu xa'

2

Bạn có thể hạn chế lệnh được sử dụng bởi "myuser" với tất cả các đối số trong /etc/sudoerstệp bằng lệnh visudoadd:

## Allows myuser to chmod the html dir and chmod 755 the html2 dir
myuser  ALL=NOPASSWD:/bin/chmod [0-7][0-5][0-5] /var/www/html/*,/bin/chown myuser:mygroup /var/www/html/*,/bin/chmod 755 /var/www/html2/myapp/*.txt 

cho phép đăng nhập cho mọi hoạt động thêm:

Defaults logfile=/var/log/sudo.log

đầu ra mẫu:

[root@myhost /]# su - myuser
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/index.html 
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/*
-sh-3.1$ sudo /bin/chmod 777 /var/www/html2/myapp/*.txt
Sorry, user myuser is not allowed to execute '/bin/chmod 777 /var/www/html2/myapp/*.txt' as root on myhost.mydomain.
-sh-3.1$ sudo /bin/chmod 755 /var/www/html2/myapp/*.txt 
-sh-3.1$ 

Khi bạn sử dụng sudo, tiền đề phải là "myuser" là một người đáng tin cậy. Hãy cẩn thận với quyền truy cập tệp, không có cách nào đơn giản để ngăn người dùng sudo độc hại liên kết tệp từ tài nguyên bên ngoài và thay đổi tệp.


Tôi đã thử nó trước đây, nhưng nó đã báo lỗi như: Xin lỗi, người dùng prashant không được phép thực thi '/ bin / chmod 777 / var / www / html / a' với quyền root trên prashant.xyz.com.
PrashantB

bạn đã chuyển đổi người dùng với su - prashanthay su prashant?
Tombolinux

Có, tôi đang thực thi lệnh bởi người dùng prashant. Tôi đọc diễn đàn, họ nói lệnh chạy toàn hệ thống. Không ai đã viết về vấn đề như vậy.
PrashantB

Tôi chạy nó whooo :). Nhưng đây sẽ là lệnh tĩnh. Chúng tôi có thể làm cho nó chung chung để tôi có thể áp dụng bất kỳ quyền nào trên bất kỳ tệp nào trong / var / www / html không?
PrashantB

3
Điều này là hoàn toàn không an toàn: sudo /bin/chmod 666 /var/www/html/../../../etc/passwdVà nếu bạn bằng cách nào đó khắc phục điều đó,ln -s /etc /var/www/html/foo/etc; sudo /bin/chmod 666 /var/www/html/foo/etc/passwd
Gilles 'SO- ngừng trở nên xấu xa'

1

Thực sự có một cách khá đơn giản để làm điều này, bằng cách tạo một tập lệnh Bash (hoặc shell bạn chọn) để hạn chế các sửa đổi được thực hiện cho một tệp hoặc thư mục cụ thể.

Trong ví dụ của bạn, nó sẽ trông như thế này:

$ vi /usr/local/bin/mychmod

#!/bin/bash

chmod 777 /var/www/index.html

Sau đó, bạn sẽ thay đổi tệp sudoers để cho phép dữ liệu www thực thi / usr / local / bin / mychmod.

Tuy nhiên, hãy nhớ rằng việc cho phép người dùng nhập liệu (ví dụ: cho phép người dùng thay đổi tập tin hoặc thư mục nào bị xáo trộn) vào không gian này là cực kỳ nguy hiểm và bạn cần biết cách lọc các cuộc tấn công tiêm chích nếu bạn muốn làm bất cứ điều gì như cái đó. Kẻ tấn công có thể dễ dàng thực hiện bất kỳ lệnh nào khi root theo cách này, xâm phạm hiệu quả bảo mật hệ thống của bạn.


Điều này đặc biệt nguy hiểm và thực sự không giải quyết được giải pháp ...
Một số
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.