हर बार जब कोई SSH के माध्यम से लिनक्स बॉक्स में प्रवेश करता है तो निष्पादित कार्यक्रम


10

मेरे पास एक छोटा SSH सर्वर है, और मैं हर बार जब कोई SSH के माध्यम से लॉग इन करता है, चलाने के लिए एक स्क्रिप्ट लिखना चाहता हूं।

अब, मैं उसके बारे में कैसे जाऊंगा?

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

मैंने उपयोग करने के बारे में सोचा /etc/bash.bashrc, लेकिन क्या यह एक अच्छा समाधान है? उदाहरण के लिए, क्या कोई ऐसा तरीका है जिससे कोई उपयोगकर्ता अपने उपयोग को अक्षम कर सकता है, और इस प्रकार मेरी स्क्रिप्ट को अक्षम कर सकता है? यदि हाँ, तो मेरे अन्य विकल्प क्या हैं?

धन्यवाद।


यह केवल तभी काम करेगा जब उपयोगकर्ता bash का उपयोग करता है, निश्चित रूप से। यह काम नहीं करेगा अगर उपयोगकर्ता अपने स्वयं के शेल का चयन कर सकते हैं।
पाओलो एबरमैन

जवाबों:


12

उपयोग करने का तंत्र आपके लक्ष्यों पर निर्भर करता है।

यदि आप अपने उपयोगकर्ताओं के लिए कुछ सुविधाजनक या अनुकूल प्रदान करना चाहते हैं , तो /etc/profileयह उचित है कि यदि आपके सभी उपयोगकर्ता समान शेल का उपयोग करते हैं। यदि आप चाहते हैं कि कमांड्स केवल लॉग इन करते समय निष्पादित हों ssh, तो कमांड्स को अंदर रखें /etc/ssh/sshrc। (यदि आपको उपयोगकर्ताओं को अपनी ~/.ssh/rcफ़ाइल के साथ आदेशों को ओवरराइड करने में कोई आपत्ति नहीं है ।)

यदि आप किसी प्रोग्राम को निष्पादित करने के लिए किसी उपयोगकर्ता को और केवल एक प्रोग्राम के लिए बाध्य करना चाहते हैं , तो DigitalRoss द्वारा वर्णित विकल्प एक अच्छा तरीका है। (मैं व्यक्तिगत रूप से आगे एक साथ उपयोगकर्ता सीमित होगा अनिवार्य अभिगम नियंत्रण जैसे प्रणाली निकल रहा , SELinux , Tomoyo , या एक प्रकार का जहाज़ , सुनिश्चित करने के लिए कार्यक्रम के एक उपयोगकर्ता से बचने के लिए अनुमति नहीं दे सकते। मैं दस साल के लिए निकल रहा पर काम किया है ताकि है उपकरण मैं पहले चुनूंगा, लेकिन अन्य उत्कृष्ट प्रोग्रामर द्वारा लिखे गए ठीक उपकरण हैं।)ForceCommand

यदि आप चाहते हैं कि कोई भी प्रोग्राम उपयोगकर्ता को किसी भी तरह से निष्पादित और परेशान न करे , तो सबसे अच्छा तरीका है pam_exec(8)मॉड्यूल का उपयोग करना , जिसे बाईपास नहीं किया जा सकता है, शेल की परवाह किए बिना काम करता है, और उपयोगकर्ता या उपयोगकर्ता के रूप में चलाने की आसान क्षमता प्रदान करता है। प्राधिकरण के प्रदर्शन का कार्यक्रम। मैनपेज निम्नलिखित उदाहरण देता है:

   Add the following line to /etc/pam.d/passwd to rebuild the
   NIS database after each local password change:

               passwd optional pam_exec.so seteuid make -C /var/yp

   This will execute the command

       make -C /var/yp

   with effective user ID.

इस पर चलने के लिए बढ़ाया जा सकता है auth, account, password, और sessionकार्यों; शायद sessionलॉग इन पर निष्पादित करने के लिए सबसे अच्छा होगा। बस एक पंक्ति जोड़ें जैसे:

session optional pam_exec.so log=/var/log/ssh_login_cmd /usr/local/bin/ssh_cmd

अपने /etc/pam.d/sshdनियंत्रण फ़ाइल के लिए।


pam_execमॉड्यूल जैसा दिखता है वैसा ही मैं देख रहा हूं। धन्यवाद!
houbysoft

2
यदि आप जिस कमांड को निष्पादित करते हैं वह गैर शून्य निकास कोड के साथ बाहर निकलता है तो आपका लॉगिन विफल हो जाएगा और आपको लॉक किया जा सकता है। इसे हल करने का एक तरीका यह सुनिश्चित करना है कि एक अन्य 'सत्र वैकल्पिक' है जिसे एक अलग मॉड्यूल के साथ कहा जाता है जो हमेशा सफल होता है।
गफारिटी

4

OpenSSH के नए संस्करणों में ForceCommand नामक एक सर्वर सुविधा होती है जो उपयोगकर्ता को इच्छित ऑपरेशन (scp, ssh, ...) के बजाय एक स्क्रिप्ट पर नियंत्रण प्रदान करती है। पटकथा को मूल आदेश पारित किया गया है, इसलिए आपको जो कुछ भी करने की ज़रूरत है उसे करने के बाद शायद आप इसे चेन कर सकते हैं।

Sshd_config (5) से:

ForceCommand

फोर्सकॉम्ब द्वारा निर्दिष्ट कमांड के निष्पादन को मजबूर करता है, यदि क्लाइंट द्वारा आपूर्ति की गई किसी भी कमांड को अनदेखा करता है और यदि मौजूद है तो ~ / .sh / rc। -C विकल्प के साथ उपयोगकर्ता के लॉगिन शेल का उपयोग करके कमांड को लागू किया जाता है। यह शेल, कमांड या सबसिस्टम निष्पादन पर लागू होता है। यह एक मैच ब्लॉक के अंदर सबसे उपयोगी है। क्लाइंट द्वारा मूल रूप से आपूर्ति की गई कमांड SSH_ORIGINAL_COMMAND वातावरण में उपलब्ध है, जो सक्षम है। `` आंतरिक-sftp 'की एक कमांड को निर्दिष्ट करना एक इन-प्रोसेस sftp सर्वर का उपयोग करने के लिए मजबूर करेगा जिसे ChrootDirectory के साथ उपयोग करने पर किसी भी समर्थन फाइल की आवश्यकता नहीं होती है।

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


3

एक तरीका यह होगा कि आप एक syslog डेमॉन के रूप में syslog-ng का उपयोग करें और हर बार एक निश्चित लॉग एंट्री (जैसे एक सफल ssh लॉगिन) मैचों के लिए स्क्रिप्ट बैकग्राउंड को चलाने के लिए इसे कॉन्फ़िगर करें।


0

इसकी जांच करें:

http://ubuntuforums.org/showthread.php?p=9383927

मुझे विश्वास नहीं है कि इसे चलाने से अक्षम करने का एक तरीका है। क्या कोई और इसे सत्यापित कर सकता है?


यह ( /etc/profileया ~/.profile) उपयोगकर्ता के शेल पर निर्भर करता है, बस से थोड़ा कम bashrc। यदि आपके उपयोगकर्ता बैश या समान का उपयोग कर रहे हैं, तो यह ठीक है।
पाओलो एबरमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.