มีวิธีหยุดการเขียน 'sudo' สำหรับทุกสิ่งใน Linux หรือไม่?


59

ฉันกำลังจะทำงาน PHP ในจำนวนที่พอใช้ในไม่ช้าและฉันสนใจที่จะเรียนรู้ RoR ดังนั้นฉันจึงติดตั้ง Linux Mint 12 ใน VirtualBox ของฉัน

ส่วนที่น่าผิดหวังที่สุดของสวิตช์นั้นคือการจัดการกับสิทธิ์ของ Linux ดูเหมือนว่าฉันไม่สามารถทำอะไรที่มีประโยชน์ได้ (เช่นพูดคัดลอก tarf Symfony2 จากไดเรกทอรีดาวน์โหลดของฉันไปยังรูทเอกสารของฉันและแตกไฟล์) โดยไม่ต้องวางตัวเป็นรูทผ่าน sudo

มีวิธีง่าย ๆ ในการบอก linux เพื่อให้ฉันเข้าถึงไดเรกทอรีบางอย่างโดยไม่ต้องเปิดสิทธิ์ทั้งหมดของพวกเขาหรือไม่


1
การกระจายเสียงจำนวนมากจะมีกลุ่มที่มีอำนาจในการแก้ไขการกำหนดค่าสำหรับระบบสาธารณูปโภคต่างๆ ร่วมแข่งขันในกลุ่มนั้นและเปิดเปลือกใหม่
dmckee

มันจะดีกว่าหรือไม่ที่จะชี้รูทของเอกสารไปที่บางสิ่งในโฮมไดเร็กตอรี่ของฉันแทน?

3
'sudo' เป็นหนึ่งในคำสั่งที่ไร้สาระที่มีการใช้งานและถูกทารุณกรรมบ่อยเกินไปโดยผู้ใช้ Linux ใหม่ ฉันมักจะเห็นบทเรียนบนเว็บที่ 15 คำสั่งในแถวจะใช้ sudo? ในสถานการณ์ปกติคุณไม่จำเป็นต้องมีการเพิ่มพิเศษในขณะที่เข้าสู่ระบบในฐานะผู้ใช้ปกติ (แนะนำ) ฉันอยู่ที่ บริษัท แห่งหนึ่งซึ่งทุกอย่างใช้ sudo เมื่อฉันพยายามแบน (เพื่อเหตุผลด้านความปลอดภัย) พวกเขาบ่น หลังจากตรวจสอบไฟล์การกำหนดค่า cudo cryptic ฉันเห็นข้อบกพร่อง (เช่นเคย) ที่ทำให้ฉันสามารถ 'รูต' ระบบจากผู้ใช้ปกติ Sudo อันตรายมาก !!
Jeach

คำตอบ:


77

สองทางเลือกที่อยู่ในใจของฉัน:

  1. เป็นเจ้าของไดเรกทอรีที่คุณต้องการโดยใช้chown:

    sudo chown your_username directory 
    

    (แทนที่ your_username ด้วยชื่อผู้ใช้และไดเรกทอรีของคุณด้วยไดเรกทอรีที่คุณต้องการ)

  2. สิ่งอื่น ๆ ที่คุณสามารถทำได้คือทำงานได้ตราบใดที่คุณรู้ว่าคุณกำลังทำอะไรอยู่ ในการใช้รูทให้ทำดังนี้

    sudo -s
    

    จากนั้นคุณสามารถทำอะไรก็ได้โดยไม่ต้องพิมพ์sudoก่อนทุกคำสั่ง


"สิ่งอื่น ๆ ที่คุณสามารถทำได้คือทำงานได้ตราบใดที่คุณรู้ว่าคุณกำลังทำอะไรอยู่เพื่อใช้รูททำ ... " - การกระทำที่ดีที่สุดที่ผู้คนและชุมชนด้านความปลอดภัยพยายามสอนผู้ใช้ ที่เกี่ยวข้อง: "สิ่งที่เป็นหลักการสิทธิน้อย"

16

โดยทั่วไปแล้วจะทำงานเป็นผู้ใช้ของคุณเองเว้นแต่ว่าคุณกำลังทำอะไรบางอย่างที่ส่งผลกระทบต่อทั้งระบบ

หากมีไฟล์ที่คุณต้องการวางบนเว็บเซิร์ฟเวอร์ให้ทำงานในฐานะผู้ใช้ของคุณเองจากนั้นใช้sudoเพื่อวางไฟล์ไว้ในพื้นที่ให้บริการเว็บของระบบไฟล์ของคุณ โดยปกติแล้วจะดำเนินการโดยสคริปต์การติดตั้งและคุณจะเรียกใช้สิ่งที่ชอบsudo -u webmaster install-webserver-filesหรือดีกว่าsudo -u webmaster git update(หรือระบบควบคุมเวอร์ชันที่คุณเลือก)

