VSFTPD, 553 ไม่สามารถสร้างไฟล์ได้ - สิทธิ์


31

ฉันตั้งค่า VSFTPD บน Amazon EC2 ด้วย Amazon Linux AMI แล้ว ฉันสร้างผู้ใช้และสามารถเชื่อมต่อผ่าน ftp ได้สำเร็จ อย่างไรก็ตามหากฉันพยายามอัปโหลดบางอย่างฉันจะได้รับข้อความแสดงข้อผิดพลาด "553 ไม่สามารถสร้างไฟล์"

ฉันคิดว่าสิ่งนี้เกี่ยวข้องกับการอนุญาต แต่ฉันไม่รู้เพียงพอที่จะแก้ไขได้ โดยพื้นฐานแล้วฉันต้องทำอย่างไรจึงจะสามารถอัปโหลดไฟล์ได้


ตรวจสอบการตั้งค่า selinux กำหนดค่าบูลีน allow_ftpd_full_access เป็น ON

คำตอบ:


18

มีสาเหตุสองประการที่อาจเกิดขึ้นได้ - คุณไม่มีสิทธิ์ในการเขียนและดำเนินการในไดเรกทอรีที่นำไปสู่ไดเรกทอรีที่คุณพยายามอัปโหลดหรือvsftpdกำหนดค่าไม่ให้อนุญาตให้คุณอัปโหลด

ในกรณีเก่าให้ใช้chmodและchownตามความเหมาะสมเพื่อให้แน่ใจว่าผู้ใช้ของคุณมีสิทธิ์เหล่านี้ในทุกไดเรกทอรีระดับกลาง บิตการเขียนอนุญาตให้ผู้ใช้ที่ได้รับผลกระทบสามารถสร้างเปลี่ยนชื่อหรือลบไฟล์ภายในไดเรกทอรีและปรับเปลี่ยนแอตทริบิวต์ของไดเรกทอรีในขณะที่บิตการอ่านอนุญาตให้ผู้ใช้ที่ได้รับผลกระทบแสดงรายการไฟล์ภายในไดเรกทอรี เนื่องจากไดเรกทอรีระดับกลางในเส้นทางจะมีผลกับสิ่งนี้ด้วยเช่นกันจึงต้องตั้งค่าการอนุญาตให้เหมาะสมเพื่อนำไปสู่จุดหมายสุดท้ายที่คุณตั้งใจจะอัพโหลด

vsftpd.confในกรณีหลังดูที่ของคุณ write_enableจะต้องเป็นจริงเพื่ออนุญาตให้เขียน (และมันเป็นเท็จโดยค่าเริ่มต้น) man 5 vsftpd.confมีเอกสารที่ดีในไฟล์การกำหนดค่านี้ที่เป็น


10
สิ่งเหล่านี้ดูเหมือนจะไม่เป็นปัญหา ฉันลอง chmoding ทุกอย่างเป็น 777 (ไม่ปลอดภัย) และการตั้งค่า write_enable = ใช่ แต่ฉันยังได้รับข้อความแสดงข้อผิดพลาดที่ไร้ประโยชน์
Cerin

@Cerin คุณสามารถแก้ไขได้หรือไม่ ถ้าใช่คุณสามารถแบ่งปันรายละเอียดได้หรือไม่?
unknownerror

34

คุณลองสิ่งนี้ได้ไหม

chown -R ftpusername /var/www/html

5
chmod 757 -R / var / www / html
Hernán Eche

1
@ HernánEcheขอบคุณสำหรับเคล็ดลับฉันได้ล่าสัตว์มาหลายชั่วโมงและในที่สุดก็แก้ปัญหาของฉันได้แล้ว
Tr0yJ

คุณอธิบายรายละเอียดเกี่ยวกับสถานการณ์นี้ได้ไหมบนเซิร์ฟเวอร์หรือในเครื่อง?
Édouard Lopez

1
@ HernánEcheเฮ้มันใช้ได้กับฉันเช่นกัน แต่มันก็ปลอดภัย มันใช้งานไม่ได้กับ 755
viv

1
@ HernánEcheคุณควรแยกคำตอบนี้ออก ข้อเสนอแนะของคุณทำงานกับฉันในที่ที่ไม่มีอะไรทำ
Shaul บอกว่าฉันสนับสนุนโมนิก้า

