यद्यपि यह सवाल एक व्यक्ति अपने स्वयं के सत्रों को रिकॉर्ड करना चाहता था, लेकिन एक वैकल्पिक उपयोग मामला एक सिस्टम प्रशासक हो सकता है जो विभिन्न उपयोगकर्ताओं को क्या कर रहा है, इसका ट्रैक रखना चाहता है।
मुझे डर script
है कि सिस्टम-वाइड के अंदर चलने bashrc
की स्थिति में उपयुक्त नहीं हो सकता है जब मशीन के उपयोगकर्ता अपने सत्र से बनी रिकॉर्डिंग के लिए अनिच्छुक हों।
जो उपयोगकर्ता गुप्त रहना चाहते हैं, वे sshd को एक अलग शेल खोलने के लिए कहकर लॉगिंग को बायपास कर सकते हैं (उदा zsh
) या लोड होने से bash --rcfile ___
रोकने के लिए चलाएँ /etc/bash.bashrc
।
एक वैकल्पिक दृष्टिकोण
2008 ( संग्रहीत ) से यह गाइड उपयोगकर्ता को ssh के साथ लॉग इन करने के लिए चलने के लिए बाध्य करने के लिए एक अलग विधि का उपयोग करता है script
, जिसके लिए उपयोगकर्ताओं को सार्वजनिक / निजी कुंजी के साथ लॉग इन करना पड़ता है ।
यह .ssh/authorized_keys
कुंजी के सामने उपयोगकर्ता की फ़ाइल में एक स्क्रिप्ट जोड़कर किया जाता है :
command="/usr/local/sbin/log-session" ssh-dss AAAAB3NzaC1kc3MAAAEBAMKr1HxJz.....
तब log-session
( संग्रहीत ) स्क्रिप्ट यह तय करती है कि /usr/bin/script
इस उपयोगकर्ता के सत्र को लॉग करने के लिए चलाया जाए या नहीं ।
exec script -a -f -q -c "$SSH_ORIGINAL_COMMAND" $LOGFILE
उपयोगकर्ता को अतिरिक्त कमांड को हटाने से रोकने के लिए, व्यवस्थापक को उपयोगकर्ता की authorized_keys
फ़ाइल का स्वामित्व संभालने की आवश्यकता होगी ।
chown root:root ~user/.ssh/authorized_keys
दुर्भाग्य से, इसका मतलब है कि उपयोगकर्ता किसी भी अतिरिक्त कुंजी को अपने आप को जोड़ने में सक्षम नहीं होगा / या अधिक महत्वपूर्ण रूप से मौजूदा कुंजी को रद्द कर सकता है यदि यह समझौता किया जाता है, जो आदर्श से बहुत दूर है।
चेतावनियां
यह sshd के डिफ़ॉल्ट कॉन्फ़िगरेशन के लिए उपयोगकर्ताओं को अपने ssh लॉगिन पर SFTP करने की अनुमति देने के लिए आम है। यह उपयोगकर्ताओं को लॉग इन किए बिना फ़ाइलों को संपादित करने का एक तरीका प्रदान करता है। यदि व्यवस्थापक नहीं चाहता है कि उपयोगकर्ता ऐसा करने में सक्षम हों, तो उसे या तो SFTP के लिए कुछ लॉगिंग को सक्षम करना चाहिए, या सेवा को अक्षम करना चाहिए। हालांकि तब भी, उपयोगकर्ता अभी भी अपने टर्मिनल में इस तरह से कुछ चलाकर फाइलों में अनदेखा बदलाव कर सकते हैं:
curl "http://users.own.server/server/new_data" > existing_file
कॉपी-ऑन-राइट फाइलसिस्टम का उपयोग करके उस तरह के परिवर्तनों की निगरानी करना संभव हो सकता है जो सभी फ़ाइल इतिहास को रिकॉर्ड करता है।
लेकिन एक समान ट्रिक उपयोगकर्ता को लॉग इन किए बिना कमांड निष्पादित करने की अनुमति देगा:
curl "http://users.own.server/server/secret_commands_824" | sh
मैं उस के लिए कोई आसान समाधान नहीं जानता। संभावनाएं हो सकती हैं:
- सभी नेटवर्क डेटा को लॉग करना (और बाद में इसे अनअंग्लिंग करना)।
- सभी सिस्टम कॉल लॉगिंग।
ऑडिट के साथ इस तरह की बात संभव हो सकती है ।
लेकिन वैसे भी...
यह संभावना नहीं है कि लॉगिंग उपयोगकर्ता सत्र प्रशासकों के लिए कोई वास्तविक सुरक्षा प्रदान करता है। डिफ़ॉल्ट रूप से एक उपयोगकर्ता केवल अपनी फ़ाइलों में हेरफेर कर सकता है, और सिस्टम को नुकसान नहीं पहुंचा सकता है। यदि दुर्भावनापूर्ण उपयोगकर्ता विशेषाधिकारों को बढ़ाने का प्रबंधन करता है, तो वह लॉगिंग को अक्षम कर सकता है और लॉग को हटा सकता है (जब तक कि व्यवस्थापक ने लॉग को अलग मशीन पर संग्रहीत करने के लिए कॉन्फ़िगर नहीं किया है, केवल परिशिष्ट में)।
व्यवस्थापक जो स्वचालित रूप से उपयोगकर्ता सत्र लॉग करते हैं, संभवतः उपयोगकर्ताओं को सूचित करना चाहिए कि यह किया जा रहा है । कुछ न्यायालयों में, डेटा संग्रह का यह रूप डेटा या गोपनीयता कानूनों का उल्लंघन कर सकता है । और बहुत कम से कम, उपयोगकर्ताओं के लिए उन्हें जागरूक करना सम्मानजनक होगा।
यह अधिक संभावना है कि एक व्यवस्थापक sudo
उपयोगकर्ताओं के सत्रों को लॉग इन करने में रुचि रखेगा । शायद एक अलग जवाब में, या वास्तव में एक अलग सवाल से निपटा जा सकता है।
exec
लाइन की शुरुआत में पूर्वसर्ग करें । इसेscript -f
उसी शेल पीआईडी में शुरू करना चाहिए ।