ऐसे सिस्टम पर SFTP का उपयोग कैसे करें जिसमें रूट एक्सेस और ssh कुंजी आधारित प्रमाणीकरण के लिए sudo की आवश्यकता होती है?


26

मैं रूट अनुमतियों की आवश्यकता वाली फ़ाइलों को संपादित करने के लिए SFTP का उपयोग करने में सक्षम होना चाहता हूं।

मैं स्मार्ट कार्ड पर SSH कुंजी आधारित प्रमाणीकरण - rsa कुंजी का उपयोग कर रहा हूं।

अगर सिस्टम को रूट लेवल कमांड करने के लिए sudo की आवश्यकता होती है, तो मैं इसे कैसे प्राप्त कर सकता हूं?

क्या मैं केवल SFTP के लिए sudo को दरकिनार करने का एक तरीका बना सकता हूं?

वहाँ sudo और कुंजी प्रमाणीकरण रखने के लिए एक रास्ता है।

मैं उबंटू से कनेक्ट करने के लिए विंडोज़ का उपयोग कर रहा हूं। मुझे मैक के साथ उबंटू को जोड़ने के लिए भी काम करने की आवश्यकता है।

मैं समझता हूं कि सिस्टम सेवाओं को प्रशासित करने के लिए SSH टनलिंग कैसे करें। वर्तमान में, मैं सीधे रूट यूजर लॉगिन का उपयोग करता हूं, लेकिन पासवर्ड लॉगिन अक्षम है। मुझे समझ नहीं आया कि एक ही समय में sudo और SFTP का उपयोग कैसे किया जाए। यह एक गैर-रूट उपयोगकर्ता के रूप में लॉगिन की आवश्यकता के लिए सबसे अच्छा अभ्यास लगता है और फिर सूडो के उपयोग की आवश्यकता होती है क्योंकि लॉग रिकॉर्ड करेगा जो प्रत्येक कमांड के लिए बढ़ा विशेषाधिकार दिया गया था।

कुंजी आधारित प्रमाणीकरण का उपयोग करते समय क्या मुझे इसके बारे में चिंता करनी चाहिए या क्या यह सुरक्षा / लॉगिंग में एक मामूली अंतर है? ऐसा लगता है कि कुंजी आधारित प्रमाणीकरण लॉग में उपयोगकर्ता के सीरियल नंबर को रिकॉर्ड करता है, और आपके पास प्रत्येक उपयोगकर्ता की पहचान करने के लिए रूट उपयोगकर्ता के लिए कई कुंजी हो सकती हैं। यह मुझे sudo का उपयोग करने के समान ही प्रभाव प्रतीत होता है। क्या मै गलत हु?


2
मैं सीधे की-ऑथेंटिकेशन के साथ रूट अकाउंट को सीधे इस्तेमाल करूँगा और छोड़ दूंगा sudo
मार्टिन वॉन विटिच

1
"यह एक गैर-रूट उपयोगकर्ता के रूप में लॉगिन की आवश्यकता के लिए सबसे अच्छा अभ्यास लगता है और फिर सूदो के उपयोग की आवश्यकता होती है क्योंकि लॉग रिकॉर्ड करेगा जो प्रत्येक कमांड के लिए उन्नत विशेषाधिकार दिए गए थे।" - लेकिन यह बहुत लायक नहीं है, क्योंकि किसी ने रूट विशेषाधिकार हासिल कर लिया है, वैसे भी लॉग के साथ छेड़छाड़ कर सकता है।
मार्टिन वॉन विटिच

कितनी फाइलें?
निल्स

1
बस ध्यान देने के लिए नीचे sftp -s "sudo / usr / lib / opensh / sftp-server" targethost.fqdn का एक सही उत्तर है। यदि sudo को पासवर्ड की आवश्यकता होती है तो आप इस एक विशेष कमांड को nopasswd के लिए श्वेत सूची में रख सकते हैं।
मिको ओकटामा

जवाबों:


7

SFTP आपके द्वारा उपयोग किए जाने वाले खाते से प्रतिबंध के साथ, फ़ाइल संचालन के लिए एक कमांड एक्सेस है। आपको एक ही समय में sudo और SFTP का उपयोग असंभव बनाकर अधिक प्रशासनिक संचालन करने के लिए ssh का उपयोग करना चाहिए। यदि आपको एसएफटीपी का उपयोग किए बिना प्रतिबंध के पूरे डिस्क तक पहुंच की आवश्यकता है, तो इसे रूट खाते का उपयोग करके करें। वैसे भी आप एक ही समय में sftp और ssh पर रूट के साथ एक लॉगिन बना सकते हैं, निश्चित रूप से, दो अलग-अलग सत्रों का उपयोग करके।

