আমি কীভাবে লিনাক্সে আমার ব্যবহারকারীর দ্বারা নির্মিত এক্সিকিউটেবলগুলি ট্র্যাক করতে পারি?


11

লিনাক্স ব্যবহার করে, আমি আমার নামে চালানো এক্সিকিউটেবলগুলিকে পুরো কমান্ড লাইন (অনুশীলনে, প্রতিটি এক্সিকিউটি * () আমার নিজের ব্যবহারকারী হিসাবে সম্পন্ন করা) সহ ট্র্যাক করতে চাই। যে প্রোগ্রামটি আমি নিয়ন্ত্রণ করি না তার কোনও কাজ পরিচালনা করার জন্য, আমি যে প্রোগ্রামটি পাস করি তা সম্পাদন করার জন্য ধারণা করা হয় তবে আমি এটি নিশ্চিত করে দিতে চাই এবং এটি কোন বিকল্পগুলি ব্যবহার করে তা নিশ্চিত করতে চাই। আমি যে প্রোগ্রামটি নিয়ন্ত্রণ করি না তা ছিনতাই, এবং কর্মটির জন্য যে প্রোগ্রামটি সম্পাদন করা উচিত বলে মনে করা হয় তার নামের উপর নির্ভর করে আচরণটি পরিবর্তন করে বলে মনে হয়, তাই আমি কোনও শেল স্ক্রিপ্টে পাস করতে পারি না যা তথ্য লগ করে সত্যিকারের কাছে প্রার্থনা করবে কার্যক্রম.

সম্পূর্ণ কমান্ড লাইন সহ লিনাক্সের সিস্টেমে আমার ব্যবহারকারী হিসাবে সমস্ত এক্সিকিউটিভ * () এর কাজ সম্পর্কে আমাকে অবগত করা কি সম্ভব? psএকটি লুপ চলমান সংক্ষিপ্ত , যে। আমি বরং এটি যে সিস্টেমে আমি কাজ করি সেগুলিতে সরাসরি এটি করতে চাই এবং রুট অ্যাক্সেসের প্রয়োজন নেই, তবে প্রয়োজন হলে আমি এমন একটি সিস্টেম তৈরি করতে পারি যার উপর আমার রুট অ্যাক্সেস রয়েছে, প্রোগ্রামগুলি ইনস্টল করুন এবং সেখানে তদন্ত করতে পারবেন।

উবুন্টু 12.4 এলটিএস ব্যবহার করে।


আমি এখানে উবুন্টুকে জিজ্ঞাসা করার চেয়ে জিজ্ঞাসা করছি, কারণ এটি একটি উবুন্টু প্রশ্নের চেয়ে আরও বেশি ইউনিক্স / লিনাক্স প্রশ্ন।
পিয়েরে লেবউপিন

