อะไรคือความเสี่ยงในการเรียกใช้ 'sudo pip'


99

บางครั้งฉันพบความคิดเห็นหรือการตอบสนองที่ระบุอย่างชัดเจนว่าการทำงานpipภายใต้sudoนั้น "ผิด" หรือ "ไม่ดี" แต่มีหลายกรณี (รวมถึงวิธีการตั้งค่าเครื่องมือต่างๆ) ซึ่งง่ายกว่ามากหรือแม้กระทั่งจำเป็น วิ่งไปทางนั้น

อะไรคือความเสี่ยงที่เกี่ยวข้องกับการทำงานpipภายใต้sudo?


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

คำตอบ:


108

เมื่อคุณเรียกใช้pipกับsudoคุณทำงานกับsetup.py sudoกล่าวอีกนัยหนึ่งคือคุณเรียกใช้รหัส Python โดยพลการจากอินเทอร์เน็ตในฐานะรูท หากมีคนสร้างโปรเจ็กต์ที่เป็นอันตรายบน PyPI และคุณติดตั้งคุณจะให้สิทธิ์ผู้โจมตีรูทเข้าถึงเครื่องของคุณ ก่อนที่จะมีการแก้ไขpipและ PyPI ล่าสุดผู้โจมตียังสามารถเรียกใช้ชายคนหนึ่งในการโจมตีกลางเพื่อฉีดรหัสของพวกเขาเมื่อคุณดาวน์โหลดโครงการที่น่าเชื่อถือ


2
ภัยคุกคามมีผลเฉพาะในระหว่างpipหรือสำหรับการเรียกใช้สิ่งที่ติดตั้งในภายหลังหรือไม่?
orome

4
แต่นั่นจะเป็นจริงไม่ว่าฉันจะsudoหรือไม่เมื่อฉันpipใช่ไหม? เมื่อติดตั้งแล้วเราทุกคนก็ตกอยู่ในความเสี่ยงไม่ว่าจะไปที่นั่นอย่างไร?
orome

2
@raxacoricofallapatorius นี่คือการเข้าสู่ดินแดนฉันไม่สบายใจที่จะตอบไม่ใช่เพราะฉันไม่มีความคิด (ฉันมีลางสังหรณ์และสามารถให้เหตุผลได้) แต่เป็นเพราะมันยากที่จะคาดเดาได้ว่าการเปลี่ยนแปลงเล็กน้อยที่ดูเหมือนจะส่งผลกระทบโดยรวมอย่างไร ความปลอดภัย. นอกจากนี้โดยปกติแล้วมันง่ายมากที่จะหลีกเลี่ยงไม่เพียงsudoแต่ยังรวมถึงปัญหาการอนุญาตเหล่านี้ด้วยการติดตั้งแพ็คเกจที่อื่น (เช่นใน Virtualenv) การทำเช่นนี้อาจดีกว่าและเชื่อถือได้มากขึ้นแม้ว่าจะเพิกเฉยต่อข้อกังวลด้านความปลอดภัยทั้งหมดก็ตาม

2
@raxacoricofallapatorius ขึ้นอยู่กับสิทธิ์การเขียนที่แน่นอนและรูปแบบไดเรกทอรีฉันกลัวว่ามัลแวร์ที่ซับซ้อนกว่านี้จะเขียนทับโค้ดอื่น ๆ ที่เชื่อถือได้มากกว่าเช่นโค้ดที่ยูทิลิตี้ระบบใช้เป็นประจำจะรันเป็นรูท

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

19

นอกจากความเสี่ยงด้านความปลอดภัยที่ชัดเจนแล้ว (ซึ่งในความเป็นจริงฉันคิดว่าอยู่ในระดับต่ำเมื่อคุณติดตั้งซอฟต์แวร์ที่คุณรู้จัก) แล้วยังมีอีกเหตุผล Python ที่มาพร้อมกับระบบเป็นส่วนหนึ่งของระบบนี้และเมื่อคุณต้องการจัดการระบบคุณจะใช้เครื่องมือที่กำหนดไว้สำหรับการดูแลระบบเช่นตัวจัดการแพ็คเกจในกรณีที่ติดตั้ง / อัปเกรด / ถอนการติดตั้งซอฟต์แวร์ เมื่อคุณเริ่มแก้ไขซอฟต์แวร์ของระบบด้วยเครื่องมือของบุคคลที่สาม (pip ในกรณีนี้) คุณจะไม่มีการรับประกันเกี่ยวกับสถานะของระบบของคุณ อีกเหตุผลหนึ่งคือ sudo สามารถทำให้คุณมีปัญหาที่คุณไม่มีโอกาสหรือมีโอกาสน้อยมากที่จะมีอย่างอื่น ดูตัวอย่างไม่ตรงกันระหว่าง sys.executable และ sys.version ใน Python

