মূল ব্যবহারকারী ছাড়া এসএসএইচ এর মাধ্যমে রিমোট মেশিনের সমস্ত ফাইল আরএসআইএনসি করবেন?


68

দূরবর্তী মেশিনটি ব্যাকআপ করার জন্য আমার এই আদেশ রয়েছে। সমস্যাটি হ'ল সমস্ত ফাইল পড়তে এবং অনুলিপি করার জন্য আমার মূল অধিকারগুলি দরকার। সুরক্ষার কারণে আমার কাছে কোনও রুট ব্যবহারকারী সক্ষম নেই এবং sudoউবুন্টু উপায়টি ব্যবহার করুন। এটি করার জন্য আমার কি কিছু শীতল পাইপ বা কিছু দরকার?

rsync -chavzP --stats user@192.168.1.2:/ /media/backupdisk/myserverbackup/

3
rootপ্রথম স্থানটিতে কেবল অ্যাকাউন্টটি ব্যবহার করুন । sudo, বিশেষত NOPASSWDমন্তব্যে প্রস্তাবিত হিসাবে মিলিত , আপনার মেশিনের সুরক্ষা সত্যিই উন্নত করে না।
মার্টিন ভন উইট্টিচ

উত্তর:


88

আমি আপনাকে প্রথমে মূল অ্যাকাউন্টটি ব্যবহার করার পরামর্শ দিচ্ছি। আপনি যদি এটির মতো সেট আপ করেন:

  • আপনার sshd_configলক্ষ্য মেশিনে কনফিগার করুন PermitRootLogin without-password
  • ssh-keygenএসএসএইচ প্রাইভেট কী তৈরি করতে ব্যাকআপটি টানত এমন মেশিনে ব্যবহার করুন (কেবলমাত্র যদি আপনার কাছে ইতিমধ্যে এসএসএইচ কী না থাকে)। একটি পাসফ্রেজ সেট করবেন না। গুগল একটি টিউটোরিয়াল যদি আপনার এর জন্য বিশদ প্রয়োজন, প্রচুর পরিমাণে থাকা উচিত should
  • আপনার টার্গেট মেশিনের /root/.ssh/id_rsa.pubব্যাকআপ মেশিনের সামগ্রী যুক্ত করুন the/root/.ssh/authorized_keys
  • এখন আপনার ব্যাকআপ মেশিনটির পাসওয়ার্ড প্রমাণীকরণ ব্যবহার না করেই আপনার টার্গেট মেশিনে রুট অ্যাক্সেস রয়েছে।

তারপরে ফলস্বরূপ সেটআপটি বেশ নিরাপদ হওয়া উচিত।


sudo, বিশেষত NOPASSWDমন্তব্যে প্রস্তাবিত হিসাবে একত্রিত , কেবলমাত্র রুট অ্যাকাউন্টটি ব্যবহার করা ছাড়া কোনও সুরক্ষা সুবিধা নেই। উদাহরণস্বরূপ এই পরামর্শ:

আপনার /etc/sudoersফাইলটিতে নিম্নলিখিতগুলি যুক্ত করুন:rsyncuser ALL= NOPASSWD:/usr/bin/rsync

মূলত rsyncuserযাইহোক যাইহোক রুট অনুমতি দেয় । আপনি জিজ্ঞাসা:

@ মার্টিনভনউইটিচ একটি সম্পূর্ণ রুট শেল অর্জন করা সহজ rsyncযার সাথে মৃত্যুদন্ড কার্যকর করা হয়েছে sudo? দয়া করে [এম] ই [মাধ্যমে] হাঁটুন।

ভাল, সরল। প্রস্তাবিত কনফিগারেশন সহ, rsyncuserএখন rsyncপাসওয়ার্ড না জিজ্ঞাসা করেও রুট হিসাবে চালানো যেতে পারে । rsyncফাইলগুলি পরিচালনা করার জন্য একটি খুব শক্তিশালী সরঞ্জাম, সুতরাং এখন rsyncuserরুট অনুমতি নিয়ে ফাইলগুলি পরিচালনা করার জন্য একটি খুব শক্তিশালী সরঞ্জাম রয়েছে। এটির ব্যবহারের উপায় সন্ধান করতে আমার কয়েক মিনিট সময় লেগেছে (উবুন্টু ১৩.০৪-তে পরীক্ষা করা হয়েছে, প্রয়োজন নেই dash, bashকাজ করেনি):

