เหตุใดไฟล์ต่าง ๆ ใน smbfs ที่ติดตั้งร่วมกันจึงถูกสร้างขึ้นด้วยบิตที่ปฏิบัติการได้?


14

ฉันติดตั้งแซมบ้าแบ่งปันโดยใช้คำสั่ง smbmount:

$ sudo smbmount \\\\foo\\bar /mnt/bar -o user=tom

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

$ touch hello.txt 
$ ls -la hello.txt
-rwxr-xr-x 1 root root 0 Dec  2 12:28 hello.txt

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

ทำไมสิ่งนี้จึงเกิดขึ้น จะแก้ไขอย่างไร?

คำตอบ:


11

NFS ถูกประดิษฐ์ขึ้นในโลกของ Unix และเข้าใจถึงการอนุญาต Unix แบบดั้งเดิมนอกกรอบ (ACL ของระบบยูนิกซ์ที่ทันสมัยเป็นอีกเรื่องหนึ่ง แต่การนำไปใช้งานล่าสุดของ NFS ควรจัดการกับพวกเขา)

Samba ถูกประดิษฐ์ขึ้นในโลก IBM / Microsoft PC เพื่อแลกเปลี่ยนไฟล์กับระบบที่ไม่มีสิทธิ์นอกเหนือจากอ่านอย่างเดียว / อ่าน - เขียน ตอนนี้เป็นภาษาของ Windows ตามค่าเริ่มต้น Samba จะไม่ส่งการอนุญาต Unix ขึ้นอยู่กับการกำหนดค่าไฟล์ทั้งหมดมีการทำเครื่องหมายปฏิบัติการ (ซึ่งเป็นที่น่ารำคาญ) หรือไฟล์ทั้งหมด (ยกเว้นไดเรกทอรี) มีการทำเครื่องหมายไม่ปฏิบัติการ (ซึ่งเป็นที่น่ารำคาญ)

มีส่วนขยายที่หลากหลายสำหรับโปรโตคอล Samba / CIFS ที่ทำให้เหมาะสำหรับการใช้ Unix ลองเปิดใช้งานส่วนขยาย Unixในการกำหนดค่าเซิร์ฟเวอร์:

[global]
unix extensions = yes

น่าเสียดายที่อินทราเน็ตของ บริษัท ของฉันฉันไม่มีสิทธิ์เข้าถึงเพื่อกำหนดค่าเซิร์ฟเวอร์ บางทีมันจะเป็นการดีที่สุดถ้าจะเมาท์โดยใช้ NFS บนไคลเอนต์ Linux ปัญหาที่ใหญ่กว่านั้นก็คือไคลเอนต์ Windows ซึ่งการกำหนดค่า NFS นั้นเป็นปัญหาที่คอ
vivekian2

@ vivekian2 แน่นอนถ้าคุณมีทางเลือกฉันขอแนะนำให้ใช้ NFS บนไคลเอนต์ Linux และ SMB บนไคลเอนต์ Windows
Gilles 'หยุดความชั่วร้าย' ใน

10

เสียงนี้เช่นปัญหาของคุณหัวข้อ: คัดลอกไฟล์กำไรรันบิตบน Samba

สิ่งที่สกัดมา

หลังจากคัดลอกไฟล์ที่มี rw-r ----- บนไดรฟ์ที่ติดตั้ง CIFS แล้วการคัดลอกจะได้รับ rwxr ----- ดังนั้นมันจึงรับบิตรันไทม์:

ต่อไปลงหน้าการตั้งค่าmap archive = noใน/etc/samba/smb.conf:

สิ่งที่สกัดมา

  [Global]
  <snip>
  map archive = no
  <snip>

สิ่งนี้จะช่วยแก้ปัญหาของไฟล์ที่บันทึกจาก Windows เพื่อให้ได้แฟลกดำเนินการ ขอบคุณ! อีกค่าเริ่มต้นบ้าใครเคยใช้ธงเก็บถาวรใน 2 ทศวรรษที่ผ่านมา? :)
Rennex

4

คุณอาจลอง: mount -t cifs

Google "mount cifs" สำหรับการใช้งานไม่เข้าใจยาก แต่คุณต้องการตั้งค่าตัวเลือกโดยใช้แฟล็ก -o:

uid = GID = RW, noperm, dir_mask = 0775, file_mask = 0664

ผู้ใช้และกลุ่มเป็นรหัสเช่นเดียวกับตัวเลขไม่ใช่นามแฝงข้อความ ตัวเลือกเหล่านี้จะช่วยให้แน่ใจว่าคุณมีการเข้าถึง r / w การอนุญาตจะถูกควบคุมโดยการเมาท์ไม่มีเซิร์ฟเวอร์และโดยเฉพาะfile_mask=0664จะให้แน่ใจว่าไฟล์ของคุณไม่สามารถใช้งานได้ นอกจากนี้คุณจะสามารถใช้งานแซมบ้าร่วมกันเป็นไดเรกทอรีท้องถิ่นได้


ในแซมบ้าเวอร์ชันล่าสุดอาจต้องใช้file_mode=0644,dir_mode=0755
Jokester

คำเตือน: ตัวเลือกการเมานต์ CIFS 'dmask' ไม่รองรับ ใช้ 'dir_mode' แทน คำเตือน: ตัวเลือกการเมานท์ CIFS 'fmask' ไม่รองรับ ใช้ 'file_mode' แทน
Hubbitus

4

คุณสามารถหาสาเหตุที่สิ่งนี้เกิดขึ้นได้จากคำอธิบายต่อไปนี้ในเว็บไซต์ Samba ภายใต้หัวข้อการอนุญาตไฟล์และคุณสมบัติใน MS-DOS และ Unix :

https://www.samba.org/samba/docs/using_samba/ch08.html

มันเกี่ยวกับการแมป System, Hidden และ Archive บิตสำหรับระบบไฟล์ MS-DOS

ระบบไฟล์ MS-DOS ไม่ได้ใช้ประโยชน์จากบิตที่เรียกใช้งานได้ดังนั้นสามบิตที่ปฏิบัติการได้บนระบบไฟล์ Unix จะถูกนำมาใช้ซ้ำเพื่อเป็นตัวแทนของระบบบิตที่ซ่อนและเก็บถาวรสำหรับระบบไฟล์ MS-DOS

ดังนั้นเมื่อคุณดูการอนุญาตการใช้ไฟล์ls -lใน Unix คุณกำลังดูการอนุญาตการใช้ไฟล์ที่เหมาะสำหรับ MS-DOS (หรือ Windows) โดยคำนึงว่าบิตปฏิบัติการที่สามใน Unix แสดงถึงบิต System, Hidden และ Archive สำหรับ MS-DOS

ในsmb.confแต่คุณสามารถเปิดการทำแผนที่นี้ออกหุ้นด้วย:

map archive = no
map system = no
map hidden = no

และบังคับโหมดในการสร้างไฟล์ด้วย:

force create mode = 0660

มันง่ายมาก ... ขอบคุณสำหรับคำอธิบาย!
anton_rh

1

ฉันใช้ QNAP TS439 - และมีปัญหากับไฟล์ที่สามารถเรียกใช้งานได้

แม้ว่าฉันจะต้องใช้สิ่งต่อไปนี้ใน/etc/fstabไฟล์ของฉัน

//192.168.0.1/audio /media/audio cifs credentials=/home/cheese/.smbcredentials,uid=1000,file_mode=0664,iocharset=utf8  0  0 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.