Shared Keys .ssh / अधिकृत_की और sudo को एक साथ कैसे काम करें?


15

मैंने .ssh / अधिकृत_की सेटअप किया है और पब / निजी कुंजी का उपयोग करके नए "उपयोगकर्ता" के साथ लॉगिन करने में सक्षम हूं ... मैंने sudoers सूची में "उपयोगकर्ता" भी जोड़ा है ... मेरे पास अब जो समस्या है वह तब है मैं एक sudo कमांड निष्पादित करने की कोशिश करता हूं, जैसे कुछ सरल:

$ sudo cd /root

यह मुझे मेरे पासवर्ड के लिए संकेत देगा, जो मैं दर्ज करता हूं, लेकिन यह काम नहीं करता है (मैं जिस निजी कुंजी पासवर्ड का उपयोग कर रहा हूं वह सेट है)

साथ ही, मैंने उपयोगकर्ता के पासवर्ड का उपयोग करके अक्षम कर दिया है

$ passwd -l user

मुझे किसकी याद आ रही है?

कहीं मेरी शुरुआती टिप्पणी को गलत समझा जा रहा है ...

मैं अपने सिस्टम को सख्त करने की कोशिश कर रहा हूं ... अंतिम लक्ष्य लॉग / बनाम सरल पासवर्ड प्रमाणीकरण करने के लिए पब / निजी कुंजी का उपयोग करना है। मुझे पता चल गया है कि कैसे अधिकृत_की फ़ाइल के माध्यम से सभी को सेट करना है।

इसके अतिरिक्त मैं मूल रूप से सर्वर लॉगिन को रूट खाते के माध्यम से रोकूंगा। लेकिन इससे पहले कि मैं ऐसा करता हूं कि मुझे एक दूसरे उपयोगकर्ता के लिए काम करने के लिए sudo की जरूरत है (वह उपयोगकर्ता जिसे मैं हर समय सिस्टम में लॉगिन करूंगा)।

इस दूसरे उपयोगकर्ता के लिए मैं नियमित पासवर्ड लॉगिन को रोकना चाहता हूं और केवल पब / निजी कुंजी लॉगिन को बाध्य करता हूं, अगर मैं उपयोगकर्ता को "पासवार्ड -l उपयोगकर्ता ... के माध्यम से लॉक नहीं करता हूं ... तो यदि मैं कुंजी का उपयोग नहीं करता हूं, तो भी मैं कर सकता हूं एक नियमित पासवर्ड के साथ सर्वर में जाओ।

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


संपादित करें: ठीक है, मुझे लगता है कि मुझे मिल गया है (समाधान):

1) मैंने समायोजित / etc / ssh / sshd_config और सेट किया है PasswordAuthentication no यह ssh पासवर्ड लॉगिन को रोकेगा (ऐसा करने से पहले एक कामकाजी सार्वजनिक / निजी कुंजी सेटअप सुनिश्चित करें)

2) मैंने sudoers सूची को समायोजित किया है visudoऔर जोड़ा है

root      ALL=(ALL) ALL
dimas     ALL=(ALL) NOPASSWD: ALL

3) रूट एकमात्र उपयोगकर्ता खाता है जिसमें एक पासवर्ड होगा, मैं दो उपयोगकर्ता खातों "डिमास" और "शेरी" के साथ परीक्षण कर रहा हूं जिसमें पासवर्ड सेट नहीं है (पासवर्ड रिक्त हैं, passwd -d user)

उपरोक्त अनिवार्य रूप से सभी को पासवर्ड के साथ सिस्टम में प्रवेश करने से रोकता है (एक सार्वजनिक / निजी कुंजी सेटअप होनी चाहिए)।

इसके अतिरिक्त sudoers सूची में उपयोगकर्ताओं के पास व्यवस्थापक क्षमताएं हैं। वे suविभिन्न खातों में भी कर सकते हैं। तो मूल रूप से "डिमास" कर सकते हैं sudo su sherry, हालांकि "डिमास नहीं कर सकते हैं su sherry। इसी तरह सुडोलर्स सूची में कोई भी उपयोगकर्ता नहीं कर सकता है su userया नहीं कर सकता है sudo su user

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

जवाबों:


10

sshऔर sudoएक दूसरे से कोई लेना देना नहीं है। sshप्रमाणीकरण विधि सेट करना कुछ भी करने वाला नहीं है sudo। पासवर्ड sudoसमझने की जरूरत नहीं है ssh