martin@martin ~ % sudo rsync --perms --chmod u+s /bin/dash /bin/rootdash
martin@martin ~ % rootdash
# whoami
root
# touch /etc/evil
# tail -n1 /etc/shadow
dnsmasq:*:15942:0:99999:7:::

যেমন আপনি দেখতে পাচ্ছেন, আমি নিজেই একটি মূল শেল তৈরি করেছি; whoamiআমার অ্যাকাউন্টটিকে রুট হিসাবে চিহ্নিত করে, আমি ফাইলগুলি তৈরি /etcকরতে পারি এবং আমি এটি থেকে পড়তে পারি /etc/shadow। আমার শোষণটি ছিল বাইনারিগুলিতে সেটুইড বিট সেট করা dash; এটি লিনাক্সকে সর্বদা মালিকের অনুমতি সহ সেই বাইনারি চালিত করে, এই ক্ষেত্রে মূল হিসাবে।

আসল মূল থাকা ভাল কারণগুলির জন্য [প্রস্তাবিত] নয়। - redanimalwar 15 ঘন্টা আগে

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

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

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


2
সুন্দর ব্যাখ্যা। মূলত সুডো ব্যবহারের অন্য কারণটি কি এমন পরিস্থিতিতে থাকতে পারে যেখানে একাধিক লোকের সার্ভারে সিসাদমিনের ভূমিকা থাকে? এইভাবে প্রতিটি রুটের এসএসএইচ কীটি ভাগ করে নেওয়ার পরিবর্তে নিজস্ব এসএসএইচ কী ব্যবহার করতে পারে?
নাথান এস ওয়াটসন-হাই

2
@ নাথানস.ওয়াটসন-হাই আপনি সমস্ত এসএসএইচ কীগুলিকে সহজেই সহজেই couldুকিয়ে দিতে পারতেন /root/.ssh/authorized_keys, বা এমনকি বিভিন্ন বাড়ির সাথে একাধিক মূল অ্যাকাউন্ট তৈরি করতে পারতেন যাতে প্রতিটি ব্যবহারকারীর নিজস্ব শেল, বাড়ি এবং .ssh/authorized_keys:) থাকতে পারে
মার্টিন ভন উইট্টিচ

2
আপনি ssh কীগুলিকে কেবল নির্দিষ্ট কমান্ডের অনুমতি দেওয়ার ক্ষেত্রেই সীমাবদ্ধ রাখতে পারেন। অবশ্যই একটি ভাল ধারণা, যেহেতু আপনি কোনও কিছু স্বয়ংক্রিয়ভাবে চালিয়ে যাচ্ছেন, আপনি সম্ভবত কোনও পাসফ্রেজ ছাড়াই এই এসএস কীগুলি তৈরি করবেন, বা কমপক্ষে কোনও মেশিন চলমান সময়ে এগুলি অ্যাক্সেসযোগ্য থাকবে। (যার অর্থ এই মেশিনের মূলটি অন্য মেশিনে রুট অ্যাক্সেসকে মঞ্জুরি দেয়))
পিটার কর্ডস

2
সুডো রুট ব্যবহার সম্পর্কিত মার্টিনের উদ্বেগগুলি বৈধ, তবে মনে হচ্ছে sudoers ফাইলে সঠিক rsync পরামিতি নির্দিষ্ট করে এগুলি প্রশমিত করা যেতে পারে। উবুন্টুতে sudoers (5) ম্যান পেজ অনুসারে: "যদি কোনও Cmnd কমান্ড লাইন যুক্তি যুক্ত করে থাকে, তবে Cmnd এর আর্গুমেন্টগুলি অবশ্যই কমান্ড লাইনে ব্যবহারকারীর দ্বারা প্রদত্ত অনুরূপ সাথে মেলে (বা যদি আছে তবে ওয়াইল্ডকার্ডের সাথে মেলে) । " যদি sudoers ফাইল সঠিক বিকল্প (উত্স এবং গন্তব্য সহ) সহ সঠিক rsync কমান্ড নির্দিষ্ট করে, তবে মনে হয় এটি নিরাপদ হওয়া উচিত।