सुरक्षा कुंजी सुरक्षा में सुधार करती हैं और कीबोर्ड इनपुट की आवश्यकता नहीं होने पर लॉगिंग को और अधिक आसान बनाती हैं। केवल लॉगिन बनाने में मदद करता है, आपके पास प्रत्येक खाता उपयोगकर्ता के लिए कई पासवर्ड हो सकते हैं और समान प्रभाव था।

संपादित करें: मैं भूल गया: यदि आप उपयोगकर्ता आईडी को 0 पर असाइन करते हैं, तो आप रूट के समान प्रभाव के साथ एक और खाता बना सकते हैं, लेकिन इसका कोई मतलब नहीं था, उसी तरह खतरनाक होना। अगर कोई व्यक्ति जड़ की तरह लॉगिन करने की कोशिश करता है, तो कुछ आपत्ति दे सकता है, लेकिन इसके अलावा, ज्यादा समझदारी नहीं थी।


12

सूडो के साथ सबसिस्टम को बुलाकर मेरे लिए काम किया।

उदाहरण के लिए एक Ubuntu होस्ट करने के लिए:

sftp -s "sudo /usr/lib/openssh/sftp-server" targethost.fqdn

2
यह केवल तभी काम करता है जब आपको sudo के पासवर्ड की आवश्यकता नहीं होती है, या यदि आपका पहले से ही sudo टिकट है और tty_ticket अक्षम है। अधिकांश आधुनिक इंस्टॉल पर, न तो डिफ़ॉल्ट है।
चीता

यह डिफ़ॉल्ट रूप से अमेज़ॅन लिनक्स सिस्टम के कनेक्शन के लिए एकदम सही है, जहां आप उपयोगकर्ता ec2-user के रूप में कनेक्ट होते हैं, और आप बिना पासवर्ड के sudo का उपयोग कर सकते हैं। +1, धन्यवाद! (ध्यान दें कि अमेज़ॅन लिनक्स पर, कमांड थोड़ा अलग है sudo /usr/libexec/openssh/sftp-server।)
MarnixKlooster ReinstateMonica

मैं एक अन्य उपयोगकर्ता के रूप में लॉगिन करने के लिए इस समाधान का बड़े पैमाने पर उपयोग करता हूं जहां प्रत्यक्ष लॉगिन अक्षम है (ऑडिट और लॉगिंग उद्देश्यों के लिए)। यह एक क्षुद्र है कि चींटी जैसे उपकरण इस उपप्रणाली को उजागर नहीं करते हैं। हालाँकि, मैं कभी भी रूट करने के लिए sudo नहीं करने की सलाह दूंगा, लेकिन किसी अन्य उपयोगकर्ता को पर्याप्त विशेषाधिकार के साथ जो आपको चाहिए। इससे निपटने के लिए समस्या यह है कि सभी यूनिक्स वातावरण समान नहीं हैं, और sftp सबसिस्टम अलग-अलग स्थानों में स्थित हो सकता है जैसा कि @MarnixKlooster
YoYo

अमेज़ॅन लिनक्स के लिए, पूरा कमांड है: "sftp -s 'sudo / usr / libexec / opensh / sftp-server' targethost.fqdn"
johntellsall

7

इससे पहले कि @MartinVonWittich ने जो सुझाव दिया उसके ऊपर आप इस गतिविधि के लिए एक समर्पित SSH कुंजी युग्म सेट कर सकते हैं और उन्हें रूट उपयोगकर्ता की /root/.ssh/authorized_keysफ़ाइल में जोड़कर उनके दायरे को केवल एक कमांड तक सीमित कर सकते हैं।

# User backup's $HOME/.ssh/authorized_keys file
command="/usr/libexec/openssh/sftp-server" ssh-dss AAAAC8ghi9ldw== backup@host

यह इस सिस्टम में मूल जोड़ी के रूप में SFTP के लिए इसी कुंजी के साथ एक और सिस्टम को रूट के रूप में अनुमति देगा। आपके syslogऔर / या secure.logफ़ाइलों में इस कनेक्शन का रिकॉर्ड अभी भी होगा (यह मानकर कि आपका डिस्ट्रो इस लॉगिंग स्तर प्रदान करता है)।

