ให้สิทธิ์ผู้ใช้แก่ไฟล์และโฟลเดอร์ทั้งหมด


9

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

ในขณะนี้เรากำลังใช้ผู้ใช้backupsและแม้ว่าเราได้เพิ่มผู้ใช้นี้ในกลุ่มsudoและadminrsync ยังคงส่งข้อความเช่น:

rsync: opendir "/ location / to / folder" ล้มเหลว: การอนุญาตถูกปฏิเสธ (13)

rsync: send_files ไม่สามารถเปิด "/ location / to / file": การอนุญาตถูกปฏิเสธ (13)

แนวคิดใด ๆ ที่เราbackupsอนุญาตให้ผู้ใช้เข้าถึงทุกสิ่ง (ขาดการเพิ่มผู้ใช้ไปยังทุกกลุ่มตลอดเวลา - เซิร์ฟเวอร์ระยะไกลที่เราพยายามสำรองข้อมูลเป็นเซิร์ฟเวอร์โฮสติ้งเฉพาะซึ่งทุกบัญชีมีผู้ใช้ของตนเองในระบบ)

ขอบคุณสำหรับความช่วยเหลือ


1
คุณสามารถยกตัวอย่างเส้นทางได้หรือไม่? ถ้าเป็นคนใน/proc, /devฯลฯ แล้วผิดพลาดเป็นที่คาดหวัง
Phil

เพิ่มผู้ใช้backupsไปsudoและadminไม่ได้เปลี่ยนแปลงอะไร
favadi

@ ฉันจะพยายามสำรองข้อมูลไดเรกทอรีทั้งหมด / home ไฟล์ไดเรกทอรี / ที่มีความล้มเหลวเป็นคนเช่น/home/a/c/account/users/mail:usernameที่มีสิทธิ์เหมือนและเป็นเจ้าของโดยdrwx------ mail:4096ฉันคิดว่าเพราะผู้ใช้backupsอยู่ในกลุ่มsudoหรือadminไม่สามารถเข้าถึงได้เนื่องจากไม่มีสิทธิ์การเข้าถึงสำหรับกลุ่ม ฉันไม่ได้ แต่มีข้อผิดพลาดในโฟลเดอร์ / ไฟล์เช่นนั้น
Thomas Clayson

@favadi ฉันทำไปแล้ว ... ยังไม่ทำงาน
Thomas Clayson

คุณจะต้องเรียกใช้rsyncคำสั่งด้วย sudo
Phil

คำตอบ:


6

เพียงแค่เพิ่มผู้ใช้backupsในกลุ่มผู้ใช้sudoไม่ได้ให้สิทธิ์การเข้าถึงบัญชีกับไฟล์ทั้งหมดในระบบโดยอัตโนมัติ มันให้สิทธิ์ผู้ใช้ในการรันsudoคำสั่ง

เนื่องจากคุณกำลังใช้การพิสูจน์ตัวตนคีย์สาธารณะ (สมมุติว่าไม่มีข้อความรหัสผ่าน) ฉันจะเข้าหาสิ่งนี้ด้วยความปลอดภัยและความสะดวกในการใช้งาน การใช้sshช่วยให้คุณสามารถ จำกัด ผู้ใช้ให้ดำเนินการคำสั่งที่เฉพาะเจาะจงเท่านั้น ในกรณีนี้คุณสามารถอนุญาตให้ผู้ใช้backupsดำเนินการrsyncด้วยสิทธิ์ superuser

คุณได้ทำการแลกเปลี่ยนคีย์และการรับรองความถูกต้องที่ตรวจสอบแล้วสำเร็จแล้ว ในauthorized_keysแฟ้มในพื้นที่ห่างไกลที่คุณกำลังสำรอง/homeไดเรกทอรีจากคุณสามารถเพิ่มคำสั่งไปยังคีย์ที่ถูกใช้โดยผู้ใช้command= backupsคำสั่งนี้จะช่วยให้ว่าคำสั่งจะทำงานเมื่อที่สำคัญถูกนำมาใช้สำหรับการตรวจสอบ ดังนั้นฟิลด์แรกของคีย์จะมีลักษณะเช่นนี้:

command="/path/to/sudo /path/to/rsync -az /home /local/folder" ssh-rsa AAAAB3NzaC1yblahblahblah

from=myhost,no-pty,no-X11-forwardingคุณสามารถไปได้ไกลกว่าและเพิ่มตัวเลือกมากขึ้นในการที่สำคัญเช่น

สิ่งนี้ควรให้ความปลอดภัยที่ดีแก่คุณและไม่ต้องการให้คุณแก้ไขสิทธิ์ระบบไฟล์พื้นฐาน คุณอาจจะต้องเล่นกับคำสั่งที่คุณวางไว้ในauthorized_keysไฟล์จนกว่ามันจะทำงานได้ตามที่คุณคาดหวัง; อาจใช้เวลาเล็กน้อยในการห่อสมองของคุณรอบ ๆ มัน คำสั่งที่ระบุในauthorized_keysพื้นจะแทนที่rsyncตัวเลือกที่คุณจะผ่านจากการเชื่อมต่อโฮสต์

ข้อมูลที่ดีman sshdมากมาย คุณต้องการอ่านส่วน AUTHORIZED_KEYS FORMAT โดยเฉพาะ