Distros ตระหนักถึงปัญหานี้และพยายามบรรเทาปัญหานี้ ยกตัวอย่างเช่น Fedora - Making ปลอดภัย sudo pipและ Debian - อ. แพคเกจแทนของเว็บไซต์ของแพคเกจ


6

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

และ pip ​​ไม่ต้องการสิทธิพิเศษทั้งหมดนั้นมีเพียงการเข้าถึงไฟล์และไดเร็กทอรีเฉพาะ หากคุณไม่สามารถใช้ตัวจัดการแพ็กเกจของระบบและไม่ต้องการใช้สภาพแวดล้อมเสมือนจริงคุณอาจสร้างผู้ใช้เฉพาะที่มีสิทธิ์เขียนลงในไดเร็กทอรีการติดตั้ง python และใช้สำหรับ pip วิธีนี้จะช่วยให้คุณควบคุมสิ่งที่ pip ทำได้และไม่ทำได้ดีขึ้น และคุณสามารถใช้sudo -uสำหรับสิ่งนั้น!


ดังนั้นสิ่งที่ฉันต้องทำคือเช่นอนุญาตให้ตัวเองเขียนสิทธิ์site-packages?
orome

1
@raxacoricofallapatorius ไม่เพียงแค่นั้นเนื่องจากบางแพ็คเกจยังติดตั้งสคริปต์pipตัวช่วย (เช่นตัวเอง, IPython, django, py เซ็กเมนต์, ... ) ดังนั้นคุณจะต้องเข้าถึงไดเร็กทอรีใดก็ตามที่พวกเขาติดตั้งด้วยตัวเอง
MattDMo

ใช่และไม่. ฉันไม่ใช่ผู้เชี่ยวชาญด้านความปลอดภัย แต่ฉันคิดว่าจะดีกว่าถ้าผู้ใช้ที่เรียกใช้สคริปต์ไม่มีสิทธิ์ในการเขียน ดังนั้นฉันขอแนะนำให้แยกผู้ใช้
Cilyan

@MattDMo: ใช่มันสมเหตุสมผลแล้ว แต่กรณีเหล่านี้อาจถูกค้นพบได้ง่ายเนื่องจากสิ่งต่างๆล้มเหลวโดยไม่ได้รับอนุญาตที่เหมาะสม ถ้าทำเสร็จแล้วนั่นไม่ใช่วิธีที่ปลอดภัยที่สุดแล้วสิ่งที่เลวร้ายที่สุดที่อาจเกิดขึ้นกับระบบของฉันโดยรวมคือสิ่งที่สามารถเกิดขึ้นได้เมื่อฉันเรียกใช้อะไรต่อไปใช่ไหม? ข้อแตกต่างเพียงอย่างเดียวคือฉันสามารถทำลายการติดตั้ง Python ของฉันในฐานะฉันได้ (แทนที่จะต้องทำอย่างนั้น) ใช่ไหม?
orome

ฉันจะสร้างผู้ใช้ดังกล่าวเพื่อจุดประสงค์ในการใช้งานเพียงอย่างเดียวได้อย่างไรpip(ไม่จำเป็นต้องมีการเปลี่ยนแปลงอื่นใดในระบบเช่นโฮมไดเร็กทอรีใหม่ ฯลฯ ) หลังจากนั้นฉันถือว่าฉันเพิ่งเปลี่ยนเจ้าของsite-packagesเป็นผู้ใช้คนนั้นใช่ไหม
orome

1

สิ่งเดียวที่ "ผิด" sudoก็คือว่ามันเป็น Super User ala root หมายความว่าคุณสามารถทำลายการติดตั้งด้วยคำสั่งที่ไม่ถูกต้อง เนื่องจาก PIP เป็นการบำรุงรักษาแพ็คเกจสำหรับโปรแกรมเฉพาะคุณจึงต้องมีการเข้าถึงดังกล่าวเพื่อทำการเปลี่ยนแปลง ...

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