`সুডো পাইপ ইনস্টল করা` এখনও কি ভাঙ্গা অনুশীলন?


38

আমি উবুন্টুতে নতুন, তাই দয়া করে আমাকে সহ্য করুন। আমি ইনস্টল pipএই কমান্ড ব্যবহার করছে: sudo apt-get -y install python-pip। তারপর আমি ইনস্টল NLTK তাদের ওয়েবসাইট, যা ছিল কমান্ড ব্যবহার করছে: sudo pip install -U nltk। তবে তখন আমি এই প্রশ্নে হোঁচট খেয়েছি যা বলে যে আমি যা কিছু করেছি তা "ভাঙ্গা অনুশীলন"। আমাকে যে রেখাটি সবচেয়ে বেশি আঘাত করেছিল sudo pipতা হ'ল ব্যবহারটি সহজাত ভুল এবং pipখুব বেশি শক্তি দেওয়া অপারেটিং সিস্টেমের ফাইলগুলিকে ক্ষতি করতে পারে। এই দাবি কেউ বৈধ করতে পারেন?

দ্রষ্টব্য - আমি কেবল তখনই ব্যবহার করেছি sudoকারণ যখন আমি আদেশটি চেষ্টা করেছিলাম তখন apt-get -y install python-pipএটি আমাকে 2 টি ত্রুটি দিয়েছে:

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
পাযত্র Dobrogost

"... সহজাত ...." pshaw
মাইকেল

দুঃখিত, ইনস্টলের sudo pip installমতোই খারাপ curl "some-url" | sudo bash। একইভাবে, আমাদের কয়েকবার হয়েছে যেখানে কিছু বিকাশকারী sudo pip installতাদের ওয়ার্কস্টেশনের উপর কিছু নির্ভরতা ইনস্টল করতেন , তারপরে রেপোতে ভাঙা কোডটি চেক করে নিলেন কারণ ফাইল requirements.txtবা setup.pyতারা যা কিছু ইনস্টল করেছিল তা অনুপস্থিত ছিল এবং বাকি সবাই কীসের নির্ভরতা প্রয়োজন তা নির্ধারণ করতে পেরেছিল লোকটি যখন ছুটিতে ছিল
মাইক ডিসিমোন

উত্তর:


52

উভয় sudo pip installএবং এর অন্যান্য প্রচলিত রূপই উত্সাহিত করা sudo -H pip installউচিত নয় কারণ pipপাইপআই (পাইথন প্যাকেজ সূচক) থেকে পাইথন প্যাকেজ ইনস্টল করতে রুট সুবিধাগুলি ব্যবহার করা সুরক্ষা ঝুঁকি ।

থেকে https://stackoverflow.com/a/21056000/486919 (জোর খনি):

আপনি চালাতে যখন pipসঙ্গে sudo, আপনি চালাতে setup.pyসঙ্গে sudo। অন্য কথায়, আপনি ইন্টারনেট থেকে নির্বিচারে পাইথন কোডটি রুট হিসাবে চালান। যদি কেউ পিআইপিআইতে কোনও দূষিত প্রকল্প স্থাপন করে এবং আপনি এটি ইনস্টল করেন, আপনি আপনার মেশিনে আক্রমণকারীকে মূল অ্যাক্সেস দিন। pipপিআইপিআই- তে সাম্প্রতিক কিছু সংশোধন করার আগে, আপনি যখন বিশ্বাসযোগ্য প্রকল্পটি ডাউনলোড করেন তখন কোনও আক্রমণকারী মাঝারি আক্রমণে কোনও ব্যক্তিকে তাদের কোড ইনজেকশনের জন্য চালাতে পারে।

Https://security.stackexchange.com/a/79327/8761 তে উল্লিখিত হিসাবে , এটি লক্ষ করা জরুরী যে যে কেউ পিআইপিআইতে দূষিতগুলি সহ পাইথন প্যাকেজগুলি আপলোড করতে পারে।