4
একটি বিবেচনা আগে উত্থাপিত হয়নি: sshdসাধারণত কোনও অ্যাকাউন্টে সংযোগ করার জন্য কোন অনুমোদিত কী ব্যবহার করা হয়েছিল তা লগ করে না , সুতরাং আপনি যদি bobসেই হিসাবে সংযোগ করেন তবে sudoআপনি rootসরাসরি bob'কী'-এর সাথে সংযোগ স্থাপনের চেয়ে ভাল একটি নিরীক্ষণের ট্রেইল পাবেন ।
কোডার

71

সুবিধাগুলি সহ --rsync-pathদূরবর্তী rsyncকমান্ডটি চালানোর জন্য বিকল্পটি ব্যবহার করুন sudo। আপনার কমান্ডটি যেমন হওয়া উচিত:

rsync -chavzP --rsync-path="sudo rsync" --stats user@192.168.1.2:/ .

যদি sudoআপনাকে কোনও পাসওয়ার্ডের জন্য অনুরোধ জানানো হয়, তবে আপনাকে এটিকে এড়িয়ে চলতে NOPASSWDহবে দূরবর্তী ব্যবহারকারী অ্যাকাউন্টের সাথে বিশেষাধিকার ব্যবহার করে (মূলের জন্য অর্থহীন, অন্য ব্যবহারের ক্ষেত্রে অর্থ হতে পারে), বা আপনি এটি করতে না চাইলে:

  • tty_ticketsউদাহরণস্বরূপ চালিয়ে sudo visudo -f /etc/sudoers.d/local-rsync এবং প্রবেশ করে আপনি যে ব্যবহারকারী ব্যবহার করছেন তার জন্য বিকল্পটি অক্ষম রয়েছে তা নিশ্চিত করুন :

    Defaults:your.username.for.rsync !tty_tickets
    
  • আপনি যে requirettyব্যবহারকারী ব্যবহার করছেন তার জন্য বিকল্পটি অক্ষম রয়েছে তা নিশ্চিত করুন - এটি ডিফল্টরূপে বন্ধ হতে পারে। পদ্ধতিটি উপরের মতোই।

  • sudoরিমোট মেশিনে পাসওয়ার্ড বীজ করুন , উদাহরণস্বরূপ চালিয়ে ssh -t user@192.168.1.2 sudo


1
@scai যে পাসওয়ার্ডের জন্য জিজ্ঞাসা করা হয়েছে সেটি সম্ভবত sudoপাসওয়ার্ড নয়, sshপাসওয়ার্ড নয়
umläute

2
@redanimalwar আপনার ব্যবহারকারীকে sudo /usr/bin/rsyncপাসফ্রেজ না জিজ্ঞাসা করার অনুমতি দেয় ; এটি man sudoersকীভাবে করবেন তা পরীক্ষা করুন ; আপনি এটির জন্য একটি অতিরিক্ত ব্যাকআপ ব্যবহারকারী তৈরি করতে চাইতে পারেন।
umläute

5
sudo /usr/bin/rsyncপাসওয়ার্ড হিসাবে আপনার /etc/sudoersফাইলটিতে নিম্নলিখিতটি যুক্ত করে চালানোর অনুমতি দেওয়ার জন্য : rsyncuser ALL= NOPASSWD:/usr/bin/rsyncএটি ব্যবহারকারীর সাথে আপনার ব্যবহারকারীর নামটি ব্যবহার করে আরএসসিউসার (ডেডিকেটেড ব্যাকআপ ব্যবহারকারী তৈরি করা ভাল) হবে allow
M_dk

4
@ এম_ডিকে এখন rsyncসর্বদা মূল অনুমতি রয়েছে; এই অ্যাকাউন্টে একটি সম্পূর্ণ রুট শেল অর্জন করা সম্ভবত খুব সহজ। আমি মনে করি প্রথম স্থানে আসল রুট অ্যাকাউন্টটি ব্যবহার করা ভাল।
মার্টিন ভন উইট্টিচ

