จะสร้าง Samba share ที่สามารถเขียนได้จาก Windows โดยไม่ได้รับอนุญาต 777 อย่างไร


33

ฉันมีเส้นทางบนเครื่อง Linux (Debian 8) ซึ่งฉันต้องการแบ่งปันกับคอมพิวเตอร์ Samba 4 ไปยังคอมพิวเตอร์ Windows (Win7 และ 8 ในโดเมน) ในของsmb.confฉันฉันทำต่อไปนี้:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes
guest ok = yes
public = yes

ฉันมีสิทธิ์อ่านอย่างสมบูรณ์จาก Windows แต่เพื่อให้สามารถเข้าถึงการเขียนได้ฉันต้องทำchmod -R 777 /path/to/shareเพื่อให้สามารถเขียนได้จาก Windows

สิ่งที่ฉันต้องการคือการเข้าถึงการเขียนจาก Windows /path/to/shareหลังจากที่ผมให้ข้อมูลประจำตัวของลินุกซ์ของเจ้าของลินุกซ์

ฉันได้ลองแล้ว:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes

จากนั้น Windows จะขอข้อมูลประจำตัว แต่ไม่ว่าฉันจะป้อนอะไรก็จะถูกปฏิเสธเสมอ

วิธีที่ถูกต้องในการเข้าถึงการเขียนเพื่อแบ่งปัน Samba จากคอมพิวเตอร์โดเมน Windows โดยไม่ต้องให้ 777 เป็นอย่างไร

คำตอบ:


49

ผมขอแนะนำให้สร้างผู้ใช้เฉพาะสำหรับหุ้นที่และระบุไว้ใน(ดูเอกสาร)force user

สร้างผู้ใช้ ( shareuserตัวอย่าง) และตั้งเจ้าของทุกสิ่งในโฟลเดอร์แชร์เป็นผู้ใช้:

adduser --system shareuser
chown -R shareuser /path/to/share

จากนั้นเพิ่มforce userและตั้งค่ารูปแบบการอนุญาตในsmb.conf:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes
public = yes
create mask = 0644
directory mask = 0755
force user = shareuser

ทราบว่าเป็นคำพ้องสำหรับguest okpublic


1
ฉันมีปัญหาที่คล้ายกันและการค้นหา google ทั้งหมดแสดงวิธีสกปรกเพียงใช้ 777 ฉันต้องการ 775 สำหรับโฟลเดอร์ที่ใช้ร่วมกันของฉันและฉันต้องการสร้างไฟล์โดยใช้ linux "defaultUser" ของฉันฉันใช้ public = yes โฟลเดอร์คือ 775, สร้างและ dir mask คือ 775 แต่ใน Windows มันไม่สามารถเขียนได้และฉันไม่สามารถหาสาเหตุได้ การเพิ่มforce user = defaultUserไม่ได้งานสำหรับฉัน
firepol

ฉันไม่สามารถใช้งานได้ทุกครั้งที่ฉันพยายามแชร์ไดเรกทอรีฉันเพิ่งได้รับหน้าต่างที่บอกฉันว่าฉันต้องให้สิทธิ์การเขียน "ผู้อื่น" เพื่อแชร์ไดเรกทอรี
Mark Kramer

smb.confผมได้รับมันปัญหาเป็นที่ตั้งของ เอกสารของ Google และแม้กระทั่ง sambas กล่าวว่าไฟล์ควรอยู่ที่/usr/local/samba/libแต่จริง ๆ แล้วมันมีอยู่ใน/etc/samba
Mark Kramer

1
@MarkKramer เป็นความคิดที่ดีที่จะติดตามเอกสารที่รวมอยู่ในการแจกจ่าย Linux เฉพาะของคุณเนื่องจาก distros จำนวนมากจัดระเบียบไฟล์ใหม่เพื่อให้เหมาะกับ FHS ของ Linux Foundation (มาตรฐานระบบลำดับชั้นของระบบไฟล์) ฉันขอแนะนำให้อ่านและค้นหาเอกสารที่มาพร้อมกับ distro ของคุณเพราะ google ไม่ใช่คำตอบที่ดีที่สุดเสมอไปตัวอย่างเช่นคุณอาจได้รับข้อมูลเกี่ยวกับซอฟต์แวร์รุ่นอื่น ด้วยความเคารพ.
RobertL

2

ในการตั้งค่าการแชร์smb.confคุณจะต้องระบุชื่อผู้ใช้และ / หรือกลุ่มที่ได้รับอนุญาตให้เขียนไปยังการแชร์โดยใช้write list = ...บรรทัด

ตัวอย่าง:

