เหตุใดจึงไม่พบ read / run / user / 1000 / gvfs แม้ว่ามันจะทำงานเป็น root


34

มีคนบอกฉันว่าฉันทำอะไรผิดนี่คืออะไรหรือจะแก้ไขได้อย่างไร ฉันกำลังใช้งาน Fedora 18 และแสดงข้อผิดพลาด

[root@servername /]# find . -name ngirc
find: `./run/user/1000/gvfs': Permission denied
[root@servername /]# 
[root@thinktank /]# pwd
/
[root@thinktank /]# ls -ltr ./run/user/1000
ls: cannot access ./run/user/1000/gvfs: Permission denied
total 0
d?????????? ? ?    ?      ?            ? gvfs
lrwxrwxrwx. 1 root root  17 May 28 12:30 X11-display -> /tmp/.X11-unix/X0
drwx------. 2 kal  kal  120 May 28 12:30 keyring-QjDw4b
drwx------. 2 kal  kal   40 May 28 12:30 gvfs-burn
drwx------. 2 kal  kal   60 May 28 12:30 krb5cc_5f0bcaf94f916d6b61696e2251a4dbb3
drwx------. 2 kal  kal   60 May 28 18:25 dconf

คุณไม่ได้ทำอะไรผิดและข้อเสนอแนะของฉันก็คือการละเลยข้อผิดพลาด หากไม่เป็นที่ยอมรับจะมีการรวมจุดเมานต์ GVFS ไว้ในfindบรรทัดคำสั่งได้อย่างไร
tripleee

คำตอบ:


33

คุณไม่ได้ทำอะไรผิดและไม่มีอะไรจะแก้ไข /run/user/$uid/gvfsหรือ~$user/.gvfsเป็นจุดติดสำหรับFUSEอินเตอร์เฟซGVFS GVFS เป็นการใช้งานระบบไฟล์เสมือนสำหรับ Gnome ซึ่งอนุญาตให้แอปพลิเคชัน Gnome เข้าถึงทรัพยากรเช่น FTP หรือเซิร์ฟเวอร์ Samba หรือเนื้อหาของไฟล์ zip เช่นไดเรกทอรีในเครื่อง FUSE เป็นวิธีการใช้ไดรเวอร์ระบบไฟล์เป็นรหัสผู้ใช้ (แทนที่จะเป็นรหัสเคอร์เนล) เกตเวย์ GVFS-FUSE ช่วยให้สามารถเข้าถึงไดรเวอร์ระบบไฟล์ GVFS ได้ในทุกแอปพลิเคชันไม่ใช่เฉพาะกับ Gnome library

การจัดการขอบเขตความน่าเชื่อถือด้วยระบบไฟล์ FUSE นั้นยากเพราะไดรเวอร์ระบบไฟล์กำลังทำงานในฐานะผู้ใช้ที่ไม่มีสิทธิพิเศษซึ่งต่างจากรหัสเคอร์เนลสำหรับระบบไฟล์แบบดั้งเดิม เพื่อหลีกเลี่ยงภาวะแทรกซ้อนโดยค่าเริ่มต้นระบบไฟล์ FUSE สามารถเข้าถึงได้โดยผู้ใช้ที่รันกระบวนการไดรเวอร์เท่านั้น แม้แต่รูทยังไม่ได้ผ่านการ จำกัด นี้

หากคุณกำลังมองหาไฟล์บนระบบไฟล์ในท้องถิ่นเพียงผ่านไป-xdev findหากคุณต้องการสำรวจหลายระบบโลคัลไฟล์ให้ระบุทั้งหมด

find  / /home -xdev -name ngirc

หากไฟล์นั้นมีอยู่ตั้งแต่เมื่อวานคุณอาจลองlocate ngircแทน ( locateค้นหาจากฐานข้อมูลชื่อไฟล์ซึ่งโดยทั่วไปจะอัปเดตทุกคืน)

หากคุณต้องการสำรวจจุดเชื่อมต่อ GVFS คุณจะต้องทำเช่นนั้นในฐานะผู้ใช้ที่เหมาะสม

find / -name ngirc -path '/run/user/*/gvfs' -prune -o -path '/home/*/.gvfs' -prune -o -name ngirc -print
for d in /run/user/*; do su "${d##*/}" -c "find $d -name ngirc -print"; done

ขอบคุณสำหรับคำอธิบายที่ยอดเยี่ยมเกี่ยวกับ GVFS และ FUSE ฉันลองใช้ 'ค้นหา' เหมือนในตัวอย่างของคุณและใช้งานได้ดี
kal

FUSE ป้องกันไม่ให้รูทเข้าถึงไฟล์ได้อย่างไร แน่นอนว่ามีความสามารถในการปิดการใช้งานการป้องกันดังกล่าว
Akinos

1
@Nat Root สามารถเปลี่ยน fsuid ของกระบวนการเป็น uid เป้าหมายดังนั้นในแง่ของความปลอดภัยการเลี่ยงผ่านการป้องกันเป็นเรื่องเล็กน้อย แต่ฟังก์ชั่นควบคุมการเข้าถึงในเคอร์เนลปฏิเสธการเข้าถึงรูท ปรากฏการณ์นี้เกิดขึ้นกับระบบไฟล์อื่นเช่นรูทไม่สามารถเข้าถึงไดเรคทอรี่ส่วนตัวใน NFS ได้โดยไม่ต้องเปลี่ยนไปใช้ UID ของเจ้าของ
Gilles 'หยุดชั่วร้าย'

2
เพื่อ "หลีกเลี่ยงความยุ่งเหยิง" ... แน่นอนว่ามันสร้างความยุ่งยากใหญ่โตอย่างหนึ่งเนื่องจากฉันไม่สามารถใช้คำสั่ง mount เพื่อแมปพา ธ การแชร์ไปยังชื่อโฟลเดอร์ที่สะอาดกว่า .. การเข้าถึงถูกปฏิเสธเมื่อต้องการใช้รูท sudo
Nuzzolilo

@Nuzzolilo ฉันไม่รู้ว่าคุณกำลังพูดถึงอะไร หากคุณมีปัญหาถามคำถามใหม่และให้แน่ใจว่าได้อธิบายสถานการณ์ของคุณ
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

10

มันเป็นปัญหาฟิวส์ ไม่มีผู้ใช้ยกเว้นเจ้าของสามารถอ่านได้ หากต้องการแก้ไขการกำหนดค่าเริ่มต้นให้ลองเปิดใช้งานตัวเลือก user_allow_other ตัวเลือกนี้จะถูกระบุโดยการเพิ่มลงใน /etc/fuse.conf มันไม่มีค่าเพียงระบุตัวเลือกในบรรทัดว่าง


ขอบคุณ ฉันไม่เข้าใจว่าฟิวส์คืออะไร แต่หลังจากอ่านรายงานข้อผิดพลาดในความคิดเห็นของคุณและความคิดเห็นของ don_crissti ฉันเดาว่าสิ่งนี้เกี่ยวข้องกับฮาร์ดไดรฟ์ USB ที่ฉันเสียบเข้ากับเซิร์ฟเวอร์ samba หรือไม่ มีปัญหาด้านความปลอดภัยใดบ้างที่ฉันควรพิจารณาเมื่อเปิดใช้งาน "user_allow_other" และมีตัวเลือกอื่นสำหรับการติดตั้งที่ฉันควรพิจารณาหรือไม่ ขอบคุณ
kal

1
ขอบคุณ แต่นี่ไม่ใช่วิธีแก้ปัญหาสำหรับฉันถ้าไม่มีใครสามารถใช้ระบบได้ ฉันจะบอกได้ว่าใครเป็นเจ้าของ? ฉันพยายามยกเลิกการต่อเชื่อม / ถอดฮาร์ดไดรฟ์ภายนอกและปิดเซิร์ฟเวอร์แซมบ้า สิ่งที่ฉันต้องการทำจริงๆคือสามารถค้นหาทั้งระบบไฟล์เพื่อค้นหาไฟล์โดยไม่ลดทอนความปลอดภัย มีทางเลือกอื่นสำหรับ FUSE หรือไม่และมีวิธีที่จะบอกได้อย่างชัดเจนว่าใช้กับอะไร ขอบคุณ
kal

askubuntu.com/questions/715637/…ฉันลองใช้คำแนะนำโดย @Christopher แต่ตัวเลือกบรรทัดคำสั่งไม่ได้รับการเคารพ ฉันสงสัยว่าตัวเปิดใช้งาน daemon อัตโนมัติได้รับการกำหนดค่าวิธีหนึ่ง แต่ฉันไม่สามารถหาเอกสารประกอบการกำหนดค่าได้
Nuzzolilo

3

หากคุณได้รับอนุญาตและรายละเอียดอื่น ๆ สำหรับ gvfs ดังต่อไปนี้

d?????????? ? ?    ?      ?            ? gvfs

จากนั้นเพียงถอนการติดตั้ง gvfs ของคุณโดยใช้คำสั่งต่อไปนี้ ปัญหาของคุณจะได้รับการแก้ไขหลังจากทำตามกระบวนการนี้

umount ~/gvfs(umount /run/user/112/gvfs in my case).

GVFS (ระบบแฟ้มเสมือนของ GNOME) เป็นระบบแฟ้มเสมือนสำหรับเดสก์ท็อป GNOME ซึ่งช่วยให้ผู้ใช้สามารถเข้าถึงข้อมูลระยะไกลได้อย่างง่ายดายผ่าน SFTP, FTP, WebDAV, SMB และข้อมูลท้องถิ่นผ่านการรวมระบบของ udev ดังนั้นคุณไม่ต้องกลัว .


3

นี่เป็นเธรดเก่า แต่ในรายงานข้อผิดพลาดของ gnome มันเป็นปัญหาเปิดล่าสุดดังนั้นจึงอาจเป็นประโยชน์สำหรับใครก็ตามที่ค้นหาเวลาหลายชั่วโมงเพื่อหาวิธีแก้ไขปัญหา gvfs-fuser - ซึ่งดูเหมือนว่าจะเกี่ยวข้องกันอย่างแน่นหนา

ข่าวสารเกี่ยวกับข้อผิดพลาดจาก meld:

Error copying '/media/root/5FDA03906F33F217/SAVE/rsyncTEST-usb/allusers' to '/run/user/0/gvfs/ftp:host=192.168.0.103/var/ftp/ftpd/images/PersistenceUSBs/rsync-meld/allusers'

[Errno 95] Operation not supported: '/run/user/0/gvfs/ftp:host=192.168.0.103/var/ftp/ftpd/images/PersistenceUSBs/rsync-meld/allusers'.

ฉันพบปัญหา gvfs-fuser พยายามใช้ meld / diff / kdiff มากกว่า ftp ดูเหมือนว่าปัญหาระหว่าง fuser และ gvfs ดูเหมือนว่าปัญหาจะไม่เกิดขึ้นใน 3.15.1 แต่เริ่มมีการรายงานใน 3.15.2 (python ver ใหม่?) วิธีแก้ไขปัญหาไม่ใช่วิธีแก้ไข - ไฟล์ / ไดเรกทอรีจะคัดลอก แต่ข้อผิดพลาดยังคงปรากฏอยู่

คำตอบของ Christopherกำหนดปัญหาและจัดหาวิธีแก้ปัญหา

อีกวิธีที่เป็นไปได้คือการใช้ sshfs (ดูความคิดเห็นนี้และหัวข้อนี้ ) สำหรับข้อมูลเพิ่มเติมเกี่ยวกับgvfs-commandsดูที่ความแตกต่างระหว่างคำสั่ง gvfs และคำสั่งทั่วไปเช่น cat, ls, cp คืออะไร

ข้อบกพร่องที่อาจจะเกี่ยวข้องกับการรวมGNOME # 317875และGNOME #

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