1
echo "password" | somethingআমি কোনওভাবেই উত্তর দেওয়ার উত্তরটি আসলে এটিকে কখনই ব্যবহার করি নি এবং আরএসসিএনসি চালিয়ে যাওয়া সুরক্ষা সমস্যাগুলির সাথে সম্মত (এখানেও প্রস্তাবিত নয়) খারাপ। tty_ticketsআমার আসলে কী ধারণা নেই, মনে হচ্ছে একটি সুরক্ষা সমস্যা seems এটি ssh এ সোডো চালিয়ে কোনও কিছু টুইট না করে সুরক্ষিতভাবে কাজ করবে এবং তারপরে ঠিক কমান্ডটি কার্যকর করে? তবে যেহেতু আমি প্রশ্নটি স্ক্রিপ্টিং উদ্দেশ্যগুলির জন্য জিজ্ঞাসা করেছি, তাই আমি সম্পূর্ণরূপে একমত যে পিডব্লুবিহীন মূল ভিত্তিক এসএসএসই নিরাপদ এবং সঠিক কাজটি করা ছিল। আমি পরিবর্তে মার্টিনস উত্তর গ্রহণ।
redanimalwar

17

এটি করার একটি সহজ উপায় হ'ল গ্রাফিকাল ssh-askpassপ্রোগ্রামটি ব্যবহার করা sudo, sudoএটি টার্মিনালের সাথে সংযুক্ত নয় এবং নিরাপদে পাসওয়ার্ডটি প্রবেশ করার অনুমতি দেয়:

rsync -chavzPe 'ssh -X' --stats \
  --rsync-path='SUDO_ASKPASS=/usr/lib/ssh/x11-ssh-askpass sudo -A rsync' \
  user@192.168.1.2:/ .

অবশ্যই ssh-askpassপ্রোগ্রামটি অবশ্যই প্রদত্ত স্থানে ইনস্টল করা উচিত এবং আপনি যে মেশিনে কাজ করছেন তার উপর অবশ্যই একটি এক্স সেশন চালানো উচিত। ssh-askpassপ্রোগ্রামটিতে কয়েকটি ভিন্নতা রয়েছে যা কাজ করে (জিনোম / কেডিআই সংস্করণ)। এছাড়াও গ্রাফিকাল sudoরিপ্লেসমেন্ট প্রোগ্রামের মতো gksuবা kdesudoকাজ করা উচিত।


rsync --rsh='ssh -X' --rsync-path='gksudo -- rsync' user@host:/ .কাজ করে না rsync error: syntax or usage error (code 1) at main.c(1634) [server=3.1.1]। ওহ, উবুন্টু জিনোম-এসএস-অ্যাসপাস শিপ করে তবে এটি /usr/bin/ssh-askpassপরিবর্তে হয় /usr/lib/ssh/x11...। সুতরাং এটি কাজ করেছে :)
পিটার কর্ডস

1
এটি আরও ভাল সমাধানগুলির জন্য এটির অন্য প্রান্তে কোনও পুনর্গঠনের প্রয়োজন নেই - কেবল জিজ্ঞাসা ইনস্টল করা এবং এক্স ফরোয়ার্ডিং সক্ষম হওয়া দরকার, উভয়ই মোটামুটি সাধারণ হওয়া উচিত।
ডেভিড গার্ডনার

1
ইনস্টল করার পরে কবজির মতো কাজ করে ssh-askpass। আমি শুধু এর অর্থ সন্ধান করতে -chavzPeহবে, দীর্ঘ বিকল্প হিসাবে এটি বানান দুর্দান্ত হবে।
krlMLr

আমি এটি চেষ্টা করেছিলাম, তবে প্রম্পটটি রিমোট মেশিনে খোলা হচ্ছে এবং স্থানীয় মেশিনে ফরোয়ার্ড করা হচ্ছে না। এক্স 11 ফরওয়ার্ডিং প্রত্যাশিত জিজ্ঞাসা করে কাজ করছে যা আমি xeyesএসএসএইচ ব্যবহার করে যাচাই করেছি ।
জয়স বাবু

7

যদি আপনার ব্যবহারকারীর ইতিমধ্যে পাসওয়ার্ডের সাহায্যে সুরক্ষিত সুবিধাগুলি থাকে তবে আমি সেগুলি ঠিক তেমন রাখব এবং কেবল পাসওয়ার্ড ছাড়াই আরএসসিএনসি ব্যবহারের জন্য একটি স্তবক যুক্ত করব:

%admin ALL=(ALL) ALL
%admin ALL= NOPASSWD:/usr/bin/rsync 

5