[myshare]
...
write list = my_linux_username

จากนั้นคุณจะต้องใช้smbpasswdคำสั่งเพื่อตั้งค่ารหัสผ่านเพื่อรับรองความถูกต้องmy_linux_usernameสำหรับ Samba:

sudo smbpasswd -a my_linux_username

ขั้นตอนนี้จำเป็นเนื่องจากรหัสผ่านระบบมาตรฐาน/etc/shadowถูกแฮชในอัลกอริทึมที่ไม่สามารถใช้ร่วมกับอัลกอริทึมแฮชรหัสผ่านที่ใช้ในโปรโตคอล SMB เมื่อไคลเอนต์ส่งแพ็คเก็ตการตรวจสอบความถูกต้อง SMB มันจะมีรหัสผ่านที่แฮช สามารถเปรียบเทียบได้กับแฮชรหัสผ่านอื่นที่ใช้อัลกอริทึมเดียวกันเท่านั้น

(มากคำแนะนำที่เก่าแก่มากจากสหัสวรรษก่อนหน้านี้อาจแนะนำให้ปิดการใช้งานการเข้ารหัสรหัสผ่านในแซมบ้าและการใช้ hacks รีจิสทรีบางอย่างที่จะช่วยให้ Windows เพื่อปล่อยรหัสผ่านที่ไม่ได้เข้ารหัสกับเครือข่ายคำแนะนำนี้คือ. ล้าสมัย : hacks รีจิสทรีเหล่านั้นอาจไม่ทำงานในรุ่นปัจจุบันของ Windows และอนุญาตให้ทุกคนที่สามารถตรวจสอบปริมาณการใช้เครือข่ายของคุณเพื่อเก็บรหัสผ่านของคุณได้เล็กน้อย)


มีอีกสิ่งหนึ่งที่คุณอาจต้องทำกับลูกค้า เมื่อระบบไคลเอนต์ Windows ของคุณเข้าร่วมกับโดเมน Active Directory และคุณกำลังเข้าสู่ระบบด้วยบัญชีของโฆษณาก็จะนำหน้าชื่อผู้ใช้อย่างไม่มีเงื่อนไขทั้งหมดที่มีชื่อของโดเมน AD ของผู้ใช้คือคุณจะได้รับการตรวจสอบเป็นไม่เพียงAD_DOMAIN\your_usernameyour_username

หากคุณเข้าสู่ระบบด้วยบัญชีท้องถิ่น (หรือระบบไคลเอนต์ของคุณไม่ได้เข้าร่วมกับโดเมนโฆษณา) Windows อาจนำหน้าชื่อผู้ใช้ด้วยชื่อโฮสต์ของไคลเอ็นต์โดยอัตโนมัติเว้นแต่คุณจะระบุชื่อโดเมนอื่น

จะประสบความสำเร็จในการเข้าสู่แบบสแตนด์อะโลนเซิร์ฟเวอร์แซมบ้าจากไคลเอนต์แบบสแตนด์อะโลน Windows SAMBA_SERVER_HOSTNAME\your_usernameคุณอาจต้องระบุชื่อผู้ใช้ของคุณเป็น

มิฉะนั้นแซมบ้าจะเห็นชื่อผู้ใช้เป็นWINDOWS_CLIENT_HOSTNAME\your_usernameข้อสรุปว่ามันไม่มีวิธีการตรวจสอบผู้ใช้ที่เป็นของชื่อโดเมนWINDOWS_CLIENT_HOSTNAMEและจะปฏิเสธการเข้าสู่ระบบ

(รุ่นใหม่กว่าของ Samba อาจมีการตรวจสอบในตัวสำหรับสถานการณ์เฉพาะนี้และพวกเขาอาจอนุญาตให้คุณเข้าถึงได้อย่างไรก็ตามนี่เป็นวิธีการตรวจสอบ SMB ที่ใช้งานได้ภายใต้ประทุนและถ้าคุณต้องการจัดการกับ Samba รุ่นเก่า มันอาจจะยังมีประโยชน์)


1

ฉันกำลังมองหาสิ่งนี้เพราะฉันกำลังรีบและไม่มีเวลาให้ความสำคัญกับการสร้างผู้ใช้และ ...

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

[mymfolder]
path = /mymfolder
writeable = yes
browseable = yes
public = yes
create mask = 0777
directory mask = 0777
force user = root 

และถ้าคุณไปเส้นทางนี้คุณสามารถ จำกัด โดยโฮสต์โดยใช้ตัวเลือก "โฮสต์อนุญาต" ดู: samba.org/samba/docs/server_security.html
ctorx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.