`sudo pip install`은 여전히 ​​깨진 습관입니까?


38

나는 우분투를 처음 사용하므로 나와 함께하십시오. pip이 명령을 사용하여 설치했습니다 : sudo apt-get -y install python-pip. 그런 다음 웹 사이트의 명령을 사용하여 NLTK 를 설치했습니다 sudo pip install -U nltk. 그러나 나는 내가 한 모든 일이 "파산 된 관행"이라고 말하는 이 질문 에 걸려 넘어 졌다. 가장 큰 타격은 사용 sudo pip이 본질적으로 잘못되었고 pip너무 많은 힘 을 주면 운영 체제 파일이 손상 될 수 있다는 것입니다. 누구든지이 주장을 확인할 수 있습니까?

참고- sudo명령을 시도 할 때 apt-get -y install python-pip2 개의 오류가 발생 했기 때문에 사용 했습니다.

E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

3
지시하는 sudo pip install것은 본질적으로 잘못되었습니다. stackoverflow.com/a/33004920/95735에서
Piotr Dobrogost

"... 내재적으로 ...." pshaw
michael

죄송 합니다. 설치 sudo pip install만큼 나쁩니다 curl "some-url" | sudo bash. 마찬가지로, 우리는 약간의 개발자가 사용하는 몇 번 했어 sudo pip install워크 스테이션에 의존 관계 (dependencies)를 설치를 한 후 때문에 REPO에 깨진 코드에서 확인 requirements.txt또는 setup.py파일들이 설치 어떤 실종되었으며, 다른 사람은 의존성이 필요했다 알아낼에 도착 그 남자는 휴가 중이 었어
Mike DeSimone

답변:


52

모두 sudo pip install와 다른 일반적인 변형은 sudo -H pip install해야 하지 그것을 사용하는 사용 루트 권한에 대한 보안 위험 때문에 권장 pipPyPI (파이썬 패키지 인덱스)에서 파이썬 패키지를 설치가.

에서 https://stackoverflow.com/a/21056000/486919 (강조 광산) :

당신이 실행하는 경우 pipsudo, 당신은 실행 setup.py으로 sudo. 즉, 인터넷에서 루트로 임의의 Python 코드를 실행합니다. 누군가 PyPI에 악성 프로젝트를 설치하고 설치 하면 공격자에게 컴퓨터에 대한 루트 액세스 권한 부여됩니다. 최근에 pipPyPI를 수정하기 전에 공격자는 신뢰할 수있는 프로젝트를 다운로드 할 때 중간 공격에서 사람을 실행하여 코드를 삽입 할 수도 있습니다.

https://security.stackexchange.com/a/79327/8761 에서 언급했듯이 누구나 악성 패키지를 포함하여 Python 패키지를 PyPI에 업로드 할 수 있습니다.

간단히 말해, 최소 권한 원칙 에 따라 꼭 필요한 경우가 아니면 PyPI에서 Python 패키지를 설치 sudo하는 pip데 사용하지 마십시오 . 대신, 사용을 고려 pip install --user(주이 pip install아니오 sudo로도 추가 플래그 / 옵션의 기본값은 pip install --user현재 우분투) 또는 (같은 가상 환경 virtualenv). 당신은 사람들이 추천을 참조하면 sudo pipsudo -H pip에게하지 말라고 알려주십시오.


2
과거에 사용한 적이 있다면 어떻게 처리 했습니까?
endolith

1
이 지침이 틀렸습니까? tensorflow.org/install/install_linux
endolith

5
@endolith 당신은 실행 취소하기 위해 pip 제거를 취소 할 수 있습니다. 그러나 패키지가 tensorflow, numpy 등과 같은 신뢰할 수있는 관리자로부터 온 경우 "aye! security!" 논쟁은 실제로 의미가 없습니다. (또한 "--user"로도 악의적 인 패키지를 설치하는 경우 기본적으로 문제가 발생합니다. 실제 규칙은 다음과 같아야합니다. 컨테이너에서 제외하고 알 수 없거나 신뢰할 수없는 사람들의 코드는 설치하지 마십시오.
michael

2
@endolith이 명령어들은 sudo를 사용한다고 말하지 않습니다. 어쩌면 그들은 익숙해졌고 길의 오류를 보았습니까? :)
David Gardner