আমি আজ এই সমস্যায় পড়েছি এবং কনফিগারেশন ফাইলগুলিতে সংশোধন করা বা ব্যবহারকারীর অ্যাকাউন্টগুলিতে মূল-স্তরের অনুমতি দেওয়ার প্রয়োজন ছাড়াই এটিকে সমাধান করেছি। আমার নির্দিষ্ট সেটআপটি ছিল যে Aমেশিনে fooথাকা ব্যবহারকারীকে সেই সমস্ত ব্যবহারকারীর ডিরেক্টরিগুলি fooমেশিনে মেশিনে অনুলিপি করতে barহয়েছিল backupযে ব্যবহারকারীর Aমালিকানা ছিল। (ব্যবহারকারীর Aউপর সুডো সুবিধা রয়েছে foo))

আমার ব্যবহৃত কমান্ডটি নীচে রয়েছে। এটা তোলে ব্যবহারকারী দ্বারা চালানো হয়েছিল Aমধ্যে /homeউপর ডিরেক্টরি foo

sudo rsync -avu -e "ssh -i /home/A/.ssh/id_rsa -l A"  * B:/home/backup

এটি sudo হিসাবে rsync চালায় যাতে এতে থাকা সমস্ত ব্যবহারকারীর ডিরেক্টরিগুলি fooঅ্যাক্সেস করা যায় তবে এটি barব্যবহারকারীর Aশংসাপত্রগুলি ব্যবহার করে মেশিন অ্যাক্সেস করতে ssh ব্যবহার করতে rsync কে বলে । আমার প্রয়োজনগুলি উপরের প্রশ্নের চেয়ে কিছুটা আলাদা ছিল তবে এটির সাহায্যে আমি সিস্টেমের কনফিগারেশনটি ব্যর্থ না করে আমি পরিচালনা করি এমন একটি নির্দিষ্ট মেশিনে সমস্ত ব্যবহারকারীর ডিরেক্টরিগুলির একটি দ্রুত ব্যাকআপ পেতে পারি।


2
এটা অসাধারণ. আমি -iবিকল্পটি ভুলে গেছি ssh। আপনার --rsync-path="sudo /usr/bin/rsync" যদি মেশিনে সুডো থাকে তবে আপনি ব্যবহার করতে পারেন bar। এটি তখন পড়ার মতো root@fooএবং লেখার মতো করে root@barতবে A@foo-> এর মাধ্যমে স্থানান্তর করে B@bar। ধন্যবাদ!
সিটিব্রাউন

এটি মালিককে (যেমন রুট) সংরক্ষণ করবে না, আমি ঠিক আছি?
অ্যান্ডিস

3

টার্গেট মেশিনে ডিমন হিসাবে rsync চালানো আপনি যা চান তা করতে দেয়।


1
আমি এই উত্তরটিকে অগ্রাহ্য করেছি, তবে কীভাবে rsynch ডিমন চালানো যায় এবং আপনি কীভাবে ডাব্লু / রুট অ্যাক্সেস ব্যবহার করেন সে সম্পর্কে W / কিছু ব্যাখ্যা ভাল হবে better
মাইক লিপার্ট

ডিমন হিসাবে rsync এই কেসের সাথে মেলে না, কারণ rsync রুট হিসাবে শুরু হওয়ার পরেও রুট অনুমতিগুলি ফেলে দেবে তবে সমস্ত ফাইল স্থানান্তরিত হতে পারে না।
টিজलर

2

আমার সমাধানটি ব্যবহার করা হয় --rsync-path="sudo rsync"তবে এটি পাসওয়ার্ডের জন্য জিজ্ঞাসা করে,

rsync -chavzP --stats --rsync-path="echo <SUDOPASS> | sudo -Sv && sudo rsync"  user@192.168.1.2:/ .

1
কমান্ড লাইনের ওয়ান-লাইনারে পাসওয়ার্ডগুলি রাখা ভাল ধারণা নয়; উদাহরণস্বরূপ, তারা প্রক্রিয়া ট্রিতে দৃশ্যমান হয়। আমি মাঝে মাঝে এই ধরণের স্টেটমেন্টে আসল পাসওয়ার্ডটি প্রতিস্থাপন করি $( cat my_password.txt )যা দিয়ে কিছুটা ভাল, তবে সাধারণত উভয় প্রান্তে অনুমতিগুলি কনফিগার করা এবং / অথবা এসএসএইচ কীগুলি ব্যবহার করা পছন্দ হয়, যাতে সিএলআই-তে পাসওয়ার্ডের প্রয়োজন হয় না in
জেডিএস 2'18
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.