মূলের পরিবর্তে তৈরি ফাইলগুলির জন্য আমার ব্যবহারকারী নামটি সেট করতে সুডোকে বলার উপায় আছে কি?


19

আমি যদি এটি করি sudo cp /etc/foo.txt ~/foo.txtতবে নতুন ফাইলটি rootমালিক হিসাবে তৈরি করা হবে ।

এই মুহূর্তে, আমি শেষ দুটি কমান্ড ( lsব্যবহারের ক্ষেত্রে স্পষ্ট করার জন্য) ব্যবহার করা ছাড়া অন্য কোনও উপায় দেখতে পাচ্ছি না :

belmin@server1$ ls /etc/foo.txt
>  -rw------- 1 root root 3848 Mar  6 20:35 /etc/foo.txt
>
belmin@server1$ sudo cp /etc/foo.txt ~/foo.txt
belmin@server1$ sudo chown belmin: $_

আমি পছন্দ করবো:

  1. এক sudoকমান্ডে এটি করা।
  2. আমার বর্তমান ব্যবহারকারীর (সম্ভবত কোনও ভেরিয়েবল ব্যবহার করছেন?) নির্দিষ্ট করার দরকার নেই।

sudo cat /etc/foo.txt > ~/foo.txt। ফাইলগুলি কোনও কারণে কেবল রুট দ্বারা পঠনযোগ্য হতে পারে তাই নন-রুট ব্যবহারকারীদের দ্বারা অনুলিপিগুলি পঠনযোগ্য করার সময় সেই কারণটি মনে রাখা উচিত।
jw013

উত্তর:


32

এর installপরিবর্তে ব্যবহার করুন cp:

sudo install -o belmin /etc/foo.txt ~/foo.txt

সচেতন ছিল না install। ধন্যবাদ.
বেলমিন ফার্নান্দেজ

4
@ বেলমিন ফার্নান্দেজ: আপনার দ্বিতীয় পছন্দটি সামঞ্জস্য করার জন্য:sudo install -o "$USER" /etc/foo.txt ~/foo.txt
পরবর্তী নির্দেশ না দেওয়া পর্যন্ত

14

একটি সঙ্গে POSIX সামঞ্জস্যপূর্ণcp আপনি যা করতে পারেন sudo cp -p foo barথেকে নিম্নলিখিত ফাইল মেটাডাটা সংরক্ষণ যখন অনুলিপি:

  • প্রবেশাধিকার সময়
  • সংশোধন সময়
  • ব্যবহারকারী আইডি
  • গ্রুপ আইডি
  • মোড

আপনি যদি কোনও আলাদা ব্যবহারকারী সেট করতে চান তবে জেনিডি এর সমাধানটি সেরা।


2
এটি তখনই কার্যকর হয় যখন টার্গেট ব্যবহারকারীর দ্বারা মূল ফাইলটির মালিকানা থাকে।
জেনি ডি

4
আমি অনুমান করি যে সুডো চালাচ্ছে সেই ব্যক্তির মূল ফাইলটি নেই, অন্যথায় তাদের সুডো ব্যবহার করার দরকার নেই।
এইটবিটটনি

@EightBitTony আপনার sudoনিজের কোনও ফাইল অনুলিপি করার দরকার নেই । সর্বোপরি আপনার কেবল পড়ার অ্যাক্সেস দরকার ।
l0b0

হ্যাঁ, আমার পক্ষ থেকে ভুল টাইপ করুন - তবে আমি ধরেই নিয়েছি যে প্রশ্নে থাকা ইউজার আইডি ফাইলটি পড়তে পারে না, কারণ তাদের এখনও সুডোর দরকার হয় না। সুতরাং আমাদের ধরে নিতে হবে যে চূড়ান্ত ফাইলটির মালিকানাধীন ব্যবহারকারী আইডিটির মূল ফাইলটিতে কোনও অ্যাক্সেস নেই। যেভাবেই হোক, এটি কোনও সুডো 'সমস্যা' নয়। আপনার উত্তরটি এমন কোনও মালিককে সংরক্ষণের পরামর্শ দেয় যা আমাদের ধরে নিতে হবে এটি পছন্দসই নয়।
এইটবিটটনি

