ฉันจะเปลี่ยนผู้ใช้ NGINX ได้อย่างไร


37

ฉันมีสคริปต์ PHP ที่สร้างไดเรกทอรีและส่งภาพไปยังไดเรกทอรี สิ่งนี้ทำงานได้ดีภายใต้ Apache แต่เมื่อเร็ว ๆ นี้เราตัดสินใจเปลี่ยนเป็น NGINX เพื่อใช้ประโยชน์จาก RAM ที่ จำกัด ฉันใช้คำสั่ง PHP mkdir () เพื่อสร้างไดเรกทอรี:

mkdir(dirname($path['image']['server']), 0755, true);

หลังจากเปลี่ยนเป็น NGINX ฉันได้รับคำเตือนต่อไปนี้:

Warning: mkdir(): Permission denied in ...

ฉันได้ตรวจสอบสิทธิ์ทั้งหมดของไดเรคทอรีหลักแล้วฉันจึงตัดสินใจว่าอาจต้องเปลี่ยนผู้ใช้ 'NGINX หรือ PHP-FPM แต่ฉันไม่แน่ใจว่าจะทำอย่างไร (ฉันไม่ต้องระบุผู้ใช้ สิทธิ์สำหรับ APACHE) ฉันไม่สามารถหาข้อมูลมากมายเกี่ยวกับเรื่องนี้ ความช่วยเหลือใด ๆ จะดีมาก!

(หมายเหตุ: นอกจากการวางสายเล็กน้อยการสลับไปใช้ NGINX นั้นค่อนข้างราบรื่นฉันใช้มันเป็นครั้งแรกและใช้เวลาเพียง 10 นาทีในการขึ้นและทำงานกับ NGINX ตอนนี้ฉันแค่รีดผ้า ออกมาหว่า)


1
หากมีการติดตั้ง nginx โดยตัวจัดการแพคเกจที่ดีที่สุดน่าจะเป็นเพียงแค่ใช้ 'ps' เพื่อดูว่าผู้ใช้ nginx กำลังทำงานอยู่อะไรและเปลี่ยนเจ้าของไดเรกทอรีเป็นผู้ใช้นั้น โดยทั่วไปแล้วการรักษาความปลอดภัยมักจะได้รับการติดตั้งอย่างดีโดยแพ็คเกจการเปลี่ยนผู้ใช้อาจทำให้เสียอย่างอื่น
Joachim Isaksson

nginx.confและwww.confโดยค่าเริ่มต้น IIRC
PeeHaa

หากคุณใช้ fastcgi ให้ตรวจสอบว่าคุณสามารถใช้ phpscripts ได้หรือไม่ ที่จะช่วยให้คุณสามารถเรียกใช้ไซต์ต่าง ๆ ภายใต้ผู้ใช้เฉพาะของพวกเขา ฉันแน่ใจว่ามีคำแนะนำในการตั้งค่าออนไลน์
hakre

คำตอบ:


58

เรียกใช้ nginx & php-fpm เป็น www: www

1. Nginx

แก้ไข nginx.conf และตั้งค่าผู้ใช้เป็นwww www;

หากกระบวนการหลักรันเป็นรูทดังนั้น nginx จะ setuid () / setgid () ถึง USER / GROUP หากไม่ได้ระบุ GROUP ไว้ nginx จะใช้ชื่อเดียวกับ USER โดยค่าเริ่มต้นจะไม่มีผู้ใช้และไม่มีใครหรือกลุ่ม nogroup หรือ --user = USER และ --group = GROUP จากสคริปต์. / config

2. PHP-FPM

แก้ไขPHP-fpm.confwwwและใช้งานชุดและกลุ่ม

user - ผู้ใช้ Unix ของกระบวนการ เริ่มต้น "www-data"

group - กลุ่มของกระบวนการ Unix เริ่มต้น "www-data"


1
โอเคฉันเพิ่งเปลี่ยน nginx.conf (มันถูกตั้งค่าเป็นuser www-data) แต่ผมไม่เห็นใด ๆ ที่php-fpm.confผู้ใช้กำหนดไว้ใน ฉันควรเพิ่มมันไปด้านบนโดยใช้ไวยากรณ์เดียวกัน ( user www www) หรือไม่
เดวิด

ไวยากรณ์ php-conf ไม่ใช่ระบบปฏิบัติการเดียวกัน nginx.conf ค้นหา[www]ส่วนหนึ่งและเพิ่มuser=wwwในบรรทัดถัดไปและgroup=wwwในส่วนถัดไป
glavić

ผมได้รับข้อผิดพลาดต่อไปนี้เมื่อรีสตาร์ท Nginx: เริ่ม [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failedNginx:
เดวิด

จากนั้นคุณสามารถเรียกใช้ Nginx และ php-fpm ในฐานะผู้ใช้ที่มีสิทธิ์ที่เหมาะสมสำหรับไดเรกทอรีที่เหมาะสมหรือสร้างผู้ใช้ใหม่ที่เรียกว่า www โดยเรียกใช้ "sudo useradd -g www www" โปรดแจ้งให้เราทราบหากคุณต้องการคำอธิบายโดยละเอียดเพิ่มเติม
Roman Prykhodchenko

1
@xorinzor: ไม่ใช้สิ่งที่คุณมี: D
glavić

24

ในUbuntu 14.04ไฟล์การเปลี่ยนแปลงผู้ใช้และกลุ่มในPHP-FPM/etc/php5/fpm/pool.d/www.confคือ: ในไฟล์นี้เปลี่ยนพารามิเตอร์เหล่านี้:

user = www
group = www
listen.owner = www
listen.group = www

3
นี่เป็นกรณีสำหรับ Ubuntu 16.10
Craimasjien

1
นี่เป็นกรณีสำหรับ Ubuntu 18.04
siliconrockstar

นี่จะเป็นการเพิ่มเติมที่ดีมากสำหรับคำตอบที่ได้รับการยอมรับ
ษคานข Nazary

สำหรับ PHP 7.2 จะอยู่ใน/etc/php/7.2/fpm/pool.d/www.conf
Cromax

6

ในการตอบคำถามจริงของคุณคือเพียงแค่เปลี่ยนuserบรรทัดnginx.confดังนี้:

user    [username];

ตัวอย่าง:

user    www-data;

ผู้ใช้ที่ต้องการสำหรับ Nginx เพื่อทำงานตามจริงแตกต่างระหว่างระบบปฏิบัติการ บางครั้ง Nginx www-dataควรจะใช้เป็น บางครั้งมันก็ควรจะทำงานเป็นnobodyจริง

ในระบบปฏิบัติการบางระบบ (เช่น Windows) มันไม่สำคัญเลยและuserบรรทัดในnginx.confสามารถใส่ความคิดเห็นหรือแยกออกทั้งหมด


หากฉันเพิ่มคำสั่งของผู้ใช้และเริ่มบริการ Nginx ใหม่จะมีข้อผิดพลาดแจ้งว่า 'ผู้ใช้' เป็นคำสั่งที่ไม่ทราบ - จึงเป็นเรื่องปกติไหมที่จะปล่อยทิ้งไว้?
JoeTidee

ใช่ขึ้นอยู่กับระบบปฏิบัติการและ / หรือ Nginx บางรุ่นไม่ต้องการคำสั่งผู้ใช้อย่างชัดเจน
rubynorails

ฉันต้องวางคำสั่งของผู้ใช้ที่ด้านบนสุดของไฟล์กำหนดค่า Nginx ของฉันเพื่อให้เป็นที่รู้จัก
JoeTidee
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.