ฉันกำลังทดลองกับ กวดวิชานี้ เพื่อตั้งค่าเซิร์ฟเวอร์ FTP บนอินสแตนซ์ Ubuntu 20.04 และดูว่าฉันสามารถพุชไฟล์ CSV จากอินสแตนซ์ Windows 10 ด้วย Python ได้หรือไม่
ที่ฝั่ง linux ฉันมีการตั้งค่าเหมือนกับสถานะการสอนเมื่อทำการแก้ไขไฟล์ vsftd config ด้วย nano:
ฟัง = ไม่
Listen_ipv6=ใช่
anonymous_enable=ไม่
local_enable=ใช่
write_enable=ใช่
dirmessage_enable=ใช่
use_localtime=ใช่
xferlog_enable=ใช่
connect_from_port_20=ใช่
chroot_local_user=ใช่
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=ใช่
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
userlist_enable=ใช่
userlist_file=/etc/vsftpd.user_list
userlist_deny=ไม่
ในฝั่งไคลเอนต์ซึ่งเป็นเครื่อง Windows 10 บน LAN ที่มีอินสแตนซ์ของ Ubuntu ฉันมีไฟล์ Python นี้เพื่อลองและส่งไฟล์ CSV ไปยังเซิร์ฟเวอร์ FTP ที่ทำงานบนอินสแตนซ์ของ Ubuntu ฉันหลงทางเกี่ยวกับสิ่งที่ฉันจะใช้สำหรับการรับรองความถูกต้องของเซิร์ฟเวอร์ FTP รวมถึงหมายเลขพอร์ตเพื่อระบุว่าเซิร์ฟเวอร์ FTP กำลังทำงานอยู่
Python 3.9 จาก Windows 10:
จาก ftplib นำเข้า FTP
FTP_HOST = "192.168.0.105"
#FTP_PORT = 7021
FTP_USER = "เบน"
FTP_PASS = "เบน"
พิมพ์ ("ฉันกำลังทำงาน ... ")
ftp = เอฟทีพี ()
#ftp.connect (FTP_HOST, FTP_PORT)
ftp.connect(FTP_HOST)
ftp.login(FTP_USER, FTP_PASS)
# ชื่อไฟล์ในเครื่องที่คุณต้องการอัปโหลด
ชื่อไฟล์ = "madison_office_2020.csv"
ด้วย open(ชื่อไฟล์, "rb") เป็นไฟล์:
ftp.storbinary(f"STOR {ชื่อไฟล์}", ไฟล์)
ftp.quit()
ในสคริปต์ Python ฉันมีหมายเลขพอร์ตแสดงความคิดเห็นและชื่อผู้ใช้ / รหัสผ่านคือผู้ใช้ Ubuntu Linux ที่กำลังทำงานบนอินสแตนซ์ Linux เคล็ดลับใด ๆ ที่ชื่นชมนี่คือการย้อนกลับที่เกือบจะดูเหมือนข้อผิดพลาดในการอนุญาตไฟล์หรือไดเร็กทอรี เคล็ดลับใด ๆ ชื่นชมภูมิปัญญา Linux ไม่มากที่นี่เกี่ยวกับวิธีตรวจสอบสิทธิ์ของไฟล์
Traceback (การโทรครั้งล่าสุดล่าสุด):
ไฟล์ "C:\Users\bbartling\Desktop\ftp_client\client_side_push.py" บรรทัดที่ 20 ใน <โมดูล>
ftp.storbinary(f"STOR {ชื่อไฟล์}", ไฟล์)
ไฟล์ "C:\Python39\lib\ftplib.py", บรรทัด 498 ใน storbinary
ด้วย self.transfercmd(cmd, ส่วนที่เหลือ) เป็น conn:
ไฟล์ "C:\Python39\lib\ftplib.py", บรรทัด 393, ใน transfercmd
ส่งคืน self.ntransfercmd (cmd, ส่วนที่เหลือ) [0]
ไฟล์ "C:\Python39\lib\ftplib.py", บรรทัด 359, ใน ntransfercmd
resp = self.sendcmd (ซม.)
ไฟล์ "C:\Python39\lib\ftplib.py", บรรทัด 281, ใน sendcmd
กลับ self.getresp()
ไฟล์ "C:\Python39\lib\ftplib.py", บรรทัด 254, ใน getresp
เพิ่ม error_perm (ตอบกลับ)
ftplib.error_perm: 550 ปฏิเสธการอนุญาต
ข้อสังเกตประการสุดท้ายคือไดเร็กทอรีนี้ไม่มีอยู่ /var/run/vsftpd/ว่าง
ฉันไม่รู้วิธีตรวจสอบสิทธิ์ผู้ใช้สำหรับไดเร็กทอรีนี้ ลองทำสิ่งนี้ด้านล่าง ฉันอาจจะทำให้มันแย่ลงไปอีก ไม่มีความรู้มากมายที่นี่ คำแนะนำใด ๆ ที่ชื่นชม:
sudo chown -R เบน: /var/run/vsftpd/empty
sudo chown -R เบน /var/run/vsftpd/empty
sudo chown -R 755 /var/run/vsftpd/empty
ตอนนี้ถ้าฉันลองตรวจสอบการอนุญาต ไม่แน่ใจว่าวิธีนี้ถูกต้องหรือไม่ด้วย just ls -อัล
สิ่งนี้จะให้ฉัน ls: ไม่สามารถเปิดไดเร็กทอรี '.': การอนุญาตถูกปฏิเสธ