2
তাত্ত্বিকভাবে এটি সম্ভব যে ফাইলটি লক্ষ্য ব্যবহারকারীর মালিকানাধীন তবে এমন একটি ডিরেক্টরিতে অবস্থিত যা লক্ষ্য ব্যবহারকারীর প্রবেশের অনুমতি নেই। তবে এটি খুব সম্ভবত হয় না :-)
জেনি ডি

8

যদি তুমি করো:

sudo cat /etc/foo.txt > ~/foo.txt

তারপরে ~/foo.txtশেলটি আপনার মতো খোলা থাকবে (সুতরাং আপনার শংসাপত্রগুলির সাহায্যে তৈরি করা sudoহবে ) এবং তারপরে এটি পুনর্নির্দেশের স্টাডআউট দিয়ে সম্পাদন করা হবে।

শেষ পর্যন্ত, ফাইলটি আপনার নিজের মালিকানাধীন থাকবে।

এই ধরণের পদ্ধতির দ্বারা করা জিনিসগুলি সীমাবদ্ধ করতে সহায়তা করে root। এখানে, rootখোলার জন্য কেবল তার অধিকার ব্যবহার করা হয়েছে /etc/foo.txt, এটি এমনটি করে না যা সম্ভাব্য ক্ষতিকারক (লেখার জন্য একটি ফাইল খুলুন, ~/foo.txtউদাহরণস্বরূপ একটি সিমলিংক থাকলে খারাপ পরিণতি হতে পারে )।


2
এটি ধরে নিয়েছে যে ব্যবহারকারী টার্গেট ডিরেক্টরিতে লিখতে পারেন।
জোহান

3

ব্যবহার করে sudo, আপনি অন্য ব্যবহারকারীর কাছে স্যুইচ করুন। কমান্ডের পুরো পয়েন্ট এটি। আমি ধরে নিলাম প্রথম ফাইলে আপনার কোনও নিয়মিত অ্যাক্সেস নেই, তাই অ্যাক্সেস পাওয়ার জন্য আপনাকে অন্য ব্যবহারকারী হতে হবে ( rootএই ক্ষেত্রে)।

sudoএটি পরিচালনা করার জন্য নিজের পক্ষে কোনও উপায় নেই , যেহেতু সমস্ত sudoকিছু আপনাকে কমান্ডটি কার্যকর করতে অন্য ব্যবহারকারীর কাছে স্যুইচ করছে।

তোমার দরকার হবে

  1. দুটি কমান্ড ব্যবহার করতে থাকুন (বা একটি যৌগিক কমান্ড)
  2. অন্য একটি কমান্ড সন্ধান করুন (যেমন ইনস্টল, অন্য উত্তরে দেখা যায়)
  3. বা একটি স্ক্রিপ্ট লিখুন এবং এর মাধ্যমে সেই স্ক্রিপ্টটি কার্যকর করুন sudo

1

সুডো একটি পরিবেশ পরিবর্তনশীল "SUDO_USER" তৈরি করে যা আপনি লগইন হওয়া ব্যবহারকারী (আসলে সুডো কে চালিয়েছিলেন) তা খুঁজে পেতে ব্যবহার করতে পারেন।

আপনাকে সুডোটকে মূলের কাছে ধরে নিয়ে যাওয়া (অন্য ব্যবহারকারীদের কাছেও সুডোর ব্যবহার সম্ভব) আপনি নিম্নলিখিত দুটি পদক্ষেপ স্বয়ংক্রিয় করতে স্ক্রিপ্ট লিখতে পারেন।

cp source target
chown $SUDO_USER target

(আপনি যদি কোনও রুটবিহীন ব্যবহারকারীর সাথে sudo করেন তবে এটি কাজ করবে না কারণ কেবল মূল ফাইলগুলি দিতে পারে))

