Điểm:1

Quyền sở hữu tệp Apache và envvars

lá cờ lk

Tôi sử dụng Ubuntu 20.04. tôi đã chỉnh sửa /etc/apache2/envvars để thay đổi người dùng chạy thành người dùngA: xuất Apache_RUN_USER=userA

Khi tôi chạy tập lệnh PHP này từ W3 Schools để tải tệp lên, quá trình tải lên hoạt động - nhưng chủ sở hữu của tệp thì không người dùngA như tôi dự định. Nó vẫn còn dữ liệu www.

Chưa: sudo apache2ctl -S báo cáo Người dùng: name="userA" id=1002, như được đặt trong envvars.

Vậy tại sao dữ liệu www sở hữu tập tin, và không người dùngA? Điều gì đang xác định quyền sở hữu tập tin? FWIW, các quyền của thư mục mà tệp được tải lên là 774, và quyền sở hữu là người dùngA: dữ liệu www. "Đặt UID" và/hoặc "Đặt GID" trên thư mục cũng không ảnh hưởng gì.

Nếu tôi kéo và thả một tệp trong thư mục bằng WinSCP (sử dụng ssh), thì quyền sở hữu là người dùngA:người dùngA (Vâng, người dùngA là thành viên của cả hai người dùngA nhóm và dữ liệu www tập đoàn). Nếu tôi Đặt GID và kéo và thả, chủ sở hữu là người dùngA: dữ liệu www.