1
sudo pip install"오래된"시스템 설치 Python 패키지를 제거 할 수 있으므로 이러한 OS 패키지를 업그레이드하거나 제거하기가 어려울 수 있습니다. sudo pip uninstall새 패키지를 제거하지만 이전 패키지에서 파일을 복원하지 않기 때문에 여기에서는 도움이되지 않습니다. (나의 동료 R. Zagar는 또 다른 대답으로 더 자세히 설명합니다.)
Mike DeSimone

19

당신은 사용해야합니다 sudo핍 설치하는 APT와을 ( sudo apt install python-pip) 만에 명시된 바와 같이 edwinksl의 대답 은 사용하지 말아야 sudo패키지 설치 핍과를 , 당신은 사용해야하는 pip install --user <package>사용자 만 설치하거나 사용하는 VIRTUALENV를 더욱 패키지의 범위를 제한하는 .

Apt는 Ubuntu의 리포지토리에서 패키지를 설치하는 반면 pip는 PyPi에서 사용자가 업로드 한 패키지를 악성으로 설치할 수 있습니다.


7

그리고 더 부드럽게 대답하기 위해 :

  1. 당신은 항상 그럴 필요가 있습니다 sudo apt-get install .... 그것이 도구가 작동하도록 설계된 방식입니다.
  2. 정확히 무엇을하고 싶은지에 따라 (따라서 "논쟁") sudo [-H]with를 사용 하는 pip install것은 가능하고 선택적인 것입니다.

