Tạo chủ sở hữu tệp mới tạo VÀ thư mục dữ liệu www thay vì siêu người dùng / quản trị viên


13

Tôi đã đấu tranh với các quyền cho đến nay, và đăng một câu hỏi khác nhưng xác định vấn đề là gì, mà không có cách nào để khắc phục nó.

Thiết lập của tôi:

  • Máy tính để bàn Ubuntu với ngăn xếp LAMP
  • 5 "người dùng" Tôi đã tạo người dùng Tôi đã tạo trong máy chủ Ubuntu bằng cách sử dụng sudo useradd -r -s /bin/false USERNAMEvà được sử dụng để truy cập các thư mục chia sẻ mạng cục bộ, tức là để các máy tính trên mạng của tôi kết nối với thư mục / var / www, được chia sẻ bằng Samba.
  • EDIT: Mục đích là để tạo ra một loại "master localhost" nơi tất cả các máy tính trong mạng cục bộ của tôi có thể hoạt động trên cùng một trang web, cục bộ (tôi KHÔNG có địa chỉ IP tĩnh do đó máy chủ không thể được truy cập từ nơi khác) .

Vấn đề của tôi:

Hiện tại khi tôi tạo thư mục mới trên /var/www/html(ví dụ: Tạo thư mục / var / www / html / testsite1) bằng bất kỳ máy tính nào của mạng, thư mục này được tự động sở hữu bởi boris:www-data("boris" là người dùng quản trị chính trên cài đặt máy tính để bàn ub Ubuntu của tôi và nó thực sự hiển thị boris: www-data khi chạy ls -ltrên thư mục mới được tạo), điều này gây ra sự cố với thiết lập hiện tại của tôi (chủ yếu là sử dụng Plugin sao chép cho wordpress của LifeInTheGrid). Tuy nhiên, cả tôi /var/wwwvà tôi /var/www/htmlđều thuộc sở hữu củawww-data:www-data

Do đó, tôi muốn biết làm thế nào tôi có thể:

  • Thay đổi quyền sở hữu thành dữ liệu www: dữ liệu www của tất cả các tệp VÀ thư mục bên dưới / var / www và / var / www / html

  • Đảm bảo rằng bất kỳ tệp hoặc thư mục nào tôi sẽ tạo với bất kỳ người dùng nào trong mạng của tôi sẽ tự động được sở hữu bởi www-data: www-data (Bao gồm các tệp được tạo tự động bởi các tập lệnh php vì đó là những gì mà trình sao chép Trình cắm thực hiện nếu tôi Không sai).

Có cách nào làm được việc này không?

Lưu ý: Tôi là một siêu người mới với những thứ liên quan đến Linux và các dòng lệnh, nhưng tôi bắt kịp rất nhanh.

Lưu ý 2: umask đã được đặt là 0002

BIÊN TẬP:

Đã thử điều này:

sudo chown -R www-data:www-data /var/www/

Và sau đó thiết lập các bit setuid và setgid bằng cách thực hiện điều này:

sudo chmod u+s /var/www/html
sudo chmod g+s /var/www/html

Sau đó đăng xuất, khởi động lại apache và cố gắng tạo thư mục mới bằng máy Mac được kết nối với máy chủ của tôi thông qua IP mạng (IP cục bộ, không tĩnh).

Tôi Ran

ls -l on /var/www/html

Đầu ra vẫn là:

drwxr-sr-x 2 boris   www-data  testsite1

Ghi chú:

Tôi đã kiểm tra cấu hình apache của mình trước đó và envvars, nó đã được đặt thành:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

EDIT: Tôi đã thử ngược lại, ví dụ: thiết lập mọi thứ thuộc sở hữu của boris: www-data và đặt cấu hình apache envvars của tôi thành boris: www-data. NÓ ĐÃ LÀM VIỆC!

Đây là những gì tôi đã làm:

Thay đổi envvars thành

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Đã chạy

sudo chown -R boris:www-data /var/www/

Apachem đã khởi động lại, tạo một thư mục mới, thêm tệp của tôi, chạy plugin, bây giờ nói rằng nó tốt !!!


Một ý tưởng tồi là bảo mật để đặt các tệp thuộc sở hữu của người dùng hoặc nhóm dữ liệu www, mặc dù trong những trường hợp hiếm hoi, có thể cần thiết cho một số tệp mà máy chủ web cần quyền truy cập ghi. Bạn đang cố gắng đạt được điều gì?
thomasrutter

Câu trả lời:


11

Trả lời câu hỏi số 1: đệ quychown