passwd -lउपयोगकर्ता का खाता लॉक करने का इरादा है, ताकि वह पासवर्ड द्वारा प्रमाणित नहीं कर सके। आप जो चाहते हैं उसके विपरीत बहुत अधिक है, जो उपयोगकर्ता को पासवर्ड के बिना प्रमाणित करने दे रहा है।

मुझे लगता है कि आप जो चाहते हैं वह आपकी फ़ाइलNOPASSWD में विकल्प है ।sudoers

(पुनश्च, इसका कोई कारण नहीं है कि कोई cdकमांड के साथ चल रहा हो sudocdमाता-पिता की प्रक्रियाओं का प्रचार नहीं करता है, इसलिए जैसे ही sudoबाहर निकलता है, आप वापस आ जाते हैं जहां आपने शुरू किया था।)

संपादित करें: आप कहते हैं कि आप खाता पासवर्ड लॉक करना चाहते हैं और सार्वजनिक / निजी कुंजी समझने के लिए sudo चाहते हैं। क्षमा करें, sudo ssh कुंजियों का उपयोग करने वाला नहीं है। यह ssh नहीं है। यदि आप नहीं चाहते हैं कि उपयोगकर्ता अपने पासवर्ड के साथ लॉग इन कर सकें, तो मुझे लगता है कि उत्तर ssh पासवर्ड प्रमाणीकरण को अक्षम करना है , न कि खाते को लॉक करना। फिर आप उपयोगकर्ताओं के लिए एक पासवर्ड रख सकते हैं, जिसे वे ssh अधिकृत_की के माध्यम से लॉग इन करने के बाद sudo में उपयोग कर सकते हैं।


ठीक है, लेकिन क्या यह तथ्य है कि उपयोगकर्ता के पास कोई पासवर्ड नहीं है: पासवार्ड -l उपयोगकर्ता ... कारण सूडो कमांड काम नहीं करता है?
किसानपुलिस

@farinspace हां, मैं प्रश्न को बेहतर ढंग से समझता हूं और अपनी टिप्पणियों का पर्याप्त विस्तार किया है। passwd -lपासवर्ड को इस अर्थ में हटा देता है कि खाता LOCKED है - यानी कोई भी पासवर्ड काम नहीं करेगा। आप sudo में पासवर्ड प्रमाणीकरण बंद करना चाहते हैं।
कॉन्सलेयर

यह तर्क कैसे है: sudoers फ़ाइल में पासवर्ड बंद करना अभी भी सुरक्षित होगा, क्योंकि सिस्टम को पब / निजी कुंजी लॉगिन के माध्यम से कठोर किया जाता है ... और फिर केवल व्यवस्थापक ही उपयोगकर्ताओं को sudoers सूची में जोड़ पाएंगे
farinspace

जब एक निजी कुंजी का उपयोग करना इसके लिए एक पासवर्ड सेट करने के लिए विशिष्ट है, या क्या यह पर्याप्त रूप से सुरक्षित है बस इसे सेट नहीं करना है और सर्वर लॉगिन पर किसी भी पासवर्ड प्रविष्टि को बायपास करना है
farinspace

4
@ उत्तर यह उत्तर 100% सटीक नहीं है। जैसा कि आप नीचे देख सकते हैं, sudo को ssh ऑथेंटिकेशन के संबंध में कॉन्फ़िगर किया जा सकता है।
आंद्रे डी मिरांडा

18

आप जो करना चाहते हैं वह संभव है लेकिन इसके लिए कुछ अनुभव की आवश्यकता होगी क्योंकि आपको एक PAM मॉड्यूल को संकलित करना होगा जिसे pam-ssh-agent-schem कहा जाता है ।

प्रक्रिया यथोचित सरल है:

$ sudo aptitude install libssl-dev libpam0g-dev build-essential checkinstall
$ wget "http://downloads.sourceforge.net/project/pamsshagentauth/pam_ssh_agent_auth/v0.9.3/pam_ssh_agent_auth-0.9.3.tar.bz2"
$ tar -xjvf pam_ssh_agent_auth-0.9.3.tar.bz2
$ cd pam_ssh_agent_auth-0.9.3

$ ./configure --libexecdir=/lib/security --with-mantype=man

$ make
$ sudo checkinstall

Sudo कॉन्फ़िगरेशन संपादित करें:

$ sudo visudo

निम्नलिखित जोड़ें:

Defaults env_keep += SSH_AUTH_SOCK

Sudo PAM सेटिंग बदलकर जारी रखें:

$ sudo vi /etc/pam.d/sudo

जोड़ें (@include लाइनों के ऊपर):

**auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys**
@include common-auth
@include common-account


4
यह स्वीकृत उत्तर होना चाहिए
क्रिस्टोफर मोनसेंटो

1
ये निर्देश (विशेषकर /etc/pam.d/sudoनिर्देश) वर्तमान उबंटू संस्करणों के लिए पुराने हैं। मैंने अपने उत्तर में अद्यतन निर्देश प्रदान किए हैं।
क्रिस पिक

4

आंद्रे डी मिरांडा का जवाब pam_ssh_agent_auth का उपयोग करके एक अच्छा समाधान प्रदान करता है , लेकिन भागों पुराना है। /etc/pam.d/sudoकई वर्तमान लिनक्स संस्करणों का उपयोग करते समय विशेष रूप से निर्देश।

यदि आप उबंटू 12.04 सटीक चला रहे हैं, तो मैंने वास्तव में एक ppa_ssh_agent_auth एक ppa : ppa: cpick / pam-ssh-agent- dif को प्रदान करके प्रक्रिया को सरल बनाया है ।

आप पैकेज को चलाकर स्थापित कर सकते हैं:

sudo add-apt-repository ppa:cpick/pam-ssh-agent-auth
sudo apt-get install pam-ssh-agent-auth

स्थापना के बाद, यदि आप इस PAM मॉड्यूल को sudo के साथ उपयोग करना चाहते हैं, तो आपको sudo की सेटिंग्स और PAM कॉन्फ़िगरेशन को कॉन्फ़िगर करना होगा, Ubuntu 12.04 में आप निम्न दो फ़ाइलों को बनाकर ऐसा कर सकते हैं:

/etc/sudoers.d/pam-ssh-agent-auth:

Defaults    env_keep+="SSH_AUTH_SOCK"

/etc/pam.d/sudo:

ent#%PAM-1.0

auth       required   pam_env.so readenv=1 user_readenv=0
auth       required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
auth       sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys
@include common-auth
@include common-account
@include common-session-noninteractive

यदि आप शेफ का उपयोग कर रहे हैं, तो उपरोक्त प्रक्रिया मेरी कुकबुक के साथ स्वचालित हो सकती है, जो निम्न दो स्थानों पर पाई जाती है:
https://github.com/cpick/pam-ssh-agent-auth
http: //community.opscode .com / cookbooks / pam-ssh-agent-Cort

कुकबुक की filesनिर्देशिका में उबंटू 12.04 सटीक के साथ उस काम के ऊपर वर्णित फाइलें /etc/pam.d/sudoऔर /etc/sudoers.d/pam-ssh-agent-authफाइलें हैं और अन्य संस्करणों / डिस्ट्रो का उपयोग करते समय एक उपयोगी प्रारंभिक बिंदु होना चाहिए।


-1

जिस तरह से मैं एक पासवर्ड दर्ज करके बायपास करना जानता हूं, वह आपकी sudoersफ़ाइल में अक्षम है ।

कुछ इस तरह देगा rootऔर बिना पासवर्ड के wheel पूर्ण पहुंच के सभी सदस्य :

root    ALL=(ALL)   NOPASSWD: ALL
%wheel  ALL=(ALL)   NOPASSWD: ALL

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


मुझे पासवर्ड का उपयोग करने में कोई आपत्ति नहीं है, ऐसा लगता है कि समस्या के बाद मैं उपयोगकर्ता पासवर्ड को निष्क्रिय कर रहा हूं: पासवार्ड -l उपयोगकर्ता ... मैं अभी भी पब / निजी कुंजी के माध्यम से सिस्टम में प्रवेश कर सकता हूं (निजी कुंजी में एक सुरक्षित पासवर्ड है) , जब मैं एक sudo करता हूं तो यह पासवर्ड मांगता है, लेकिन यह उस निजी कुंजी से पासवर्ड नहीं है जो ऐसा लगता है, जहां यह पासवर्ड सेट है यदि ive इसे उपयोगकर्ता के लिए अक्षम कर दिया है (मैं बल्कि ssystem पर पासवर्ड बनाए रखने से बचने की कोशिश करूंगा और निजी कुंजी पर)
Farinspace

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

आपको दूरस्थ सिस्टम पर खाते को फिर से सक्षम करना होगा और फिर पासवर्ड सेट करना होगा। किसी भी तरह से, आपको निश्चित रूप से दोनों मशीनों पर पासवर्ड बनाए रखना चाहिए। यदि गलती के मामले में स्थानीय लॉगिन के अलावा कोई अन्य कारण नहीं है।
जैक एम।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.