ฉันควรเปิดใช้งานบัญชีรูทสำหรับ rsync หรือไม่


10

ฉันจะเปิดใช้งานบัญชีรูทได้อย่างไร ฉันรู้ว่าปกติจะไม่แนะนำ แต่ฉันต้องการตั้งค่าสคริปต์ที่ไม่โต้ตอบเพื่อสำรองข้อมูลเซิร์ฟเวอร์ของฉันโดยใช้ rsync ฉันสามารถใช้--rsync-path="sudo rsync"แต่แล้วฉันจะต้องเก็บรหัสผ่าน sudo ของฉันอย่างชัดเจนซึ่งดูแย่กว่าการเปิดใช้งานบัญชีรูท

คำตอบ:


10
  1. สร้างmybackupบัญชีผู้ใช้ใหม่แยกต่างหากบนไคลเอนต์และเซิร์ฟเวอร์
  2. ล็อครหัสผ่านด้วยsudo passwd -l mybackupสำหรับบัญชีเหล่านี้เพื่อป้องกันการเข้าสู่ระบบโดยตรง
  3. อนุญาตให้ผ่านทางsudoบัญชีใหม่เหล่านั้นไปทำงานที่เฉพาะเจาะจงมาก/usr/bin/rsync/ --some-long-command /from/here /to/thereคำสั่งเป็นรากที่มีNOPASSWD:ใน/etc/sudoersการใช้sudo visudo
  4. สร้างคีย์ SSH ที่ไม่มีรหัสผ่านใหม่สำหรับโลคัลไปยังโฮสต์รีโมตโดยใช้ sudo -u mybackup ssh-keygen
  5. เพิ่มไปsudo -u crontab -eที่ปลายด้านหนึ่งหรืออีกด้านหนึ่งเพื่อเรียกใช้รีโมทrsyncโดยใช้sshและปุ่มเป็นตัวส่งข้อมูล

วิธีนี้คำสั่งเดียวที่สามารถรันในฐานะรูทเป็นคำสั่งที่คุณอนุญาตอย่างชัดเจนและผู้ใช้รีโมตเพียงคนเดียวที่สามารถเปิดใช้งานได้คือผู้ถืออีกครึ่งหนึ่งของคีย์แพด ssh ที่ติดตั้งซึ่งเพราะมันมีรหัสผ่านล็อคอยู่ด้วย สามารถเป็นคนที่มี sudo เข้าถึงตัวเองหรือ crontab ที่คุณตั้งค่าเท่านั้น


นั่นคือสิ่งที่ฉันไม่คิดว่าจะอนุญาตให้ใช้คำสั่งเฉพาะเจาะจงใน sudoers (ฉันอนุญาตให้ 'rsync') ข้อเสนอแนะยอดเยี่ยม!
Olivier Lalonde

2
+1 สำหรับการสังเกต "คำสั่งที่เฉพาะเจาะจงมาก ... " มิฉะนั้นการให้สิทธิ์แก่ผู้ใช้ในการเรียกใช้sudo rsyncและอนุญาตให้ผู้ใช้เลือกตัวเลือกที่ส่งไปยัง rsync หมายความว่าผู้ใช้สามารถใช้ rsync เพื่ออ่าน / เขียน/etc/sudoersไฟล์ได้เช่นกันและให้สิทธิ์การเข้าถึง sudo แบบเต็ม
Suzanne Dupéron

7
  1. คุณสามารถแก้ไข/etc/sudoersเพื่ออนุญาตให้ผู้ใช้เรียกใช้คำสั่ง (หรือผู้ใช้ทั้งหมด) เพื่อรันrootโดยไม่ต้องใช้รหัสผ่าน (อาจเป็นอันตรายเล็กน้อยกับ rsync)

  2. คุณไม่สามารถรันทั้งคำสั่ง / สคริปต์ / อย่างนั้นrootเหรอ? ฉันคิดว่านี่จะทำงานผ่าน cron ดังนั้นเพียงแค่เพิ่มrootงานผ่าน:

    sudo crontab -e
    

    หมายเหตุ: คุณสามารถทำสิ่งที่ค่อนข้างซับซ้อนได้โดยห่อคำสั่ง cron ของคุณไว้ในbash -e "..."วงเล็บปีกกาหรือเพียงแค่ทำในสคริปต์แยกต่างหาก สมมติว่ามันไม่ได้ถูกตั้งค่าหากrootรัน (ผ่านcron) มันจะทำงานตามrootที่ควรแก้ไขปัญหาการอนุญาตของคุณ


ปัญหาคือว่าถ้าฉันติดตั้งสคริปต์ในเครื่องท้องถิ่นของฉันและเรียกใช้เป็น root มันจะมีปัญหาสิทธิ์บนเซิร์ฟเวอร์ หากฉันตั้งค่าสคริปต์บนเซิร์ฟเวอร์ของฉันและเรียกใช้เป็นรูทเครื่องในเครื่องจะมีปัญหาสิทธิ์ กล่าวอีกนัยหนึ่งฉันต้องมีสิทธิ์รูททั้งในเครื่องโลคอลและเซิร์ฟเวอร์
Olivier Lalonde

คุณสามารถเขียนสคริปต์ที่ปลายแต่ละด้านและอนุญาตให้sudoผู้ใช้ปกติทำงานด้วย rsyncที่จะมีความปลอดภัยมากขึ้นกว่าเพียงแค่ช่วยให้
Oli

Sudo เป็นความคิดที่ดี คุณสามารถระบุได้อย่างแม่นยำซึ่งผู้ใช้สามารถเรียกใช้คำสั่งใด ทำมัน.
แฟรงค์

6

คุณสามารถ (แต่ไม่ควร) ให้รหัสผ่านแก่ผู้ใช้รูทได้

sudo passwd root

แก้ไข: Setuid บิตไม่ทำงานกับสคริปต์ มิฉะนั้นคุณสามารถใช้ setuid bit ในโปรแกรมสำรองข้อมูล

sudo chown root backup
sudo chmod u+s backup

บางทีคุณอาจต้องการเรียกใช้การสำรองข้อมูลเป็นงาน cron หรือไม่?


1
คุณไม่จำเป็นต้องระบุ "root" เนื่องจาก sudo ทำงานเนื่องจาก env ของรูทที่ผู้ใช้เป็นรูท ( sudo whoamireturn, root) ดังนั้นจึงsudo passwdจำเป็นต้องมี
Marco Ceppi

setuid ไม่สามารถใช้งานกับสคริปต์ได้
enzotib

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