เหตุใด SFTP จึงแจ้ง permission denied
SFTP ทำงานภายใต้บัญชีที่คุณใช้ล็อกอิน และไม่มีความสามารถที่เทียบเท่า sudo ไฟล์ส่วนใหญ่ใน /etc มี root เป็นเจ้าของ บัญชีทั่วไปจึงอ่านได้บางไฟล์แต่เขียนไม่ได้เลย นี่เป็นพฤติกรรมที่ถูกต้อง ไม่ควรแก้ด้วยการลดความเข้มงวดของสิทธิ์
สิ่งที่ไม่ควรทำ
อย่ารัน chmod 777 กับไฟล์การตั้งค่า อย่าเปลี่ยนเจ้าของไฟล์ใน /etc เป็นบัญชีของคุณ และอย่าเปิดให้ root ล็อกอินด้วยรหัสผ่านเพียงเพื่อแก้ไขครั้งเดียว บางบริการปฏิเสธไฟล์ที่กำหนดสิทธิ์ไว้หลวมเกินไป และการเปลี่ยนแปลงแต่ละอย่างเช่นนี้จะลดความปลอดภัยของเซิร์ฟเวอร์ไปอีกนานหลังแก้ไขเสร็จ
ใช้ sudoedit ในเทอร์มินัล
sudoedit คัดลอกไฟล์ไปยังตำแหน่งชั่วคราว เปิดไฟล์ในโปรแกรมแก้ไขภายใต้บัญชีของคุณเอง และเขียนกลับหลังจากคุณบันทึกแล้วเท่านั้น ตัวโปรแกรมแก้ไขไม่ได้ทำงานในฐานะ root
sudoedit /etc/nginx/nginx.confอัปโหลดสำเนาแล้วติดตั้งเข้าที่
หากต้องการใช้โปรแกรมแก้ไขในเครื่อง ให้อัปโหลดไฟล์ไปยังโฮมไดเรกทอรีของคุณแล้วติดตั้งด้วย sudo สำรองไฟล์ต้นฉบับก่อน โดยเก็บไว้ในตำแหน่งที่ไม่มีกลไก include ของการตั้งค่าใดอ่านถึง คำสั่ง install กำหนดเจ้าของและโหมดสิทธิ์ ส่วนระบบที่ใช้ SELinux จะใช้ restorecon กำหนดบริบทที่ถูกต้อง ตรวจเจ้าของและโหมดสิทธิ์ของต้นฉบับก่อนนำค่าเหล่านี้มาใช้ เพราะไม่ใช่ทุกไฟล์ที่ใช้ root และ 644
stat -c '%U %G %a' /etc/nginx/nginx.conf
sudo cp -a /etc/nginx/nginx.conf /root/nginx.conf.bak
sudo install -o root -g root -m 644 ~/nginx.conf.new /etc/nginx/nginx.conf
sudo restorecon -v /etc/nginx/nginx.confตรวจสอบความถูกต้องก่อนนำไปใช้
ไฟล์ที่มีไวยากรณ์ผิดอาจทำให้บริการหยุดทำงานเมื่อเริ่มใหม่ครั้งถัดไป ให้รันการตรวจสอบของบริการนั้นก่อนโหลดการตั้งค่าใหม่ เมื่อเปลี่ยนการตั้งค่า SSH ให้เปิดเซสชันปัจจุบันค้างไว้และทดสอบล็อกอินใหม่จากหน้าต่างที่สอง
sudo nginx -t
sudo sshd -t
sudo visudo -cf /etc/sudoers.d/exampleการแก้ไขด้วย sudo ใน CH-J Server Manager
File Manager เสนอให้เปิดไฟล์ด้วย sudo เมื่อบัญชี SSH อ่านไฟล์นั้นไม่ได้ และเตือนว่าการบันทึกจะต้องใช้ sudo เมื่อบันทึก ข้อมูลจะถูกส่งไปยังไดเรกทอรีชั่วคราวส่วนตัวของบัญชี หลังตรวจสอบแล้ว sudo จะย้ายข้อมูลเข้าที่โดยคงเจ้าของ สิทธิ์ ACL และบริบท SELinux ไว้ ตัวเลือกสำรองข้อมูลจะเก็บสำเนาต้นฉบับก่อนแทนที่ รหัสผ่านจะถูกส่งให้ sudo บนเซิร์ฟเวอร์เท่านั้น และไม่ถูกเก็บลงดิสก์หรือในบันทึก หากนโยบาย sudo กำหนดให้ใช้เทอร์มินัล (requiretty) แอปจะไม่ข้ามข้อกำหนดนั้น แอปไม่ตรวจสอบความถูกต้องของเนื้อหาไฟล์ คุณจึงต้องรันการตรวจสอบของบริการด้วยตนเอง