หากคุณกำลังทำงานบนเซิร์ฟเวอร์การพัฒนาและต้องการให้ไฟล์ของคุณสามารถเข้าถึงได้ทันทีให้สร้างไดเรกทอรีในพื้นที่เว็บเซิร์ฟเวอร์และทำให้คุณเป็นเจ้าของหรืออย่างน้อยก็เขียนได้ หลังจากการดำเนินการเพียงครั้งเดียว ( sudo chown …หรือsudo -u webmaster setfacl …) คุณไม่จำเป็นต้องได้รับสิทธิ์ยกระดับสำหรับการดำเนินงานแบบวันต่อวัน

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


3

ใช่เข้าสู่ระบบในฐานะ root ซึ่งให้การควบคุมการเข้าถึงผู้ใช้ระดับสูงแก่คุณ
แนวคิดเดียวกันใน windows คุณสามารถลงชื่อเข้าใช้เทอร์มินัลโดยใช้ผู้ดูแลระบบ


ฉันรู้ว่าคุณตอบคำถามต้นฉบับของโปสเตอร์โดยตรง แต่นี่เป็นคำแนะนำที่ไม่ดีซึ่งจะอธิบายการลงคะแนน
bignose

เช่นเดียวกับที่คุณเกี่ยวข้องกับ Windows
LeWoody

3

มันได้เสมออุดมการณ์ของฉันที่เป็นผู้ใช้ที่คุณสามารถทำสิ่งที่คุณต้องการบน Linux sudoและสำหรับทุกสิ่งทุกอย่างที่มีอยู่เสมอ sudoอนุญาตให้ดำเนินการบางสิ่งในฐานะผู้ใช้รายอื่นซึ่งส่วนใหญ่มักใช้rootสำหรับการดูแลระบบ sudoได้รับทรัพยากรความได้เปรียบที่ยิ่งใหญ่กว่าในการมอบหมายงานประจำและสิทธิพิเศษบางส่วนของฉันในฐานะผู้ใช้ (รูท) ให้กับผู้อื่นและช่วยจัดการเวลาของฉันและเวลาอื่น ๆ ได้ดีขึ้นโดยไม่ยกระดับสิทธิ์ให้เกินกว่าที่ต้องการ ในขณะเดียวกันก็เป็นความไว้วางใจของฉันกับพวกเขาที่ทำให้รายการของพวกเขาอยู่ในsudoersไฟล์การกำหนดค่า ฉันไม่แน่ใจว่ามันจะเกี่ยวข้องหรือไม่ แต่สิ่งที่ฉันสามารถพูดได้ก็คือ sudo จะให้มุมมองด้านความปลอดภัยที่ดีกว่าแก่คุณเกี่ยวกับการที่ทุกคนและพวกเขาสามารถทำอะไรกับสิทธิพิเศษที่เชื่อถือได้ของพวกเขา แม้ว่าจะมีบางอย่างผิดปกติ แต่ก็มีความรับผิดชอบ (ฉันสามารถทำยอดเขาที่ลับๆล่อๆด้วยข้อมูลบันทึก sudoers เพื่อค้นหาผู้กระทำผิดเช่นกัน) พวกของฉันมักจะแสดงความกังวลกับพวกเขาเสมอว่าพวกเขาต้องพิมพ์ sudo สำหรับทุกสิ่งที่พวกเขาต้องการจะทำด้วยสิทธิ์ระดับสูงในสภาพแวดล้อม Linux ที่นี่ฉันพบคำถามเดียวกันด้วย

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

เมื่อพิจารณาถึงโซลูชันที่มีอยู่ของ RBAC และการใช้งานในโลก Linux ฉันพบเจอ

SELinux http://www.ibm.com/developerworks/linux/library/l-rbac-selinux/

grsecurity http://en.wikipedia.org/wiki/Grsecurity