এটি স্বয়ংক্রিয়ভাবে কাজ করা কিছুটা কাজ হবে। যদি উত্স কোনও একক ফাইল এবং লক্ষ্য কোনও ডিরেক্টরি না হয় তবে আপনার কাজ শেষ হয়ে যায়। আমি ধরে নিয়েছি যে আপনি প্রশ্নটি জিজ্ঞাসা করেছেন কারণ আরও জটিল পরিস্থিতিতে সমস্যাটি কেবল একটি আসল সমস্যা, যেমন: কিছু করার সময়:

cp /path/source/some*files /path/target/directory/

কোন ফাইলগুলি এবং কোন ডিরেক্টরিগুলি পাস করা হয়েছে, কোনটি প্রাক-বিদ্যমান ছিল, কোনগুলি আসলে ওভাররাইট করা হয়েছিল এবং কেবলমাত্র সফলভাবে অনুলিপি করা ফাইলগুলির মালিকানা পরিবর্তন করার জন্য একটি জটিল স্ক্রিপ্ট।

এই কাজ ইতিমধ্যে সম্পন্ন হয়েছে। আপনি ব্যবহার করতে পারেন cpio- sudo থেকে রুট করার পরে ফাইলগুলি অনুলিপি করতে সিপিও ব্যবহার করুন। সিপিওর অনুলিপি করার জন্য ফাইলগুলির একটি তালিকা প্রয়োজন তাই এটি একটি দুই ধাপের প্রক্রিয়া। নীচে আমি lsঅনুলিপি করার জন্য ফাইলগুলির তালিকা তৈরি করতে ব্যবহার করি ।

ls /path/source/some*files | cpio -pdm --owner $SUDO_USER /path/target/directory/

এর -pdmঅর্থ "পাসথ্রু মোড, প্রয়োজন অনুযায়ী ডিরেক্টরি তৈরি করুন, ফাইল পরিবর্তনের সময় বজায় রাখুন"

--owner $SUDO_USER" নির্দিষ্ট ব্যবহারকারীদের ফাইলগুলির মালিক হতে পারে।

চূড়ান্ত অপারেন্ড হ'ল ডিরেক্টরিটি যেখানে সিপিওতে অবশ্যই ফাইলগুলি সঞ্চয় করতে পারে।

সিপিও বিস্ময়করতা সম্পর্কে আরও জানতে, এখানে সিপিআইও ম্যানুয়াল পৃষ্ঠাতে যান

একক sudo কমান্ডে এটি করাও সম্ভব। ধরে নিই যে আপনার ব্যবহারকারীর ফাইলগুলি অ্যাক্সেস করার অধিকার রয়েছে, কেবল সিপিও অংশের জন্য sudo ব্যবহার করুন, এটির মতো:

ls /path/source/some*files | cpio -pdm --owner $USER /path/target/directory/

উপরের ক্ষেত্রে আমি $ SUDO_USER এর স্থলে $ ব্যবহারকারী ব্যবহার করছি কারণ সুডো চলার আগে এটি মূল্যায়ন করা হয়। বিকল্পভাবে, যদি ব্যবহারকারীদের ফাইলগুলি তালিকাতে অ্যাক্সেস না থাকে তবে এটি একটি মোড়ক স্ক্রিপ্টে রাখুন এবং র‍্যাপারটি চালানোর জন্য sudo ব্যবহার করুন। এটি আরও শক্ত হয়ে উঠতে পারে, তবে সহজতম ক্ষেত্রে র‌্যাপারটি দুটি যুক্তি, একটি উত্স এবং একটি লক্ষ্য নিয়ে নেয়।

এটি "cp_as_user" র‍্যাপারে যায়:

ls $1 | cpio -pdm --owner $SUDO_USER $2

তারপরে এভাবে মোড়ক ব্যবহার করুন:

sudo cp_as_user "/ path / to / কিছু * ফাইল" / পাথ / থেকে / টার্গেট / ডিরেক্টরি

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