Một đệ quy chownsẽ cho phép bạn đặt quyền sở hữu và nhóm theo những gì bạn muốn /var/www/.... Đây là lệnh bạn nên sử dụng:

sudo chown -R www-data:www-data /var/www/

Cùng với đó, mọi tệp và thư mục sẽ được đặt như vậy bên trong đó với các quyền sở hữu đó.


Trả lời một nửa cho câu hỏi số 2: setgidbit

Nếu bạn muốn quyền sở hữu nhóm mặc định trên các tệp, hãy đặt setgidbit trên /var/www/htmlthư mục. Các tệp mới sau đó sẽ được tạo với nhóm đó như được nêu trong thư mục.

sudo chmod g+s /var/www/html

Tuy nhiên, bạn sẽ cần thiết lập quyền ghi, nếu bất kỳ người dùng nào KHÁC www-dataghi vào thư mục và làm như vậy có thể mở cho bạn một hoặc hai lỗ hổng bảo mật nếu bạn không cẩn thận.

Bạn kết thúc với quyền được $USER:www-data; để thay đổi chủ sở hữu, sau đó bạn sử dụng chownnhư được chỉ định trong phương pháp # 1 (có nghĩa là, trong một thiết lập phù hợp, bạn nên dựa vào quyền của nhóm, không phải quyền của chủ sở hữu người dùng, để truy cập vào các tệp web).


Vấn đề sao chép PHP Wordpress

Vấn đề với quyền là người dùng / nhóm PHP chạy khi cần viết và đọc và có khả năng +xtrên thư mục để chỉnh sửa cấu trúc thư mục và như vậy.

PHP chạy như www-datamặc định trong các bản cài đặt Ubuntu sử dụng các cấu hình mặc định. Lý tưởng nhất là các bước của bạn ở trên sẽ làm cho vấn đề được khắc phục, vì bạn bị mắc kẹt với Trình sao chép là một plugin PHP.

Tốt nhất bạn cũng nên kiểm tra tài liệu cho Plugin Sao chép để xác minh những quyền mà nó cần để chạy và hoạt động.


Tôi thích phương pháp setuid :)
Rinzwind