11

คำสั่งไม่ได้ทำงานกับftp put /path/to/local_file vsftpdลองทำสิ่งต่อไปนี้:

ftp put /path/to/local_file remote_file_name 

คุณสามารถเลือกชื่อใดก็ได้ที่คุณต้องการremote_file_nameแต่คุณต้องระบุชื่อ


2
คุณอาจต้องการพิจารณาเพิ่มรายละเอียดให้กับคำตอบของคุณ (ตัวอย่างเช่นเอกสารบางอย่างที่สนับสนุนความถูกต้องของโซลูชันของคุณ)
HalosGhost

สิ่งนี้เกิดขึ้นเพราะ (และถ้า) /path/to/ไม่มีอยู่ (และ / หรือไม่สามารถเข้าถึงได้ผ่านเซสชัน FTP) บนเซิร์ฟเวอร์ นี่คือเหตุผลที่ftp put local_file ไม่ทำงานได้โดยไม่ต้องปลายทางอย่างชัดเจน (คำแนะนำ: ตรวจสอบlocal: … remote: …บรรทัดในไคลเอนต์ FTP)
Skippy le Grand Gourou

1
มันใช้งานได้สำหรับฉัน! :)
เปาโล

3

โฮมไดเรกทอรี FTP (ftp_home_dir) มักถูกปิดใน SeLinux หากต้องการดูสถานะของftpdไฟล์ควบคุมของคุณให้ออก: getsebool -aและค้นหาส่วน ftpd คุณอาจสังเกตเห็นว่า ftp_home_dir ปิดอยู่ หากต้องการเปิดใช้งานให้ใช้คำสั่งต่อไปนี้:setsebool -P ftp_home_dir=1

ตรวจสอบอินพุตของคุณโดยใช้getsebool -aจากนั้นลองอัปโหลดอีกครั้ง

หมายเหตุ: ละเว้นเครื่องหมายวรรคตอน


2

ฉันมีปัญหาเดียวกันและคงเปลี่ยน SELinux vsftp = /var/ftp/pubจะอนุญาตให้มีการเขียนในโฟลเดอร์ที่ผมกำหนดค่าที่จะใช้โดย

ลิงก์เหล่านี้มีประโยชน์:

หากคุณไม่ต้องการไปต่อกับ SELinux ของคุณอย่าเปลี่ยนมันดังนั้นคุณจะเห็นว่าเป็นค่าเริ่มต้น /etc/selinux/config

SELINUX=enforcing

จากนั้นให้รันคำสั่งในฐานะรูทหรือsudo:

sudo setsebool -P ftpd_anon_write 1
sudo setsebool -P ftpd_full_access 1

ตามที่อธิบายไว้ข้างต้นในความคิดเห็นอื่น


1

ตรวจสอบvsftpd.confการตั้งค่าของคุณ:

guest_enable=YES # set it to NO then restart the vsftpd service.

หากมีการตั้งค่าก็ยังจะก่อให้เกิดYES553 Could not create file

จาก: http://www.vsftpd.beasts.org/vsftpd_conf.html

guest_enable หากเปิดใช้งานการเข้าสู่ระบบที่ไม่ระบุชื่อทั้งหมดจะถูกจัดประเภทเป็นการเข้าสู่ระบบ "แขก" ล็อกอินผู้เยี่ยมชมจะถูกแมปกับผู้ใช้ที่ระบุในการตั้งค่า guest_username

เริ่มต้น: ไม่



0

ความเป็นไปได้อีกอย่าง: ตรวจสอบโควต้าดิสก์สำหรับผู้ใช้ / กลุ่ม

ต่อ:

repquota -a

XFS:

xfs_quota -x -c 'report' /mount_point

0

พารามิเตอร์ถัดไปจะให้การเข้าถึง ftpd เพื่อเขียนได้ทุกที่:

setsebool -P ftpd_full_acess=true 

ห้ามใช้ftpd_anon_writeนอกเสียจากว่าคุณต้องการอนุญาตให้อัปโหลดโดยไม่ระบุชื่อ



-1

สำหรับ Fedora23 ให้รันคำสั่ง:

setsebool -P ftpd_anon_write 1 
setsebool -P ftpd_full_access 1

มันใช้งานได้สำหรับฉัน

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