আমি কি কোনও সার্ভারে সমস্ত ব্যবহারকারীর জুড়ে বাশের ইতিহাস অনুসন্ধান করতে পারি?


20

আমি লিনাক্স সার্ভারে একাধিক ব্যবহারকারীর অ্যাকাউন্টে চালিত সমস্ত বাশ কমান্ড দেখতে চাই। নির্দিষ্ট ডিস্ট্রিবিউশনটি আমি ব্যবহার করছি সেন্টোস 5.7। কোনও সার্ভারে .bash_history ফাইলগুলি বিশ্বব্যাপী অনুসন্ধান করার কোনও উপায় আছে বা এটি আরও বাড়ির অভ্যন্তরীণ প্রক্রিয়া হবে locate | cat | grep? (আমি কেবল এটি টাইপ করে কাঁপছি)

উত্তর:


25

getentহোম ডিরেক্টরি গণনা করতে ব্যবহার করুন ।

getent passwd |
cut -d : -f 6 |
sed 's:$:/.bash_history:' |
xargs -d '\n' grep -s -H -e "$pattern" 

যদি আপনার হোম ডিরেক্টরিগুলি একটি সুপরিচিত স্থানে থাকে তবে এটি হিসাবে সহজ হতে পারে

grep -e "$pattern" /home/*/.bash_history

অবশ্যই, যদি কোনও ব্যবহারকারী আলাদা শেল বা এর আলাদা মান ব্যবহার করে তবে এটি HISTFILEআপনাকে বেশি কিছু বলবে না। অথবা এটি আপনাকে কমান্ডগুলি সম্পর্কে জানাবে না যা শেলের মাধ্যমে কার্যকর করা হয়নি, বা ব্যবহারকারীর প্রথমদিকে কিছু ব্যবহারকারী ডিরেক্টরিতে থাকা আলেসেস এবং ফাংশন এবং এখন-সরানো বাহ্যিক কমান্ডগুলি সম্পর্কে বলে $PATH। আপনি যদি যা জানতে চান ব্যবহারকারীরা কি চালাচ্ছে তা যদি আপনার জানতে চান তবে আপনার অ্যাকাউন্টিং প্রক্রিয়াজাতকরণ বা কোনও ফ্যানসিয়ার অডিটিং সিস্টেম প্রয়োজন; আমার কম্পিউটারে নজরদারি ক্রিয়াকলাপ দেখুন , প্রক্রিয়া শেষ হওয়ার পরে কতক্ষণ চললো তা কীভাবে পরীক্ষা করবেন?


পরিবর্তে প্রক্রিয়া অ্যাকাউন্টিং পরামর্শ দেওয়ার জন্য +1। ইতিহাসের ফাইলগুলি ব্যবহারকারীর সুবিধার্থে সত্যই এবং কোনও ধরণের লগিংয়ের জন্য এগুলিকে যথেষ্ট বোকা-প্রমাণ তৈরি করার সহজ উপায় নেই।
jw013

@ jw013 হ্যাঁ, শেল ইতিহাসের সাথে সম্পাদনা / সংশোধন করা এবং অন্যথায় গোঙানো করা আমার পক্ষে কত সহজ of = |
ওয়েসলি

এটি একটি পুরানো প্রশ্ন, তবে এটি আমার প্রথম গুগল ফলাফল ছিল, তাই সম্ভবত এটি যুক্ত করার উপযুক্ত। getent passwd | cut -d : -f 6 | sed "s:$:/.bash_history:" | xargs -d'\n' -I{} sh -c "[ -f {} ] && echo {}" | xargs -d'\n' grep -Hn -e "$pattern"
গ্রেপ

1
@ ব্রাইকান অস্তিত্বহীন ফাইলগুলিকে উপেক্ষা করা একটি ভাল ধারণা। আপনি যেভাবে এটি করছেন তা ছদ্মবেশী হোন: সাধারণ ব্যবহারকারীর নামগুলিতে "অদ্ভুত" অক্ষর না থাকায় অনুশীলনে কাজ করা উচিত তবে সাধারণভাবে এটি ব্যবহার {}করা খুব বিপজ্জনক। ফাইলের নামটি সরাসরি স্ক্রিপ্টে বিভক্ত হয়। আপনি একটি ফাইল নাম (এখানে: একটি ব্যবহারকারী নাম) যদি ধারণকারী বলে, $(rm -rf /)বা ;rm -rf /;, কমান্ড মৃত্যুদন্ড কার্যকর করা হবে না। সর্বদা ফাইলের নামগুলি শেল স্ক্রিপ্টগুলিতে আর্গুমেন্ট হিসাবে পাস করুন, কখনও অনুসন্ধান বা xargs এর {}প্রক্রিয়া ব্যবহার করবেন না ।
গিলস 21'13

4
find /home -name .bash_history | xargs grep <string>

বিকল্পভাবে:

grep string $(find /home -name .bash_history)

নোট করুন যে এটি ডিফল্ট লোকেশন ডিরেক্টরিতে হোম ডিরেক্টরি কভার করে। পার্স করা /etc/passwdবা প্রার্থনা করা getentএবং এটির আউটপুট পার্স করা ভাল ।

for i in $(getent passwd | cut -d: -f6 ); do grep string ${i}/.bash_history; done

3

আপনি করতে পারেন

find /home | grep bash_history | xargs grep "whatever"

তবে আমি যা ভাবছি তা আসলেই এর থেকে বেশি ভাল বলে আমি মনে করি না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.