ตกลงฉันกำลังติดตามฉันคิดว่า การเพิ่มคำสั่งนั้นไปยังไฟล์ authorized_keys จะช่วยให้คุณเรียกใช้คำสั่งระยะไกลที่มีสิทธิ์ superuser ใช่ไหม ฉันจะเปลี่ยนคำสั่งrsync -e ssh -az backups@domain.com:/home /location/of/local/folderเพื่อสั่งให้มันทำงานเป็น superuser บนเครื่องระยะไกลได้อย่างไร หรือมันจะทำโดยอัตโนมัติ ขอบคุณสำหรับเวลาและความช่วยเหลือ :)
Thomas Clayson

1
คำสั่งไม่อนุญาตให้คุณเรียกใช้คำสั่งเป็น superuser โดยอัตโนมัติ เมื่อคีย์เฉพาะนั้นใช้สำหรับการตรวจสอบสิทธิ์มันจะ จำกัด ผู้ใช้เฉพาะคำสั่งที่ระบุ สิทธิ์ superuser มาจาก "sudo" ในทางเทคนิคคุณสามารถใส่คำสั่ง "rsync" ทั้งหมดของคุณลงในไฟล์ authorized_keys และเริ่มต้นการเชื่อมต่อ ssh จากโฮสต์สำรอง กระบวนการทั้งหมดจะเริ่มต้นโดยอัตโนมัติหลังจากการตรวจสอบสิทธิ์เสร็จสมบูรณ์ ฉันจะเริ่มต้นการเชื่อมต่อกับสิ่งที่ชอบ "ssh backups @ remotehost sudo rsync"
George M

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

2

ทางเลือกหนึ่งคือการเรียกใช้เซิร์ฟเวอร์ rsync บนระบบระยะไกล

โดยทั่วไปสร้างrsync.confที่มีการใช้งานแล้วuid=rootrsync -az rsync://domain.com

ดูhttp://pastebin.com/5hQx1mRVสำหรับตัวอย่างที่คนอื่นเขียนและกำหนดค่า rsync daemonสำหรับพื้นฐานบางอย่างของการเปิดใช้งานเซิร์ฟเวอร์ใน Ubuntu

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


ดูดีขอบคุณมาก สิ่งนั้นจะซิงค์ทุกสิ่งจาก/backup/lcโฟลเดอร์บนเซิร์ฟเวอร์ระยะไกลหรือไม่ ฉันจะเปลี่ยนpathบิตเพื่อ/homeให้ทำงานได้หรือไม่?
โทมัสเคลย์สัน

ขอบคุณสำหรับการแก้ไขเพื่อน ปัญหาเดียวของที่อยู่คือเราไม่สามารถรับประกันที่อยู่ IP แบบคงที่และเราต้องการทำสิ่งนี้ผ่าน cron เพื่อให้มันเกิดขึ้นตลอดเวลา หากเรา "ดัน" มันอาจหยุดทำงานหากที่อยู่ IP ของเราเปลี่ยนไป : /
Thomas Clayson

@ThomasClayson: นั่นคือสิ่งที่ DNS แบบไดนามิกมีไว้สำหรับ :)
Warren Young

1

คุณสามารถใช้ ACL ได้หากระบบไฟล์รองรับ

คุณควรเพิ่มการสำรองข้อมูลกลุ่มใน ACL ของแต่ละไฟล์และไดเรกทอรี แต่หากต้องการเพิ่มโดยอัตโนมัติสำหรับไฟล์และไดเรกทอรีที่สร้างขึ้นใหม่คุณควรตั้งค่า ACL เริ่มต้นเป็นไดเรกทอรีที่มีอยู่ทั้งหมดก่อน ดังนั้นบนเซิร์ฟเวอร์ระยะไกล:

sudo find /home -type d -print0 | xargs -0 setfacl -d -m group:backup:r-x

จากนั้นคุณควรได้รับอนุญาต rx สำหรับไดเรกทอรีที่มีอยู่ทั้งหมดและอ่านไฟล์ คุณสามารถทำได้ด้วย 2 คำสั่ง (โดยไม่ต้อง -d เวลานี้)

sudo setfacl -R -m group:backup:r-- /home
sudo find /home -type d -print0 | xargs -0 setfacl -m group:backup:r-x

สิ่งนี้จะให้สิทธิ์พิเศษแก่คุณในการอ่านไฟล์ไปยังการสำรองข้อมูลกลุ่มโดยไม่ต้องเปลี่ยนผู้ใช้และกลุ่มที่มีอยู่ที่เป็นเจ้าของแต่ละไฟล์

หมายเหตุ: เพื่อเร่งการค้นหา | คำสั่ง xargs คุณสามารถเพิ่มตัวเลือกต่อไปนี้ในคำสั่ง xargs: -P nด้วยจำนวนกระบวนการแบบขนาน คุณสามารถตั้งค่าเป็นจำนวนของ cpu ที่คุณมีบนเครื่องของคุณ + 1


xargs แบบขนานจะไม่เร่งความเร็วในกรณีนี้เนื่องจากคอขวดคือ I / O ไม่ใช่ CPU
มิเคล

Linux ใช้แคชในหน่วยความจำก่อนที่จะยอมรับการเปลี่ยนแปลงกับดิสก์ดังนั้นจึงรู้สึกได้เร็วขึ้นจากมุมมองของผู้ใช้ และแม้กระทั่ง hdd สำหรับโน๊ตบุ๊คขนาดเล็กก็สามารถรองรับโหลดการตั้งค่าหลาย ACL ในแนวได้ มันไม่มาก I / O ลองมัน :)
Huygens

ฉันเพิ่งอ่านที่นี่superuser.com/a/422954/53206ที่คุณสามารถใช้: sudo setfacl -Rm d:group:backup:r-X,group:backup:r-X /home:) ง่ายกว่ามาก!
Huygens
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.