Điều này thật đúng với gì mà tôi đã tìm kiếm!!!! Vấn đề duy nhất: nó không hoạt động :-( Tôi đã tạo một thư mục trên máy mac của mình (tức là KHÔNG với máy tính để bàn ubfox) bằng cách truy cập máy chủ của tôi thông qua IP cục bộ của nó. Khi tôi chạy ls -l, vẫn thuộc sở hữu của boris: www- dữ liệu: - /
Boris Chevreau

Có phải vì tôi đặt quyền sở hữu người dùng trên các tệp nhưng không phải trên các thư mục? Có phải chỉ vì thư mục tôi tạo CANNOT được sở hữu tự động bởi www-data: www-data?
Boris Chevreau

Mac khác với Linux và nếu bạn thực sự không may mắn thì phương pháp này sẽ không hoạt động và cuối cùng bạn sẽ phải làm phiền với nhiều thứ hơn là chỉ các quyền đơn giản (như ACL và những thứ khác) để thiết lập các tệp mặc định . Ngoài ra, "không hoạt động" là mơ hồ. xác định không hoạt động và bao gồm các kết quả đầu ra dưới dạng chỉnh sửa cho câu hỏi.
Thomas Ward

1
setuid áp dụng cho các thư mục luôn bị bỏ qua trên Linux, iirc
muru

6

Để đảm bảo bất kỳ tệp hoặc thư mục nào bạn tạo /var/www/htmlđược tự động sở hữu bởi dữ liệu www mà bạn có thể sử dụng inotify, nó giống như cron nhưng giám sát các thư mục / tệp để thay đổi trong attribuets, tạo tệp, sửa đổi và nhiều hơn nữa.

Đầu tiên cài đặt nó với:

$ sudo apt-get install incron

Cho phép root sử dụng incronbằng cách mở /etc/incron.allowbằng:

$ sudo vim /etc/incron.allow

và thêm rootvào tập tin, sau đó lưu và thoát.

Chỉnh sửa incrontab của bạn với:

$ sudo incrontab -u root -e

và thêm dòng sau vào nó:

/var/www/html IN_CREATE /bin/chown -R www-data:www-data /var/www/html/

lưu và thoát.

Bây giờ, ngay khi một tập tin được tạo trong /var/www/htmldirecotry, nó sẽ tự động đặt onwership thành www-data:www-data.

Giải thích về dòng trong incrontab:

/var/www/html là thư mục sẽ được theo dõi.

IN_CREATEsẽ xem các tập tin được tạo. Đó là mặt nạ thay đổi tập tin .

/bin/chown -R www-data:www-data /var/www/html/ là lệnh / hành động để thực thi.


Họ có thể đạt được thứ gì đó như thế này mà không cần inotify và setgid - quyền sở hữu người dùng có thể không nên thay đổi thường xuyên và họ có thể tự đặt lại quyền sở hữu của người dùng ... hoặc sử dụng ACL có thể gây đau đớn
Thomas Ward

Toàn bộ mục đích của máy chủ này là để chúng tôi sử dụng nó như một "máy chủ cục bộ chính", ví dụ: tạo các trang web localhost và có thể chỉnh sửa / thay thế / di chuyển và tạo các trang web thử nghiệm một cách dễ dàng. Nếu tôi phải thiết lập lại mọi thứ theo cách thủ công, nó sẽ giết chết toàn bộ mục đích: - /
Boris Chevreau

Đây có phải là cách "incron" là cách duy nhất? Tôi không hiểu tại sao nó phải phức tạp như vậy. Những gì tôi đang tìm kiếm là một cách đơn giản cho tất cả các máy tính của tôi trong mạng để tạo một trang web trên máy chủ này. Cuối cùng, vì tôi không có IP tĩnh (do đó bảo mật không phải là vấn đề), bạn có suy nghĩ gì khác không?
Boris Chevreau

cảm ơn, làm việc như một cơ duyên
trurl

3

Thay đổi quyền sở hữu thành dữ liệu www: dữ liệu www của tất cả các tệp VÀ thư mục bên dưới / var / www và / var / www / html

cd /var/www/
chown -R  www-data:www-data /var/www/
  • ./html được ngụ ý ở đây (là một phần của / var / www /)
  • -Rlàm cho nó đệ quy (vì vậy nó sẽ duyệt qua tất cả các thư mục trong /var/www/).

Đảm bảo mọi tệp hoặc thư mục tôi sẽ tạo với bất kỳ người dùng nào trong mạng của tôi sẽ tự động được sở hữu bởi www-data: www-data

  • Bên trong / var / www / html / Tôi sẽ giả sử?

Đặt cấu hình apache của bạn thành dữ liệu www. Xem/etc/apache2/envvars

# envvars - default environment variables for apache2ctl

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Bạn cần khởi động lại apache sau khi chỉnh sửa này ( sudo service apache restart).

Điều đó bao gồm các tệp được tạo tự động bởi các tập lệnh php vì đó là những gì mà trình sao chép plugin thực hiện nếu tôi không sai).

Vấn đề ở đây có lẽ không phải là plugin mà là php. Người dùng phải là cùng một quy trình mà PHP chạy theo. Vì vậy, có lẽ bạn cũng cần phải đặt dữ liệu đó thành dữ liệu www nếu đó là người dùng và nhóm của bạn ( /etc/php5/apache2/php.ini).


Mặc định Ubuntu chạy các quy trình / công nhân PHP cũng www-datanhư Debian, tôi tin như vậy.
Thomas Ward

Ngoài ra, vấn đề với /var/www/htmlcũng là quyền sở hữu nhóm và tư nhân đọc / ghi. Vấn đề khác là họ muốn bất kỳ tệp nào được tạo bởi người dùng www-data:www-datavà tôi đoán đó là những người dùng mạng chứ không phải người dùng Wordpress, vì vậy bạn phải tuân theo các quyền của tệp Linux.
Thomas Ward

Đó thực sự là những người dùng mạng, đó là những người dùng tôi đã tạo trong máy chủ Ubuntu bằng sudo useradd -r -s / bin / false USERNAME và được sử dụng để truy cập các thư mục chia sẻ mạng cục bộ
Boris Chevreau

Điều gì sẽ xảy ra nếu tôi thay đổi quyền sở hữu và ghi quyền của tất cả các thư mục và tệp trở lại boris: www-data, sau đó thay đổi các envvars cho apache thành boris: www-data? Điều đó có thể khắc phục sự cố vì bất cứ khi nào tôi tạo một tệp mới, nó sẽ được đặt là chủ sở hữu là boris: www-data?
Boris Chevreau

2

Tôi đã giải quyết nó! Tôi vẫn nghĩ rằng đó là một vấn đề của Envv Apache, nhưng không chắc đó có phải là điều đặc biệt đã giải quyết vấn đề không ... Dù sao đây là những gì tôi đã làm:

Thay đổi envvars thành

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Đã chạy

sudo chown -R boris:www-data /var/www/

Bây giờ nó đã hoạt động cho đến nay. Sẽ kiểm tra thêm ...

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.