ฉันคิดว่ามันจะง่ายกว่านี้ แต่ฉันไม่สามารถค้นหาว่าสิ่งที่ฉันต้องการจะทำได้หรือไม่
ฉันต้องการเมานต์แชร์เครือข่าย Samba จากบรรทัดคำสั่งใน Ubuntu 20.04 (MATE) - โดยเฉพาะอย่างยิ่งโดยไม่ต้องเปลี่ยนแปลงไฟล์หรือบันทึกการตั้งค่าที่ไหนสักแห่ง เพียงแค่บรรทัดคำสั่ง
ก่อนอื่นฉันลอง:
sudo mount -t cifs -o user=MYSMBUSER //192.0.2.1/myshare /tmp/myshare
วิธีนี้ใช้งานได้ดี - ในแง่ของการติดตั้ง แสดงรายการไฟล์ และให้การเข้าถึงไฟล์แบบอ่านอย่างเดียว แต่ไม่อนุญาตให้เขียนไฟล์ (ปฏิเสธการอนุญาต)
ดูเหมือนว่าเป็นเพราะ:
https://unix.stackexchange.com/questions/68079/mount-cifs-network-drive-write-permissions-and-chown
คุณกำลังเมานต์การแชร์ CIFS เป็นรูท (เพราะคุณใช้ sudo) ดังนั้นคุณจึงไม่สามารถเขียนเป็นผู้ใช้ปกติได้ ถ้าลีนุกซ์ดิสทริบิวชันและเคอร์เนลของคุณใหม่พอที่คุณจะเมานต์เครือข่ายที่ใช้ร่วมกันได้ในฐานะผู้ใช้ทั่วไป (แต่อยู่ในโฟลเดอร์ที่ผู้ใช้เป็นเจ้าของ) คุณจะมีข้อมูลประจำตัวที่เหมาะสมในการเขียนไฟล์
ใช่ ฉันต้องการ "เมานต์การแชร์เครือข่ายในฐานะผู้ใช้ทั่วไป" และนี่อาจดูเหมือนเป็นตัวเลือก - อย่างไรก็ตาม ชื่อผู้ใช้ของฉันบน Ubuntu นั้นแตกต่างจากชื่อผู้ใช้ของ Samba ดังนั้น:
อีกทางเลือกหนึ่งคือการระบุผู้ใช้และรหัสกลุ่มที่ควรใช้เครือข่ายที่เชื่อมต่อ ซึ่งจะทำให้ผู้ใช้เฉพาะรายนั้นและกลุ่มที่อาจเขียนลงในการแบ่งปันได้ เพิ่มตัวเลือกต่อไปนี้ในการเมานต์ของคุณ: ...
ปัญหาแรก - คุณจะยกเลิกการต่อเชื่อมด้านบนได้อย่างไร ฉันได้ทำ:
$ sudo umount /tmp/myshare
$
... และเนื่องจากไม่มีรายงานข้อผิดพลาด ฉันถือว่าเสร็จสมบูรณ์ดี แต่ฉันลอง:
$ ls /tmp/myshare
file_from_share01.txt file_from_share02.txt ...
... ไฟล์ยังคงอยู่ในรายการ ดังนั้นจึงติดตั้งการแชร์ ปรากฎว่า (ผ่าน https://stackoverflow.com/questions/74626/how-do-you-force-a-cifs-connection-to-unmount ) เพื่อยกเลิกการต่อเชื่อม ฉันต้องทำ:
$ sudo umount -a -t cifs -l
นี่คือส่วนที่ยุ่งยาก - ถ้าฉันต้องการเมานต์เป็นผู้ใช้ปกติ แต่ยังระบุชื่อผู้ใช้ SMB ฉันจะต้องเขียนคำสั่งเดียวกันกับด้านบน แต่ไม่มี ซูโด:
$ mount -t cifs -o user=MYUSER //192.0.2.1/myshare /tmp/myshare
เมานต์: รูทเท่านั้นที่สามารถใช้ตัวเลือก "--options"
ดังนั้นบางทีฉัน สามารถ ได้รันสิ่งนี้ว่าไม่ใช่รูท ถ้า ฉันไม่ต้องใช้ ผู้ใช้ ตัวเลือก - แต่ฉันทำ ดังนั้นฉันจึงไม่สามารถใช้คำสั่งนี้ได้
คำแนะนำอย่างหนึ่งสำหรับการดำเนินการนี้คือระบุตัวเลือกใน fstab - via
เมานต์แชร์โฟลเดอร์ cifs โดยไม่มี sudo :
เพื่อให้สามารถติดตั้งโฟลเดอร์นั้นในฐานะผู้ใช้ทั่วไป ให้รวมตัวเลือกการเมาต์สำหรับโฟลเดอร์ cifs ในไฟล์คอนฟิกูเรชัน /etc/fstab และเพิ่มตัวเลือก noauto,user,
อย่างไรก็ตามฉันทำ ไม่ ต้องการทำเช่นนี้ เพราะฉันไม่ต้องการเก็บบันทึกข้อมูลรับรอง SMB ในเครื่องของฉัน - และถ้าฉันต้องแก้ไข fstab ฉันก็มีหน้าที่ต้องลบรายการออกจาก fstab เมื่อเสร็จสิ้น และโดยปกติแล้ว เวลาเหนื่อยก็ลืม บลา บลา
ฉันพบว่านี่น่าจะเป็นฟีเจอร์ความปลอดภัยบางอย่าง:
https://unix.stackexchange.com/questions/365308/use-mount-o-with-a-non-root-user
ข้อจำกัด -o (เฉพาะรูทเท่านั้นที่สามารถระบุได้) มีไว้เพื่อป้องกันระบบ: ผู้ดูแลระบบสามารถตั้งค่าตัวเลือกใดก็ได้ที่จำเป็น ไม่ว่าจะใช้ -o โดยตรงหรือใช้ /etc/fstab; ผู้ใช้สามารถทำให้ระบบไฟล์ที่ผู้ใช้ควบคุมได้เท่านั้นถูกเมาต์หรือไม่เมาต์ โดยไม่ต้องระบุอ็อพชัน เนื่องจากอ็อพชันระบบไฟล์อนุญาตให้มีสถานการณ์ที่ไม่เป็นมิตรจำนวนหนึ่งด้วยเหตุนี้ ระบบไฟล์บางระบบจึงรองรับวิธีอื่นๆ ในการตั้งค่าตัวเลือกบางอย่าง เช่น ตัวแปรสภาพแวดล้อม USER ที่ใช้ข้างต้นกับ CIFS
ใช่ แต่สำหรับฉัน การไม่ป้อนเส้นทาง SMB ใด ๆ ปลอดภัยกว่า /etc/fstab เลย
ดังนั้นฉันอยากจะเมาจริงๆ แค่ โดยใช้บรรทัดคำสั่ง ปราศจาก เปลี่ยนไฟล์คอนฟิกูเรชันใดๆ (รวมถึง /etc/fstab) ได้ทุกที่
ฉันหวังว่าจะมีคำสั่งอื่นและฉันพบ gvfs-เมานต์ - แต่ฉันมีปัญหาเดียวกันกับ เมานต์แชร์ SMB กับ gvfs จากบรรทัดคำสั่ง :
$ ทุบตีเปิดตัว dbus
$ gvfs-mount smb://192.0.2.1/myshare
เครื่องมือนี้เลิกใช้แล้ว ใช้ 'gio mount' แทน
ดู 'gio help mount' สำหรับข้อมูลเพิ่มเติม
รหัสผ่านที่จำเป็นสำหรับการแชร์ myshare บน 192.0.2.1
ผู้ใช้ [locuser]: MYUSER
โดเมน [เวิร์กกรุ๊ป]:
รหัสผ่าน:
$
ณ จุดนี้ ดูเหมือนว่าจะติดตั้งแล้ว แต่จริงๆ แล้วไม่ได้:
$ ls /run/user/1000/gvfs/
$
...และทาง gvfs-เมานต์ -lเราจะเห็นว่าไม่มีจุดเชื่อมต่อที่สอดคล้องกัน:
$ gvfs-เมานต์ -l
...
ปริมาณ (3): test_nfs
ชนิด: GProxyVolume (GProxyVolumeMonitorUDisks2)
เมานต์ (0): test_nfs -> ไฟล์:///tmp/test_nfs
ประเภท: GProxyMount (GProxyVolumeMonitorUDisks2)
เมานต์ (0): myshare บน 192.0.2.1 -> smb://192.0.2.1/myshare/
ประเภท: GDaemonMount
... ดังนั้นเราจึงไม่สามารถเข้าถึงไฟล์ใด ๆ ด้วย "เมานต์" นี้ได้อยู่ดี
อีกครั้ง คุณจะยกเลิกการต่อเชื่อมสิ่งนี้ได้อย่างไร - คุณไม่สามารถทำได้ umount /tmp/myshareไม่ถือว่าติดตั้งด้วยซ้ำ พบว่าที่นี่ ยกเลิกการต่อเชื่อม gvfs samba ที่ใช้ร่วมกันกับไฟล์ที่เปิดอยู่ :
$ ls ~/.gvfs
ls: ไม่สามารถเข้าถึง '~/.gvfs': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
$ gvfs-mount -u smb://192.0.2.1/myshare
เครื่องมือนี้เลิกใช้แล้ว ใช้ 'gio mount' แทน
ดู 'gio help mount' สำหรับข้อมูลเพิ่มเติม
หลังจากนี้ตรวจสอบกับ gvfs-เมานต์ -l ยืนยันว่าหมดจริง)
และขอกล่าวถึง จิโอเมาท์ - โปรดทราบว่าหากไม่เปิดใช้ dbus-session จะล้มเหลวด้วย:
$ gio เมานต์ smb://192.0.2.1
gio: smb://192.0.2.1: วอลุ่มไม่ได้ใช้เมานต์
...จากนั้นภายในเชลล์เริ่มต้นโดย ทุบตี dbus-launchมันทำงานเหมือนกันทุกประการ gvfs-เมานต์:
$ gio เมานต์ smb://192.0.2.1/myshare
รหัสผ่านที่จำเป็นสำหรับการแชร์ myshare บน 192.0.2.1
ผู้ใช้ [locuser]: MYUSER
โดเมน [เวิร์กกรุ๊ป]:
รหัสผ่าน:
$
ดูเหมือนว่าจะติดตั้ง แต่:
$ gio เมาท์ -l
...
ปริมาณ (3): test_nfs
ชนิด: GProxyVolume (GProxyVolumeMonitorUDisks2)
เมานต์ (0): test_nfs -> ไฟล์:///tmp/test_nfs
ประเภท: GProxyMount (GProxyVolumeMonitorUDisks2)
เมานต์ (0): myshare บน 192.0.2.1 -> smb://192.0.2.1/myshare/
ประเภท: GDaemonMount
... อีกครั้งไม่มีจุดเมานต์ไดเร็กทอรีในเครื่อง
ที่กล่าวมาข้างต้น: เป็นไปได้หรือไม่ที่จะเมานต์การแชร์ SMB จากบรรทัดคำสั่ง โดยไม่ต้องเปลี่ยนไฟล์ในเครื่องใดๆ (เช่น และโดยเฉพาะอย่างยิ่ง /etc/fstab) โดยไม่มี sudo และมีสิทธิ์ r/w (ซึ่งฉันได้ยืนยันใน Windows แล้ว ผู้ใช้ SMB MYUSER มี) - และถ้าเป็นเช่นนั้น จะทำอย่างไร