และในขณะที่มีการใช้งานอื่น ๆ ฉันจะพิจารณาพวกเขาตามลำดับสูงสุดของรายการ การนำ RBAC ไปใช้นั้นเป็นงานจำนวนมากในองค์กรโดยเฉพาะเมื่อมีผู้ใช้จำนวนมาก RBAC จะให้เสียงที่ดีกว่าในสภาพแวดล้อมที่เป็นเนื้อเดียวกัน อย่างไรก็ตามเมื่อมีการติดตั้ง Unix ที่ต่างกันในเครือข่ายและฐานข้อมูลผู้ใช้เป็นเรื่องปกติ เนื่องจาก SELinux ไม่สามารถปรับขนาด / นำไปใช้กับเครื่องมือ Solaris และ RBAC / pfexec ไม่ได้ถูกนำมาใช้บน Linux มีวิธีการต่าง ๆ สำหรับการทำสิ่งเดียว ตัวอย่างเช่น: http://blogs.oracle.com/darren/entry/opensolaris_rbac_vs_sudo_howto

การติดตั้งทั่วทั้งเครือข่ายที่แตกต่างกันอาจไม่สนับสนุนวิธีการนี้ (อย่างไรก็ตาม openrbac อาจถูกพิจารณาว่าเป็นวิธีการใช้งานทั่วไป) เช่น sudoers เป็นวิธีการโฮสต์เดียวหรือไม่สามารถกำหนดค่าส่วนกลางในเครือข่าย / โดเมนได้/etc/sudoersต้องซิงค์ทุกครั้งที่มีการเปลี่ยนแปลง ยิ่งไปกว่านั้นมีข้อกำหนดของฐานความรู้ในขณะที่ใช้งานไฟล์ sudoers จำเป็นต้องเข้าใจภาษานโยบายของการกำหนดค่า sudoers เพื่อไม่ให้เกิดข้อผิดพลาดและอนุญาตให้มีการมอบทุนใด ๆ RBAC อาจเสนอวิธีการรวมศูนย์ในขอบเขตในขณะที่โปรไฟล์ความปลอดภัยสามารถทั่วไปการเพิ่ม / ลบผู้ใช้จากบทบาทที่ได้รับอนุญาตสามารถทำได้จากที่เดียว (นั่นคือสถานที่ที่ข้อมูลผู้ใช้ / passwd / กลุ่มถูกเก็บไว้สำหรับ โดเมนเช่น LDAP, NIS หรือ AD) สิ่งนี้จะต้องมีความเข้าใจอย่างชัดเจนเกี่ยวกับคำสั่งที่จำเป็นในการทำงานกับฐานข้อมูล RBAC เช่น smexec, smmultiuser

Sudo อาจเสนอวิธีการข้ามแพลตฟอร์มมากขึ้นที่นี่ยังใช้งานได้บนแพลตฟอร์ม Unix / like ทั้งหมดที่มีคุณสมบัติ setuid ทั้งสองsudoและRBACประสบความสำเร็จในการให้สิทธิ์ผู้ใช้ที่ไม่ใช่ผู้ใช้รูทที่สามารถทำได้โดยไม่ต้องให้rootรหัสผ่านเอง Sudo สามารถให้แนวทางที่ละเอียดยิ่งขึ้น / ละเอียดยิ่งขึ้นบนอาร์กิวเมนต์บรรทัดคำสั่งที่สามารถใช้ในขณะที่รันคำสั่งและ จำกัด อย่างแท้จริงว่าคำสั่งใดที่มีอาร์กิวเมนต์สามารถรันด้วยสิทธิ์ระดับสูง แม้ว่า RBAC อาจ จำกัด ให้ใช้คำสั่งหรือไบนารีที่ติดตั้ง แต่ไม่สามารถควบคุมอาร์กิวเมนต์บรรทัดคำสั่งได้ การตรวจสอบจะดีกว่าและสร้างขึ้นในสภาพแวดล้อม RBAC ในขณะที่sudoมันขึ้นอยู่กับการกำหนดค่าและข้อ จำกัด ด้านความปลอดภัยภายใต้การดำเนินการ (เช่นไม่ให้เชลล์และโดยเฉพาะอย่างยิ่งโฮสต์ที่ได้รับอนุญาตให้เข้าสู่โฮสต์อื่น ๆ โดยไม่มีปัญหาใด ๆ ) เหล่านี้เป็นเพียงบางส่วนของความแตกต่างที่ฉันสามารถอ้างอิงและฉันมีความชอบส่วนตัวที่จะใช้ sudo กว่า RBAC แม้ว่าจะมีข้อ จำกัด ดังกล่าวที่ฉันสามารถนำมาใช้ในการทำงานรอบ ๆ จนกว่าปัญหาทั้งหมดจะได้รับการแก้ไขโดย RBAC เพื่อประโยชน์ของ sudo ที่ดีกว่าฉันไม่คิดว่า sudo จะหายไปเพราะมันง่าย


1