lá cờ ru
Bạn đã khởi động lại hoàn toàn quy trình Apache chưa? (`Sudo systemctl daemon-reload && Sudo systemctl restart apache2.service`) Nếu bạn chưa làm vậy thì nó sẽ không tải mọi thứ 'mới' cũng như không khởi động lại các quy trình để chạy dưới dạng `userA`
lá cờ ru
Kiểm tra đầu ra `htop` và đặt nó thành định dạng "cây" trong thiết lập htop - kiểm tra xem các quy trình con của Apache đang chạy như thế nào - cả `userA` hoặc `www-data`.
shortmort37 avatar
lá cờ lk
Tôi đã dừng nó hoàn toàn - tôi thậm chí đã dùng đến việc khởi động lại nhưng không có kết quả. Nhưng tôi cũng đã đăng cái này lên StackOverflow, họ khuyên tôi nên xem php-fpm, thứ đặt quyền và quyền sở hữu độc lập với apache: https://stackoverflow.com/questions/67892965/ubuntu-20-04-apache-file- quyền sở hữu và envvars
lá cờ ru
Làm thế nào bạn cài đặt PHP để bắt đầu? Thông thường mọi người chỉ sử dụng PHP được đóng gói bên trong Apache. Nếu bạn đã thiết lập `php-fpm` thì đó là điều chúng ta cần biết vì FPM *không phải* là cơ chế PHP mặc định trong Apache. Và không có cách nào để xác định xem bạn có hay không trừ khi bạn chia sẻ cấu hình của mình với chúng tôi.
shortmort37 avatar
lá cờ lk
@ThomasWard, tất cả các quy trình apache đang chạy dưới dạng userA (ngoại trừ một quy trình là root). Có một số quy trình dữ liệu www đang chạy, tất cả đều dưới dạng dữ liệu www. Khi chạy phpBB, tôi đã có dịp cần chuyển đổi giữa các phiên bản PHP khác nhau trong các môi trường khác nhau - vì vậy tôi đã làm theo hướng dẫn được liệt kê tại đây: https://devanswers.co/run-multiple-php-versions-on -Apache/
shortmort37 avatar
lá cờ lk
Tôi cũng đang chạy Ubuntu. Bài viết này nói rằng PHP *KHÔNG* đi kèm với apache: https://www.serverlab.ca/tutorials/linux/web-servers-linux/installing-php-for-apache-on-ubuntu/
lá cờ ru
Um ... nó phụ thuộc vào cách bạn cài đặt nó. Đúng vậy, Apache2 không đi kèm với Apache theo mặc định, tuy nhiên, HẦU HẾT mọi người cài đặt plugin Apache PHP thay vì sử dụng php-fpm với Apache, vì nó đơn giản hơn. (Sự thật thú vị: nó quay lại câu nói mà tôi đã đưa ra về "Nó phụ thuộc vào cách bạn cài đặt PHP")
shortmort37 avatar
lá cờ lk
Hãy để chúng tôi [tiếp tục cuộc thảo luận này trong cuộc trò chuyện](https://chat.stackexchange.com/rooms/126285/discussion-between-shortmort37-and-thomas-ward).
Điểm:1
lá cờ ru

Vì vậy, điều này sẽ phụ thuộc rất nhiều vào cách bạn thực hiện PHP của mình.

Có hai cách tiếp cận điển hình cho vấn đề này với Apache và mỗi cách có những cân nhắc khác nhau để khắc phục sự cố này với các quyền.


nhúng php mô-đun trong Apache

Đây là giải pháp đơn giản nhất để Apache hoạt động với PHP. PHP chạy trong Apache và chạy với tư cách là người dùng được cấu hình Apache.

sudo apt cài đặt libapache2-mod-php
sudo a2enmod php
sudo systemctl khởi động lại apache2.service

PHP FPM

PHP FPM là tùy chọn khác - bạn sẽ cài đặt php-fpm gói, nhưng bạn cũng sẽ cần thêm công việc với Apache để làm cho nó hoạt động.

sudo apt cài đặt libapache2-mod-fcgid php-fpm

Sau đó, bạn cần bật mô-đun FCGId trong Apache, cũng như bí danhproxy_fcgi mô-đun:

hành động sudo a2enmod fcgid bí danh proxy_fcgi

Đối với Ubuntu 20.04, PHP là 7.4, vì vậy bạn sẽ cần thêm phần này vào cấu hình máy chủ của mình ở bất cứ nơi nào bạn đang sử dụng php-fpm:

    <FilesMatch \.php$>
        # 2.4.10+ can proxy to unix socket
        SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost"
    </FilesMatch>

Điều này phải nằm trong phạm vi của bạn <VirtualHost ...> chặn bất cứ nơi nào bạn đang sử dụng PHP.

Sau đó bạn phải điều chỉnh /etc/php/7.4/fpm/pool.d/www.conf để làm cho nó sử dụng người dùng mà bạn dự định - hãy tìm người dùng = dữ liệu www và điều chỉnh dòng này cho người dùng bạn muốn. Tôi sẽ nhận xét dòng này và sau đó đặt một dòng do người dùng của bạn xác định bên dưới nó, nhưng điều đó sẽ thay đổi người dùng đang sử dụng bởi php-fpm để nó đọc/ghi với.


Một trong hai cách tiếp cận này sẽ khắc phục người dùng/nhóm PHP của bạn mà nó ghi/tạo tệp bằng - nó chỉ phụ thuộc vào cách bạn cài đặt PHP - mô-đun nhúng Apache hoặc FPM.

shortmort37 avatar
lá cờ lk
Cảm ơn bạn, @ThomasWard. Tôi thích chạy PHP trong Apache; Tôi đã cố gắng xóa apt php-fpm (và thanh lọc), nhưng dường như nó vẫn đang chạy. Lần thử xóa tiếp theo báo cáo rằng nó chưa được cài đặt, vì vậy điều đó thật khó hiểu. Tôi thậm chí đã khởi động lại, nhưng htop báo cáo nó đang chạy. Trong bất kỳ trường hợp nào: Tôi đã cố làm theo các hướng dẫn nhúng PHP. "Sudo apt install libapache2-mod-php" diễn ra suôn sẻ, nhưng lệnh a2enmod báo cáo "LỖI: Mô-đun php không tồn tại!" Bây giờ tôi hoàn toàn bối rối.
lá cờ ru
`sudo apt purge 'php*-fpm'` có thể giúp loại bỏ các thành phần FPM. `php-fpm` là một gói siêu dữ liệu, kéo theo `php7.4-fpm` trên Ubuntu, vì vậy bạn cần thực hiện một cuộc thanh lọc rộng rãi hơn. Hoặc chỉ xóa `php7.4-fpm`.
shortmort37 avatar
lá cờ lk
khá đúng! Lần thanh lọc đó đã loại bỏ fpm, nó không còn xuất hiện trong htol nữa. Tất cả bây giờ là tốt. Cảm ơn nhiều!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.