नोट: इस विधि में सर्वर जिस किसी को भी एक्सेस करता है, उसके पास ब्लैंक्स एक्सेस होता है, इसलिए इसे समझदारी से इस्तेमाल करें। बेहतर अभी भी पढ़ना जारी रखें और इस क्षमता को चेरोट के साथ मिलाएं और केवल पहुंच को पढ़ें, जड़ के रूप में विशिष्ट स्थानों तक सीमित प्रतिबंधों और लक्षित पहुंच का निर्माण करें।

चुरोट और आसानी से

यहां आपके द्वारा शोषण की जाने वाली दूसरी तकनीक एसएफटीपी कनेक्शन को सीमित करने के लिए होगी ताकि इसे रूट के रूप में विशिष्ट स्थानों में काट दिया जाए, जिसके आधार पर एसएसएच कुंजी का उपयोग किया गया था। इस U & L Q & A शीर्षक से मेरा उत्तर देखें: अधिक जानकारी के लिए " SFTP के साथ पासवर्ड-कम बैकअप को प्रतिबंधित करें "।

आप sftp-serverइसके स्विच -Rऔर के माध्यम से भी नियंत्रित कर सकते हैं -d

 -d start_directory
         specifies an alternate starting directory for users.  The pathname 
         may contain the following tokens that are expanded at runtime: %%
         is replaced by a literal '%', %h is replaced by the home directory
         of the user being authenticated, and %u is replaced by the user‐
         name of that user.  The default is to use the user's home 
         directory.  This option is useful in conjunction with the 
         sshd_config(5) ChrootDirectory option.

 -R      Places this instance of sftp-server into a read-only mode.  
         Attempts to open files for writing, as well as other operations 
         that change the state of the filesystem, will be denied.

हम्म, लेकिन sftp-serverयह किसी भी सुरक्षित नहीं करता है , यह करने के लिए आदेश को सीमित करता है? यदि कोई हमलावर इस खाते तक पहुंच प्राप्त करता है, तो वह आसानी से SFTP का उपयोग करके खुद को एक रूट शेल दे सकता है। तो सुरक्षा की दृष्टि से कमान सीमा बहुत बेकार है :)
मार्टिन वॉन विटिच

@MartinvonWittich - मेरे द्वारा शामिल किए गए उदाहरण में नहीं। वह क्षमता दिखाने के लिए अधिक था। सटीक उपयोग के मामलों को जाने बिना वास्तविक दुनिया का उदाहरण दिखाना मुश्किल है। देते हुए rootकिसी भी रूप में SFTP पहुँच सिर्फ मुसीबत खासकर जब यह chrooted नहीं है।
SLM

3

सरल दृष्टिकोण जिसका मैंने अनुसरण किया, बस फाइलों को एक स्टेज क्षेत्र ( mkdirनई निर्देशिका जहां आप सर्वर पर अनुमतियाँ हैं) पर रखा और फिर फ़ाइलों को वहां से गंतव्य तक ले जाने के लिए फिर से ssh sudo cpया sudo mv


1

मुझे इसी तरह की समस्या थी कि मैं विस्फीफ का उपयोग करना चाहता था, ताकि ज्यादातर समान मेजबानों के समूह पर कॉन्फ़िगरेशन फ़ाइलों को संपादित किया जा सके, जिसमें cssh और sudo हों और आप अपने समाधान को अपने वर्कफ़्लो में ढाल सकें।

sudoedit (sudo का हिस्सा) आपको किसी भी संपादक को एक नियमित उपयोगकर्ता के रूप में एक फाइल को संपादित करने के लिए उपयोग करने की अनुमति देता है, जिसके लिए आपके पास लिखने की अनुमति नहीं है और आप एक पर्यावरण चर के साथ संपादक को निर्दिष्ट कर सकते हैं। sudoedit फ़ाइल को कॉपी करता है, संपादक को कॉपी के नामों के साथ आमंत्रित करता है और संपादक के बाहर निकलने का इंतजार करता है, फिर संशोधित कॉपी को वापस वहीं कॉपी करता है जहां यह था। इसलिए मैंने एक 'एडिटर' बनाया जो संपादित नहीं करता, बस बाद में उपयोग के लिए फ़ाइल नोट करता है और प्रतीक्षा करता है और उस मार्कर का उपयोग करने वाले vimdiff के चारों ओर एक आवरण।

पहली फ़ाइल ~ / .bin / redit है