ฉันจะเจาะรูทเอกสารที่คุณทำงานอยู่เพื่อให้คุณสามารถเข้าถึงได้อย่างเต็มที่

เพื่อหลีกเลี่ยงการพิมพ์ sudo ทุกครั้งที่คุณติดตั้ง Gem ให้ทำตามบทความนี้ที่นี่: http://forums.site5.com/showthread.php?t=11954

ฉันขอแนะนำให้ติดตั้ง RVM เพื่อจัดการ Ruby and Rails เวอร์ชันต่างๆ http://beginrescueend.com/

มันจะทำให้ชีวิตของคุณง่ายขึ้นมากเมื่อคุณค้นหาโฮสต์ที่คุณต้องการปรับใช้แอพของคุณให้ใช้เวอร์ชันที่แตกต่างจากสิ่งที่คุณพัฒนา


รู้เกี่ยวกับ rvm แต่ขอบคุณสำหรับลิงค์ฟอรั่ม
การผลิตที่สำคัญ

0

เรียกใช้คำสั่ง

sudo su root

ตอนนี้คุณจะสามารถเรียกใช้คำสั่งในฐานะผู้ใช้รูทได้ ระวัง! คำสั่งใด ๆ ที่ทำงานจะเป็นผู้ใช้รูท คุณสามารถทำสิ่งต่าง ๆ อย่างจริงจังถ้าคุณไม่ระวัง

หรือคุณเปลี่ยนการอนุญาตของไดเรกทอรีเพื่ออนุญาตให้ผู้ใช้บันทึกและแก้ไขไฟล์


4
ทำไมไม่เป็นเช่นนั้นsudo -s?
sarnold

1
หรือsudo -iเช่นนี้จำลองเป็นล็อกอินเชลล์ อาจใกล้เข้าสู่รูทโลคอลท้องถิ่นมากกว่าการใช้ bash หรือเชลล์อื่นผ่าน sudo
Bastian Ebeling

1
ทำไมไม่เพียงsu? ความหลงใหลกับ sudo นี้คืออะไร คุณไม่ต้องการ sudo เคย
orion

2
ในตอนนี้, มันเป็นไปไม่ได้ที่จะใช้แค่suถ้าไม่ทราบรหัสผ่านรูท การเพิ่มผู้ใช้ไปยัง sudoers และการเรียกใช้sudo suช่วยให้ผู้ใช้สามารถใช้รหัสผ่านผู้ใช้ที่มีอยู่และเป็นที่รู้จักของพวกเขาเพื่อเลื่อนระดับ
Luke

0

แก้ไขไฟล์ / etc / passwd และให้สิทธิ์การรูทแก่ผู้ใช้ "yourUserName" โดยการเปลี่ยน User และ Group ID เป็น UID 0 และ GID 0:

yourusername: 0: 0 :: / home / yourusername: / bin / ดวลจุดโทษ


2
ไม่แนะนำฝันร้ายด้านความปลอดภัย! นี่เป็นการฝึกฝนที่เลวร้ายที่สุด
ตอบโต้

ฉันใช้โซลูชันนี้สำหรับ raspberry pi ของฉันซึ่งฉันไม่มีบัญชีผู้ใช้อื่น ๆ และมันเชื่อมต่อกับเครือข่ายในบ้านของฉัน
Ufuk özkanlı

0

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


-1

user @ server: ~ $ sudo passwd root
รหัสผ่านสำหรับผู้ใช้:
ป้อนรหัสผ่าน UNIX ใหม่:
พิมพ์รหัสผ่าน UNIX ใหม่อีกครั้ง:
passwd: รหัสผ่านได้รับการอัปเดตเรียบร้อยแล้ว
user @ server: ~ $ su
รหัสผ่าน:
root @ server: / home / user #

นั่นคือ "#" หรือไม่ใช่ความงามใช่หรือไม่

ฉันใช้ "sudo" เพียงครั้งเดียวเพื่อให้บรรลุความสามารถในการ

user @ server: ~ $ su
รหัสผ่าน:
root @ server: / home / user #

สำหรับชีวิตของเซิร์ฟเวอร์

เพื่อให้ปลอดภัยอีกครั้ง

root @ server: / home / user # exit
exit
user @ server: ~ $

Sysadmins ได้ทำสิ่งนี้มานานหลายปีแล้วเมื่อ "sudo" ไม่ได้เป็นส่วนหนึ่งของแนวโน้มของ mollycoddling

เมื่อคุณทำเช่นนี้มันเป็นความรับผิดชอบของคุณที่จะดูแลไม่ใช่ของฉัน

เอียน


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