সংক্ষেপে, অনুযায়ী অন্তত বিশেষাধিকার নীতিকে , ব্যবহার করবেন না sudoসঙ্গে pipPyPI থেকে পাইথন প্যাকেজগুলি ইনস্টল করতে যদি না আপনি একেবারে প্রয়োজন। পরিবর্তে, pip install --user( বর্তমানে উবুন্টুতে অতিরিক্ত pip installকোনও sudoপতাকা / বিকল্পগুলির সাথে ডিফল্ট নয় pip install --user) বা ভার্চুয়াল পরিবেশ (যেমন virtualenv) ব্যবহার করে বিবেচনা করুন। আপনি যদি লোকদের প্রস্তাব দিচ্ছেন sudo pipবা দেখেন sudo -H pipতবে দয়া করে তাদের বলুন না।


2
আমি যদি অতীতে এটি ব্যবহার করে থাকি, তবে এটি কীভাবে পরিষ্কার করবে?
এন্ডোলিথ

1
তাহলে এই নির্দেশাবলী ভুল? tensorflow.org/install/install_linux
এন্ডোলিথ

5
@endolith আপনি পূর্বাবস্থায় ফিরতে পাইপ আনইনস্টল করতে পারেন। এছাড়াও, যদিও, যদি প্যাকেজটি কোনও বিশ্বস্ত রক্ষণাবেক্ষণকারী, যেমন টেনসরফ্লো, ন্পী ইত্যাদি থেকে থাকে তবে "হাই! সুরক্ষা!" যুক্তি আসলেই বোঝায় না। (এছাড়াও যদি আপনি "-user" হিসাবে কোনও দূষিত প্যাকেজ ইনস্টল করেন তবে আপনি মূলত যেভাবেই খারাপ হয়ে গেছেন The আসল নিয়মটি হওয়া উচিত: কোনও ধারক ছাড়া অজানা / অবিশ্বস্ত লোকের কাছ থেকে কোড ইনস্টল করবেন না - তবে তারপরেও প্রস্তাবিত নয়।)
মাইকেল

2
@endolith এই নির্দেশাবলী sudo ব্যবহার করতে বলে না। সম্ভবত তারা অভ্যস্ত ছিল এবং তারা তাদের উপায়গুলির ত্রুটি দেখেছিল? :)
ডেভিড গার্ডনার

1
sudo pip install"পুরানো" সিস্টেম-ইনস্টলড পাইথন প্যাকেজগুলি আনইনস্টল করতে পারে, যা সেই ওএস প্যাকেজগুলিকে আপগ্রেড বা আনইনস্টল করতে পারে। sudo pip uninstallএখানে সহায়তা করে না, কারণ এটি নতুন প্যাকেজটি সরিয়ে দেয় তবে পুরানো ফাইলটি পুনরুদ্ধার করে না। (আমার সহকর্মী আর জাগার আরও একটি উত্তরে আরও বিশদে যান))
মাইক ডিসিমোন

19

আপনি ব্যবহার করা আবশ্যক sudoপিপ ইনস্টল করতে কার্যক্ষম সঙ্গে ( sudo apt install python-pip), কিন্তু যেমন বিবৃত edwinksl এর উত্তর আপনি ব্যবহার করা উচিত নয় sudoপ্যাকেজগুলি ইনস্টল করতে PIP এর সাথে , আপনি ব্যবহার করা উচিত pip install --user <package>আপনার ব্যবহারকারী শুধু ইনস্টল করুন, বা ব্যবহার করতে virtualenv এমনকি আরও প্যাকেজের সুযোগ সীমিত করতে ।

এপটি উবুন্টুর সংগ্রহস্থলগুলি থেকে প্যাকেজ ইনস্টল করে, যেখানে পাইপ পাইপি থেকে ব্যবহারকারী-আপলোড করা প্যাকেজগুলি ইনস্টল করে যা দূষিত হতে পারে।