파이썬의 모토 중 하나 는 "한 가지 분명한 방법이 있어야한다"는 것이다. 그리고 대부분의 모토와 마찬가지로, 가능한 모든 기회에서듯한 경쾌한 기쁨으로 깨졌습니다. 불행히도, 나의 가장 겸손한 견해로, 파이썬 생태계는 충돌 하는 많은 "단단하고 빠른"규칙으로 구성되어 있습니다. 세부 사항 등). 거의 모든 경우에, 이것은 언어 및 도구의 역사적 발전에 기인 한 것입니다 (그리고 그들이 직업을 갖고 싶어 할 때 역사 수업을 원하거나 필요로하는 사람). 그러나 Mac / Win /의 차이점 때문일 수도 있습니다 * Nix 플랫폼 (예 : 유닉스 / 리눅스의 사고 방식은 비슷합니다."파산 된 관행""본질적으로 잘못된" 화물 컬트리스트를 모두 소금에 절이십시오. 일부는 실제로 의미가 있습니다. (다른 사람들은 단지 의미가 있습니다.)

우선, 기본 "사용자 별 설치"보다는 거의 항상 virtualenv를 선호하게 될 것입니다. 실제로 이것이 아마도 여러분이 필요로하는 것이기 때문입니다. 따라서 지금부터 시작할 수도 있습니다. 이것이 어떻게 이루어지는 지 정확히 "의존"(위의 파이썬 모토 참조). Conda (대부분 Mac 및 Windows 용)를 사용하는 경우 Conda사용하여 설정됩니다 . "pure"Python [sic] 을 사용하는 경우 버전 및 사용하는 python 유틸리티에 따라 다르지만 virtualenvwrapper 는 매우 유용합니다.

둘째, "never sudo"규칙에 대한 반대의 예와 같이 sudo -H pip install -U numpy, 원하는 경우에만 큰 라이브러리를 다운로드 / 다시 설치 / 유지하는 것을 피할 수 있다는 점에서 매우 좋습니다. 모든 virtualenv에 개별적으로 하나의 버전이 필요합니다. scikit-learn, NumPy, matplotlib, SciPy, pandas 등과 같은 널리 사용되는 프레임 워크는 한 번 설치 한 후 여러 환경에서 재사용 할 수 있습니다 . 또한 로컬 친화적 인 sys-admin은 시스템의 모든 사용자 에게이 기능을 sudo설치할 수 있으며 TensorFlow와 같은보다 복잡한 설치를 위해을 통해이 작업을 수행했을 것 입니다.

마지막으로, (Twitter API, 텍스트 munging, 코드 형식 등) 그러한 임의의 타사 라이브러리를 설치하는 경우 sudo를 통해 루트로 설치하지 마십시오. 물론 현재 사용자로 설치하십시오. 그러나 단지 기억 하여 사용자 계정이 모든 정말 중요한 물건이있다 .


2
"tempered"= "다른 사람의 감정을 상하게하지 않기 위해 혼란을 불러 일으키는 비생산적인 손 잡기 faffing". 혼동을 피하기 위해 명확하고 명시 적입니다. 예제를 포함하여이를 기준으로 할 필요는 없습니다. 유닉스는 실제로 "자신의 설정과 위험을 감수"하고, 말 그대로 C 사고 방식이지만, 필요하지 않은 malloc곳 에서는 사용 하지 마십시오. --user플래그는 무엇 영업 이익을 요구했다 수행하고 특별한 권한이 필요하지 않습니다. 당신은 그 과정에서 virtualenv 에 대한 당신의 좋은 점을 훼손하고 있습니다 .
Benjamin R

나는 일반적인 반응과 의견에 대한 설문 조사에이 관점을 이미 포함시켰다.
마이클

1

"sudo pip install"을 사용하면 OS 공급 업체에서 제공 한 Python 컨텐츠를 덮어 쓸 수 있습니다. 이 경우 영향을받는 공급 업체 패키지는 "rpm --verify"를 통과하지 않으며 패키지가 손상된 것으로 나타납니다.

OS 공급 업체에서 테스트 한 시스템 관리 도구 를 사용 하시겠습니까, 인터넷에서 다운로드 한 테스트되지 않은 구성 요소를 사용해도됩니까?

악성 패키지가 PyPI에 업로드되지 않으면 "sudo pip install"을 사용하는 사람들은 전체 시스템 권한으로 악성 페이로드를 실행하게됩니다. 너 저걸 원하니? (#principleofleastprivilege)

그것이 단지 랩톱이고 고양이 사진 만 몇 개만 위험한다면 위험이 낮을 것입니다.하지만 다중 사용자 시스템 인 경우 위험에 N을 곱한 것입니다. 가치가있는 시스템 또는 시스템 가용성 또는 안정성에 가치가있는 경우 위험도 증가합니다.

자신의 모험을 자유롭게 선택하되, 선택의 영향을받을 수있는 다른 사용자의 사전 동의를 받으십시오. 그들은 당신과 같은 수준의 위험에 익숙하지 않을 수 있습니다.


0

이 답변에 추가하려면 : 우분투에 대해 모르겠지만 Fedora에서 sudo dnf install python3-numpy형식을 사용 하여 유용한 많은 패키지 를 설치할 수 있습니다 . 이것은 안전하지 않다는 단점이 없으며 (distro repo 유지 관리자가 패키지를 검증 함) 시스템 전체에 설치할 수도 있습니다. 단점은 배포판 repo 버전이 PyPI에서 패키지를 약간 지연시킬 수 있다는 것입니다.


-1

아니요, 맞습니다. 이 주장을 확인할 수 없습니다. 나는 항상와 sudo -H함께 사용 합니다 pip. pip운영 체제 파일 만 손상시킬 수 있습니다 apt. 만 사용하지 않는 sudo으로 pip해당 사용자 만 설치하려는 경우.


1
개인용 컴퓨터에서 언제 pip시스템 전체 를 설치해야 합니까? 시스템 관리자라면 다른 이야기 일 수 있습니다.
Benjamin R
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.