1
প্রোগ্রামটি কতটা লুক্কায়িত? এটি ডিবাগারগুলি সনাক্ত বা বাইপাস করার চেষ্টা করে? এটি কি গতিশীলভাবে যুক্ত? যদি এটি খুব স্নিগ্ধ হয় তবে আপনার যেখানে ভার্চুয়াল রয়েছে সেখানে কোনও ভার্চুয়াল মেশিন ব্যবহার করার প্রয়োজন হতে পারে। (এমনকি এমন কোনও প্রোগ্রামের জন্য এটি খুব সহজ কৌশলও হতে পারে যা বিশেষত
চতুর নয়

@ গিলস এটি সম্ভবত একটি সম্ভাবনা, আমি একটি ভিএম চেষ্টা করে যাচ্ছি, তারপরে প্রশ্নটি আপডেট করুন যদি এটি কার্যকর হয় কিনা work
পিয়েরে লেবাউপিন

দ্রষ্টব্য: আপনি প্রকৃতপক্ষে প্রোগ্রামের নাম এবং আর্গুমেন্ট চান বলে মনে হচ্ছে যা উত্তর auditদেয় তবে শেলের একটি 'সম্পূর্ণ কমান্ড লাইন' পুনর্নির্দেশ / পাইপিং এবং এনভ্যাভার সেটিংস ব্যবহারের পাশাপাশি বিকল্প / বিস্তৃতি, উল্লেখযোগ্য উদ্ধৃতি সহ শিশু প্রক্রিয়াটিকেও প্রভাবিত করতে পারে এবং ব্যবধান, এবং নিয়ন্ত্রণ কাঠামোগুলি পছন্দ করে তবে doa && dobআপনি সেগুলি পাবেন না।
dave_thompson_085

উত্তর:


10

ইভেন্টগুলি auditdরেকর্ড করতে আপনার কনফিগার করতে হবে execve। RHEL5 এর উদাহরণ:

[root@ditirlns01 ~]# auditctl -a always,entry -S execve
WARNING - 32/64 bit syscall mismatch, you should specify an arch
[root@ditirlns01 ~]#

আমি খিলানের সতর্কতাটিকে অগ্রাহ্য করেছি এবং এটি কোনও বিষয় মনে হচ্ছে না তবে আপনি চাইলে এটি ব্যবহার করতে পারেন -F arch=b64বা -F arch=b32সেট করতে পারেন।

উপরের ফলাফল:

[root@ditirlns01 ~]# ls /tmp/whatever
ls: /tmp/whatever: No such file or directory
[root@ditirlns01 ~]# grep whatever /var/log/audit/audit.log
type=EXECVE msg=audit(1386797915.232:5527206): argc=3 a0="ls" a1="--color=tty" a2="/tmp/whatever"
type=EXECVE msg=audit(1386797927.133:5527241): argc=3 a0="grep" a1="whatever" a2="/var/log/audit/audit.log"
[root@ditirlns01 ~]#

এটি স্পষ্টতই দ্রুত এবং নোংরা তবে এটি আপনি কীভাবে করেন এটির মূল বিষয়গুলি। আপনাকে যা করতে হবে তা সম্ভবত আপনি যা করতে চেষ্টা করছেন তার উপর নির্ভর করে। আপনি auditctlকমান্ডের বিভিন্ন ফিল্টার ব্যবহার করে নিরীক্ষণের প্রবাহকে হ্রাস করতে পারবেন তবে আমি সেগুলির কোনও তথ্য জানি না তাই আমি কী কী অন্তর্ভুক্ত করব তা জানি না। আপনার যদি আরও নির্দিষ্ট কিছু প্রয়োজন হয় তবে আমি আপনাকে ম্যান পৃষ্ঠাটি পরীক্ষা করতে বা এই উত্তরে একটি মন্তব্য পোস্ট করার পরামর্শ দিচ্ছি এবং এটি আরও কিছু আপডেট করব।

আশা করি এটি আপনাকে সঠিক দিকে ঠেলে দিতে সহায়তা করে।

সম্পাদনা করুন:

যেহেতু আপনার প্রশ্নের কোনও নির্দিষ্ট ব্যবহারকারীর দিকে তাকাতে জড়িত আমি আপনাকে তা দেখাতে পারি:

[root@ditirlns01 ~]# auditctl -a always,entry -S execve -F euid=16777216
WARNING - 32/64 bit syscall mismatch, you should specify an arch

উপরের মতো একই, তবে কেবল execveকার্যকর ব্যক্তির আইডি দিয়ে চালিত কেউ 16777216লগ হবে। যদি আপনার ব্যবহারকারীর loginuidমান নির্দিষ্ট করতে হয় (তারা প্রথমে কে সিস্টেমে লগ ইন করেছিল) তবে auidতার পরিবর্তে আপনি ফিল্টার করুন:

[root@ditirlns01 ~]# auditctl -a always,entry -S execve -F auid=16777216
WARNING - 32/64 bit syscall mismatch, you should specify an arch

এআইইউডি / লগইনইউড ফিল্টারগুলি উদাহরণস্বরূপ কার্যকর হবে যদি ব্যবহারকারী কোনও suবা sudoরুট করতে পারে। এই পরিস্থিতিতে প্রচুর স্টাট রুট হিসাবে চলতে থাকবে তবে আপনি কেবল সেই জিনিসটি নিয়েই উদ্বিগ্ন যেটি ব্যবহারকারীকে প্রশ্নবিদ্ধভাবে লাথি মেরে ফেলেছে। auditctlএছাড়াও আপনাকে ফিল্টারগুলি স্ট্যাক করতে দেয় যাতে আপনি euidএবং উভয়ই ফিল্টার করতে পারেন auid:

[root@ditirlns01 ~]# auditctl -a always,entry -S execve -F auid=16777216 -F euid=0
WARNING - 32/64 bit syscall mismatch, you should specify an arch
[root@ditirlns01 ~]# ls /tmp/nashly -ltar
ls: /tmp/nashly: No such file or directory
[root@ditirlns01 ~]# grep nashly /var/log/audit/audit.log
type=EXECVE msg=audit(1386798635.199:5529285): argc=4 a0="ls" a1="--color=tty" a2="/tmp/nashly" a3="-ltar"
type=EXECVE msg=audit(1386798646.048:5529286): argc=3 a0="grep" a1="nashly" a2="/var/log/audit/audit.log"

1
"মনে রাখবেন যে আমার কাছে রুট অ্যাক্সেস নেই"। (অন্যথায় এটি একটি ভাল উত্তর হবে।)
গিলস 'খারাপ হওয়া বন্ধ করুন'

অভিশাপ ... এত কাছে ...
ব্র্যাচলে

ধন্যবাদ, যে কাজ করেছে। আমার যুক্ত করা উচিত যে আমাকে এপটি-গেটের মাধ্যমে অডিটেক্টল ইনস্টল করতে হয়েছিল, এটি উবুন্টুতে প্রাক-ইনস্টল করা হয়নি।
পিয়েরে লেবউপিন

ধন্যবাদ। সুন্দর উদাহরণ। তবে নিরীক্ষণ লগের বাইরে বেরোনোর ​​কোনও উপায় আছে কি?
কাওস

0

আপনি সাধারণ কিছু জিজ্ঞাসা করেছেন। আমি এর সাথে একটি উদাহরণ তৈরি করেছি mplayerতবে আমার ধারণা এটি অন্যান্য পরিস্থিতিতেও খাপ খাইয়ে নিতে পারে:

#! /bin/sh
# This executable must be used instead of /usr/bin/mplayer
# do not forget the chmod +x filename...
LOG=/tmp/mplayer.log
echo "$@" >> $LOG
if [ -n "$1" ] && [ -f "$1" ] ; then
        filename="$1"
        echo "$(date "+%F %T") $(basename "$filename")" \
        | tee -a "$(dirname "$filename")/mplayer.log"  >> $LOG
fi
/usr/bin/mplayer "$@"

যেহেতু আপনি দেখতে পাচ্ছেন এটি খুব সহজ: এটি প্রথম যুক্তিটিকে পার্স করে, এটি একটি ফাইল হিসাবে, একটি লগ কেন্দ্রীয় ফাইলের মধ্যে তৈরি করা $LOGহয় এবং একটি ফাইলে কনকানটেটেড হয় (যা সর্বদা mplayer.logএকই ডিরেক্টরিতে একই নাম থাকে ।

সুতরাং, ব্যবহারকারী প্রতিটি ডিরেক্টরিতে তিনি পড়েছেন সর্বশেষতম চলচ্চিত্রটি পেতে পারেন।


কিউ স্পষ্টভাবে বলেছিল যে স্ক্রিপ্ট প্রতিস্থাপন কাজ করবে না।
dave_thompson_085

সম্ভাব্য, তবে এটি আমার পরিস্থিতির পক্ষে উপযুক্ত: আমার সুরক্ষার কোনও সমস্যা নেই এবং আমি চালিত স্ক্রিপ্টটি বেছে নিতে পারি। এটি অবিশ্বাস্যরূপে মনে হতে পারে, যদিও আমার কাছে এই সহজতম সরল সমাধানটি রয়েছে, সম্ভবত অন্য কেউ গিক-কেবল স্টাফগুলিতে না যেতে আগ্রহী হবেন। আমি পূর্ববর্তী সমাধান আরও সুরক্ষিত স্বীকার!
MUY বেলজিয়াম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.