#!/usr/bin/perl -w
use strict;
use warnings;
use Sys::Hostname;
my $file = $ENV{HOME}.'/.var/redit/'.hostname();
sub cmkdir($){
    my $_=shift;
    mkdir $_ unless -d $_;
}
cmkdir $ENV{HOME}.'/.var/';
cmkdir $ENV{HOME}.'/.var/redit/';
foreach (@ARGV){
    my $fh;
    open $fh, '>', $file.'na' or warn;
    print {$fh} $_;
    close $fh;
    symlink $_, $file or die;
    print;
    <STDIN>;
    unlink $file or die;
    unlink $file.'na' or die;
}

दूसरा ~ / .bin / redit1 है

#!/usr/bin/perl -w
use strict;
use warnings;
use Sys::Hostname;
my $h=hostname();
@ARGV=qw(host1 host2 host3 host4) unless @ARGV;
print join " ", qw(gvimdiff), $ENV{HOME}.'/.var/redit/'.$h, map {'scp://'.$_.'/.var/redit/'.$_} grep {$_ ne $h} @ARGV;
exec qw(gvimdiff), $ENV{HOME}.'/.var/redit/'.$h, map {'scp://'.$_.'/.var/redit/'.$_} grep {$_ ne $h} @ARGV;

जिस तरह से मैं उनका उपयोग करता हूं मैं सभी चार मेजबानों के लिए एक कनेक्शन खोलने के लिए cssh का उपयोग करता हूं और फिर एक कमांड का उपयोग करता हूं EDITOR=~/.bin/redit sudoedit /etc/conf/fileऔर फिर एक अलग विंडो रन में ~/.bin/redit1, मेरे परिवर्तन करें, सहेजें और बाहर निकलें, cssh पर वापस जाएं और परिवर्तनों को करने के लिए एंटर दबाएं और बाहर निकलें sudoedit (जब तक कि मैं एक से अधिक फ़ाइल संपादित नहीं कर रहा हूं, जिस स्थिति में सूची में अगली फ़ाइल के लिए एडवांस रिडिट होता है और आप अगली फ़ाइल के लिए फिर से redit1 चलाते हैं।)

चूंकि आप जो कर रहे हैं वह कम जटिल है, केवल एक दूरस्थ होस्ट के साथ काम करने के कारण आपको redit1 की आवश्यकता नहीं है, आप केवल होस्ट पर अपने sftp संपादक को इंगित कर सकते हैं: .var / redit / host या समकक्ष।


1

मैं क्या कर रहा / रही हूँ, इसके बजाय (एस) एफ़टीपी के बजाय एससीपी का उपयोग करें, और शेल को sudo su -WinSCP में बदलें, यह उन्नत \ SCP \ Shell में है, लेकिन यह केवल scp प्रोटोकॉल के साथ काम करता है।


0

Sftp के लिए: यदि आपके पास ssh शेल sudo एक्सेस है, तो आप अपने यूज़रनेम को रूट यूज़रग्रुप में / etc / group में जोड़ सकते हैं और फिर उस ग्रुप rx अनुमतियों को उन फ़ोल्डरों को दे सकते हैं जिन्हें आप एक्सेस करना चाहते हैं।


यह मेरा पहला प्रयास था और यह काम नहीं कर रहा है। मैंने एक उपयोगकर्ता बनाया और इसे rootसमूह में जोड़ा , मैं sftp के माध्यम से कनेक्ट कर रहा हूं, लेकिन फिर भी यह मुझे '/ etc' और जैसे स्थानों से फाइल डाउनलोड करने की अनुमति नहीं देगा। मुझे यकीन नहीं है कि मैं कुछ गलत कर रहा हूं, लेकिन मुझे संदेह है कि यह जवाब काम नहीं करता है।
पेरे

0

आप सर्वर साइड पर अपनी sshd_config फ़ाइल में सम्मिलित कर सकते हैं:

Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server

इस तरह जो कोई भी NOPASSWD sudo राइट है उसे रूटेड sftp एक्सेस मिलेगा।


Subsystemआज्ञा क्या है ? उबंटू 16.04 पर, मुझे "कमांड नहीं मिली"
प्रेरित

यह कमांड नहीं है बल्कि / etc / ssh / sshd_config
János Konkoly

0

इस लाइन को / etc / ssh / sshd_config में जोड़ना मेरे लिए एक फिक्स था, और मौजूदा सबसिस्टम लाइन पर टिप्पणी करें Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server

फिर sudo systemctl sshd restart

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.