7

এবং আরও মেজাজী জবাবের জন্য:

  1. আপনার প্রকৃতপক্ষে সর্বদা করতে হবে sudo apt-get install ..., ঠিক এভাবেই কাজ করার জন্য সরঞ্জামটি তৈরি করা হয়েছিল।
  2. ব্যবহার sudo [-H]সঙ্গে pip installউভয় সম্ভব & ঐচ্ছিক, কি ঠিক আপনি কি করতে চান তার উপর নির্ভর করে (এবং অত: পর, "বিতর্ক")।

এক পাইথন এর মূলমন্ত্র হল "সেখানে one-- হতে হবে এবং বিশেষ করে শুধুমাত্র একটি --obvious এটা করতে উপায় উচিত।" এবং বেশিরভাগ মোটোসের মতো এটি প্রতিটি সম্ভাব্য সুযোগে আপাতদৃষ্টিতে সরডোনিক উল্লাসের সাথে ভেঙে গেছে। (এই কারণেই মটোস বিদ্যমান, আমার ধারণা)) দুর্ভাগ্যক্রমে, আমার অতি বিনীত মতে পাইথন ইকোসিস্টেমটি অনেকগুলি বিরোধী "কঠোর এবং দ্রুত" নিয়ম নিয়ে গঠিত , কখনই ভাঙা যায় না ... "ইয়াদ ইয়াদা ইয়াদা" (শয়তান, বিশদ, ইত্যাদি)। প্রায় সব ক্ষেত্রেই, এটি ভাষা ও সরঞ্জামগুলির historicalতিহাসিক বিবর্তনের কারণে ঘটে (এবং যখন তারা কেবল তাদের কাজটি চালিয়ে যেতে চায় তখন ইতিহাসের পাঠ প্রয়োজন) - তবে ম্যাক / উইন / এর পার্থক্যের কারণেও হতে পারে * নিক্স প্ল্যাটফর্মগুলি (যেমন, ইউনিক্স / লিনাক্সের একই মানসিকতা রয়েছে,এই সমস্ত "ভাঙ্গা অনুশীলন" এবং "স্বভাবতই ভুল" কার্গো-সংস্কৃতিবিদদের বিশাল চিমটে নুন দিয়ে নিন। কিছু আসলে ভাল মানে। (অন্যরা ন্যায্য, ভাল, মানে।)

প্রথমত, বেসিক "প্রতি ব্যবহারকারী ইনস্টল" এর পরিবর্তে, আপনি প্রায় সর্বদা একটি ভার্চুয়ালেনভকে পছন্দ করবেন কারণ সত্যই, সম্ভবত এটিই আপনার প্রয়োজন শেষ করবে need সুতরাং আপনি ভাল এখন এটি দিয়ে শুরু করতে পারেন। এটি কীভাবে করা হয়, ঠিক "নির্ভরশীল" (উপরে পাইথন মূলমন্ত্রটি দেখুন)। আপনি যদি কনডা ব্যবহার করছেন (বেশিরভাগ ম্যাক এবং উইন্ডোজের জন্য) তবে এটি কনডা ব্যবহার করে সেট আপ করা হবে । যদি "খাঁটি" পাইথন [sic] ব্যবহার করে থাকেন তবে এটি নির্ভর করে যে কোন সংস্করণ এবং অজগরটি আপনার কী কী ব্যবহার করে, তবে ভার্চুয়ালেনভ্রাপার বেশ কার্যকর।

দ্বিতীয়ত, "কখনই সুদো" রুলের পাল্টা উদাহরণ হিসাবে আপনি পছন্দ করতে পারেন sudo -H pip install -U numpy, যা পুরোপুরি সূক্ষ্ম এমনকি এমনকি সুবিধাজনক এমনকি এটি বড় লাইব্রেরিগুলি ডাউনলোড / পুনরায় ইনস্টল / রক্ষণাবেক্ষণ এড়াতে দেয়, যেখানে আপনি কেবল চান / পৃথকভাবে প্রতিটি ভ্যুচুলেভিনে এক সংস্করণ প্রয়োজন। বড়, জনপ্রিয় ফ্রেমওয়ার্ক যেমন সাইকিট-লার্ন, নুমপি, ম্যাটপ্ল্লোব, সায়পি, প্যান্ডাস ইত্যাদির জন্য ইনস্টল করা যায় এবং একবার হয়ে যায় এবং পরিবেশের ওপরে পুনরায় ব্যবহার করা যায় । তদুপরি, আপনার স্থানীয় বন্ধুত্বপূর্ণ সিস্ট-অ্যাডমিন সম্ভবত কোনও সিস্টেমে প্রতিটি ব্যবহারকারীর জন্য এগুলি ইনস্টল করতে সক্ষম হতে পারে - এবং স্পষ্টতই তারা sudoটেনসরফ্লোয়ের মতো আরও জটিল স্থাপনাগুলির মাধ্যমে এটি করত।

এবং সর্বশেষে, আপনি যদি এমন কিছু এলোমেলো তৃতীয় পক্ষের লাইব্রেরি ইনস্টল করছেন যা (টুইটার এপিআই, পাঠ্য মুগিং, কোড ফর্ম্যাটিং, ইত্যাদি) করে তবে আমি সম্পূর্ণরূপে একমত - এটি sudo এর মাধ্যমে রুট হিসাবে ইনস্টল করবেন না। অবশ্যই, এটি আপনার বর্তমান ব্যবহারকারী হিসাবে ইনস্টল করুন। তবে কেবল মনে রাখবেন, আপনার ব্যবহারকারীর অ্যাকাউন্টে আপনার সমস্ত গুরুত্বপূর্ণ জিনিস রয়েছে


2
যেখানে "টেম্পারেড" = "কাউন্টার অনুভূতিতে আঘাত না দেওয়ার চেষ্টা করার জন্য" বিপরীতে নিমন্ত্রিত হস্ত-কব্জিকারী ফ্যাফিং বিভ্রান্তি দেখায় "। বিভ্রান্তি এড়াতে কেবল স্পষ্ট এবং স্পষ্টতই বলুন: আপনার উদাহরণগুলি সহ বেসলাইন হিসাবে এটি করার দরকার নেই। ইউনিক্স প্রকৃতপক্ষে "আপনার নিজের কনফিগারেশনটি ঝুঁকিপূর্ণ এবং ঝুঁকিপূর্ণ", এটি আক্ষরিক অর্থে একটি সি মানসিকতা, তবে সেখানে পছন্দ করার মতো, mallocযেখানে আপনার দরকার নেই সেখানে ব্যবহার করবেন না। --userপতাকা কি ওপি জন্য জিজ্ঞাসা ছিল কী করে ও কোনো বিশেষ অনুমতির প্রয়োজন। আপনি আপনার ভাল পয়েন্ট নষ্ট করছি virtualenv প্রক্রিয়া ... কিছুই "পণ্যসম্ভার-cultist" এই সম্পর্কিত যেকোন হবে।
বেনিয়ামিন আর

আমি ইতিমধ্যে আমার সাধারণ প্রতিক্রিয়া এবং মতামতগুলির সমীক্ষায় এই দৃষ্টিভঙ্গিটি অন্তর্ভুক্ত করেছি (যদি কেউ ঘনিষ্ঠভাবে পড়েন)।
মাইকেল

1

"সুডো পাইপ ইনস্টল" ব্যবহার করে আপনার ওএস বিক্রেতার দ্বারা সরবরাহ করা পাইথন সামগ্রীটি ওভাররাইট করে। যখন এটি ঘটে তখন এর দ্বারা প্রভাবিত কোনও বিক্রেতার প্যাকেজগুলি "rpm --verify" পাস করবে না এবং আপনার প্যাকেজগুলি দূষিত হবে বলে মনে হবে।

আপনার ওএস বিক্রেতা যা পরীক্ষা করেছেন এমন সিস্টেম-প্রশাসন সরঞ্জামগুলি ব্যবহার করতে চান , বা আপনি ইন্টারনেট থেকে ডাউনলোড করেছেন এমন অনির্ধারিত উপাদানগুলি ব্যবহার করা ঠিক আছে?

যখন তা নয়, পিআইপিআইতে কোনও দূষিত প্যাকেজ আপলোড হয়ে যায় ... যারা "সুডো পাইপ ইনস্টল" ব্যবহার করেন তারা সম্পূর্ণ সিস্টেমের সুযোগসুবিধিতে সেই দূষিত পেডলোড চালিয়ে যাবে। আপনি কি ওটা চান? (#Principleofleastprivilege)

যদি এটি কেবলমাত্র আপনার ল্যাপটপ, এবং আপনি কেবল কয়েকটি বিড়ালের ছবি ঝুঁকিপূর্ণ করছেন, তবে ঝুঁকি সম্ভবত কম ... তবে যদি এটি একটি বহু-ব্যবহারকারী সিস্টেম হয়, তবে ঝুঁকিটি এখন এন দ্বারা বহুগুণ বৃদ্ধি পেয়েছে যদি আপনার কাছে ডেটা থাকে যে সিস্টেমের মান, বা সিস্টেমের প্রাপ্যতা বা নির্ভরযোগ্যতার মান রয়েছে, তারপরে ঝুঁকিগুলিও বেড়ে যায়।

দয়া করে আপনার নিজের অ্যাডভেঞ্চারটি চয়ন করতে দ্বিধা বোধ করুন তবে দয়া করে আপনার পছন্দ দ্বারা প্রভাবিত হতে পারে এমন অন্যান্য ব্যবহারকারীদের অবহিত সম্মতি পান। আপনার মতো একই স্তরের ঝুঁকি নিয়ে তারা স্বাচ্ছন্দ্য বোধ করতে পারে না।


0

এই উত্তরগুলি যুক্ত করার জন্য: আমি উবুন্টু সম্পর্কে জানি না, তবে ফেডোরায় আমি আমার পক্ষে দরকারী অনেকগুলি প্যাকেজ sudo dnf install python3-numpyইনস্টল করতে ফর্ম্যাট ব্যবহার করতে সক্ষম হয়েছি। এটি অনিরাপদ হওয়ার অসুবিধা নেই (ডিস্ট্রো রেপো রক্ষণাবেক্ষণকারীদের বৈধতা প্যাকেজ রয়েছে), তবে আপনাকে সিস্টেম-ওয়াইড ইনস্টল করার অনুমতি দেয়। কেবলমাত্র ত্রুটিটি হ'ল ডিস্ট্রো রেপো সংস্করণগুলি পিআইপিআইতে প্যাকেজগুলি কিছুটা পিছিয়ে থাকতে পারে।


-1

না, এটা সঠিক। আমি এই দাবিটি বৈধ করতে পারি না। আমি সবসময় sudo -Hসঙ্গে ব্যবহার pippipকেবল অপারেটিং সিস্টেম ফাইলগুলিকেই ক্ষতি করতে পারে apt। শুধু ব্যবহার করবেন না sudoসঙ্গে pipযখন আপনি যে ব্যবহারকারীর জন্য শুধুমাত্র ইনস্টল করতে চান।


1
আপনার ব্যক্তিগত কম্পিউটারে, আপনাকে কখন pipসিস্টেম-ওয়াইড ইনস্টল করা দরকার ? আপনি যদি সিসাদমিন হন, সম্ভবত এটি অন্যরকম গল্প।
বেনিয়ামিন আর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.