"Sudo su -" এর মধ্যে কীভাবে কমান্ড লগ করবেন?


12

আমি যদি:

[user@notebook ~] sudo echo 123456uu
123456uu
[user@notebook ~] 

তারপরে আমি দেখতে পাব লগগুলিতে:

[root@notebook /var/log] grep 123456uu *
auth.log:Jan  9 17:01:51 notebook sudo: user : TTY=pts/3 ; PWD=/home/user ; USER=root ; COMMAND=/bin/echo 123456uu
[root@notebook /var/log] 

তবে আমি যদি:

[user@notebook ~] sudo su -
[root@notebook ~] echo 1234567zz
1234567zz
[root@notebook ~] 

আমি লগগুলিতে এটি দেখতে পাচ্ছি না:

[root@notebook /var/log] grep 1234567zz *
[root@notebook /var/log] echo $?
1
[root@notebook /var/log] 

আমার প্রশ্ন: "sudo su -" এর মধ্যে আমি কমান্ডগুলির জন্য লগিংটি কীভাবে চালু করতে পারি?

ওএস হ'ল একটি উবুন্টু 12.04 তবে প্রশ্নটি সাধারণভাবে।

আপডেট # 1:

[user@notebook ~] sudo su -
[sudo] password for user: 
[root@notebook ~] echo zizizi
zizizi
[root@notebook ~] cd /var/log
[root@notebook /var/log] grep -iIR 'zizizi' *
[root@notebook /var/log] grep 'COMMAND=/bin/su -' *
auth.log:Jan 10 15:42:42 notebook sudo: user : TTY=pts/1 ; PWD=/home/user ; USER=root ; COMMAND=/bin/su -
[root@notebook /var/log]

যদি দূষিত কারও (বা এমনকি অবিশ্বস্ত এমনকি) অ্যাক্সেস sudo su -থাকে তবে তাদের কাজগুলির দ্বারা আপনি যে সমস্ত লগ এন্ট্রি করতে পারেন সেগুলি সরাতেও তাদের দক্ষতা রয়েছে। আপনি যদি আপনার লগিংয়ে 100% নিশ্চিততা চান তবে আপনাকে sudoভারীভাবে সীমাবদ্ধ করতে হবে এবং sudo suসম্পূর্ণরূপে এটি নিষ্ক্রিয় করতে হবে ।
ওয়াইল্ডকার্ড

উত্তর:


17

যেহেতু আপনি উবুন্টু 12.04 এ রয়েছেন, তাই বিকল্পগুলি log_inputএবং log_outputবিকল্পগুলির মাধ্যমে সক্রিয় করা I / O লগিং ক্ষমতাগুলি একবার দেখুন ।

log_input

    যদি সেট করা sudoথাকে তবে একটি সিডো টিটি-তে কমান্ডটি চালাবে এবং সমস্ত ব্যবহারকারীর ইনপুট লগ করবে। I / O পুনর্নির্দেশের কারণে বা কমান্ডটি পাইপলাইনের একটি অংশের কারণে যদি স্ট্যান্ডার্ড ইনপুটটি ব্যবহারকারীর tty এর সাথে সংযুক্ত না থাকে তবে সেই ইনপুটটি পৃথক লগ ফাইলে ধারণ ও সংরক্ষণ করা হয়।

    ইনপুটটি iolog_dirবিকল্প দ্বারা নির্দিষ্ট করা ডিরেক্টরিতে লগ করা হয় ( /var/log/sudo-ioডিফল্টরূপে) একটি সাধারণ অনূদিত লগ লাইনের অন্তর্ভুক্ত থাকা একটি অনন্য সেশন আইডি ব্যবহার করে, এর সাথে উপসর্গযুক্ত TSID=iolog_fileবিকল্প সেশন আইডি বিন্যাস নিয়ন্ত্রণ করতে ব্যবহৃত হতে পারে।

    নোট করুন যে ব্যবহারকারীর ইনপুটটিতে সংবেদনশীল তথ্য থাকতে পারে যেমন পাসওয়ার্ডগুলি (এমনকি তারা স্ক্রিনে প্রতিধ্বনিত হয় না), যা লেনদেন ফাইলটি এনক্রিপ্ট না করে সংরক্ষণ করা হবে। বেশিরভাগ ক্ষেত্রে, লগ_আউটপুট মাধ্যমে কমান্ড আউটপুট লগইন করা দরকার that

log_output

    যদি সেট করা sudoথাকে তবে একটি সিউডো টিটি-তে কমান্ডটি চালাবে এবং স্ক্রিপ্ট (1) কমান্ডের অনুরূপ স্ক্রিনে প্রেরিত সমস্ত আউটপুট লগ করবে। যদি I / O পুনর্নির্দেশের কারণে বা কমান্ডটি পাইপলাইনের একটি অংশের কারণে স্ট্যান্ডার্ড আউটপুট বা স্ট্যান্ডার্ড ত্রুটি ব্যবহারকারীর tty এর সাথে সংযুক্ত না হয়, তবে আউটপুটটি পৃথক লগ ফাইলগুলিতে ক্যাপচার এবং সংরক্ষণ করা হয়।

    আউটপুট iolog_dirঅপশন দ্বারা সুনির্দিষ্ট ডিরেক্টরিতে লগ করা হয় ( /var/log/sudo-ioডিফল্টরূপে) একটি সাধারণ অনূদিত লগ লাইনের অন্তর্ভুক্ত থাকা একটি অনন্য সেশন আইডি ব্যবহার করে, এর সাথে উপসর্গযুক্ত TSID=iolog_fileবিকল্প সেশন আইডি বিন্যাস নিয়ন্ত্রণ করতে ব্যবহৃত হতে পারে।

    আউটপুট লগগুলি সুডোরপ্লে (8) ইউটিলিটি সহ দেখা যেতে পারে, যা উপলব্ধ লগগুলিকে তালিকাবদ্ধ করতে বা অনুসন্ধান করতে ব্যবহৃত হতে পারে।

প্রয়োগ: সুডো সংস্করণ কমপক্ষে: 1.7.4p4 প্রয়োজন।

/etc/sudoersসংশোধন: আপনাকে যা করতে হবে তা হল সমস্ত প্রয়োজনীয় sudoers এন্ট্রিগুলিতে দুটি ট্যাগ যুক্ত করা (যেখানে "su" নির্দিষ্ট করা হয়, হুকুম বা উলামের সাহায্যে)। LOG_INPUT এবং LOG_OUTPUT।

উদাহরণ:

%admins         ALL=(ALL) NOPASSWD: LOG_INPUT: LOG_OUTPUT: ALL

নিম্নলিখিত ডিফল্ট লগ dir কাঠামো এ যুক্ত করুন sudoers:

Defaults iolog_dir=/var/log/sudo-io/%{user}

এটি দুর্দান্ত, তবে পুরানো সিস্টেমগুলিতে কাজ করে না ..: \
newuser999

হ্যাঁ, সম্ভবত একটি বর্তমান সুডো সংস্করণটির প্যাকেজ তৈরি করতে হবে বা সিস্টেমটি আপগ্রেড করতে হবে?
মার্টিন এম

13

তোমার grepযখন করছেন sudo su -ব্যর্থ কারণ আপনার না চালাচ্ছেন echo 1234567zz, আপনি চালাচ্ছেন su -, যা লঞ্চ একটি শেল। শেলটি তখন আপনার চলছে echo

এটি ইচ্ছাকৃত, এবং প্রতিটি একক কমান্ড রান লগ করা আপনার অকার্যকর তথ্য দিয়ে সিসলোগকে প্লাবিত করবে (এমন অনেকগুলি প্রোগ্রাম রয়েছে যা আপনি সাধারণত দেখতে না পর্দার আড়ালে চলে যান)।

আপনি যদি আপনার গ্রেপ পরিবর্তন করেন তবে আপনি grep 'COMMAND=/bin/su -' *এটি দেখতে পাবেন।


sudo su -এটিও অকেজো ব্যবহার susudo -iএকই জিনিস।


তবে আমি কীভাবে "sudo su -" এ লগ ইন করতে পারি?
newuser999

1
এটি লগ করা হয়েছে। আপনি চেষ্টা করেছেন grep 'COMMAND=/bin/su -' *(বা ওয়াইল্ডকার্ড ছাড়াই grep 'COMMAND=/bin/su -' /var/log/auth.log)?
প্যাট্রিক

আমি প্রশ্ন আপডেট। "sudo su -" কমান্ডগুলি লগ-ইন না করে ব্যবহার করার সময় আমার আর কী প্রমাণ করতে হবে ??
newuser999

4
কমান্ড ( sudo -) হয় লগ, এবং আপনার আপডেট আউটপুট ভাবে দেখায়। আমরা এখানে এখানেই কথা বলছি। অন্যান্য আদেশ, যেমন echoআপনার সাথে ব্যবহারকারি স্যুইচ পর sudo -, নও কমান্ড sudo, (আমার উত্তর অনুযায়ী) লগইন নেই তাই auth.log। কেবলমাত্র পৃথক কমান্ডই স্পষ্টভাবে প্রবর্তিত sudoলগ হবে। সুতরাং আপনি sudo echoলগইন করেছেন, তবে echoআপনি সুপারভাইজারটিতে স্যুইচ করেছেন তা নির্বিশেষে কেবল সরল নয়।
সোনারলোকস

12

ক্রমবর্ধমান জটিলতায়, "sudo su -" এর মধ্যে জারি করা আদেশগুলি লগ করার জন্য এখানে তিনটি উপায়:

  1. বাশ কমান্ডের ইতিহাসের উপর নির্ভর করুন
  2. একটি চালিত লগিং মোড়ক ইনস্টল করুন
  3. সেলিনাক্সের অডিট ব্যবহার করুন

কোনটি উপযুক্ত, এটি লগিংয়ের মাধ্যমে আপনি কী অর্জন করতে চাইছেন তার উপর নির্ভর করে।

1) বাশ কমান্ডের ইতিহাস

পর্যাপ্ত রেখাগুলি রাখা, বিভিন্ন অধিবেশন থেকে ওভাররাইট না করা, আদেশগুলি উপেক্ষা না করা এবং উপযুক্ত টাইমস্ট্যাম্পগুলি নিশ্চিত করার জন্য আপনি ইতিহাসের বৈশিষ্ট্যটি কনফিগার করতে চান। ( ব্যাশ ম্যানুয়ালটিতে HIST * ভেরিয়েবলগুলি দেখুন )। ইতিহাসের ফাইল সম্পাদনা করে, পরিবেশকে হেরফের করে বা অন্য শেল চালিয়ে সহজেই বিভক্ত হয়।

2) মোড়ক কার্যকর

স্নোপাইলোগার এক। /etc/profileলগার লাইব্রেরি প্রক্রিয়াটির মেমরি মানচিত্রে রয়েছে তা একটি চেক যুক্ত করুন ( /proc/<pid>/maps) এবং না থাকলে সেট LD_PRELOAD(পুনরায় exec $SHELL --login "$@") সেট করে পুনরায় চালু করুন । পর্যায়ক্রমে আপনি স্নোপি.সো এর 32/64-বিট সংস্করণে /etc/ld.so.preload $LIB/snoopy.soবা সমমানের পাথ (গুলি) এ একটি এন্ট্রি যুক্ত করতে পারেন ।

আরও কঠিন হলেও, LD_PRELOADউপরোক্ত পরিবেশের পরিবর্তনশীল সংস্করণটি কার্যকরকরণ পরিবেশের কৌশল দ্বারা এখনও বিপর্যস্ত করা যেতে পারে যাতে স্নোপি কোডটি আর চলবে না।

বিষয়বস্তু বিশ্বাসযোগ্য হওয়ার জন্য সিসলগকে অফ-বক্স পাঠানো উচিত।

3) নিরীক্ষা

এক্সিকিউট র‌্যাপারের চেয়ে কনফিগার করতে কিছুটা সোজা, তবে এর থেকে তথ্য বের করা আরও শক্ত। এটি সম্ভবত যে প্রশ্নটি সম্ভবত আপনি জিজ্ঞাসা করছেন তার উত্তর: "কি ইস্যু করার পরে ব্যবহারকারীরা কোনও সিস্টেমে কী প্রভাব ফেলেছিল তা লগ করার কোনও উপায় আছে sudo su -"? বিষয়বস্তু বিশ্বাসযোগ্য হওয়ার জন্য সিসলগকে অফ-বক্স প্রেরণ করা উচিত।

এই সার্ভারফল্ট উত্তরটি নিরীক্ষণের সাথে ব্যবহারের জন্য মোটামুটি বিস্তৃত কনফিগারেশন হিসাবে উপস্থিত বলে মনে হচ্ছে।

সার্ভারফল্টে অনুরূপ প্রশ্নের জন্য আরও কিছু পরামর্শ রয়েছে


9

কেন?

কারণ এটি sudoযে লগিং করছে; এটি সুডো কম্যান্ডস লগ করে। প্রথম ক্ষেত্রে, sudo echoলগ ইন করা হয় । দ্বিতীয় ক্ষেত্রে, sudo suলগ ইন করা হয় (এটি সন্ধান করুন /var/log/auth.log)।

suডিফল্টরূপে root এ "ব্যবহারকারী স্যুইচ" হয়। এর পরে আপনি যে কোনও কাজ করেন না sudo আপনি যেমন রুট হিসাবে লগ ইন করেছেন ঠিক তেমনই এটি; লগইন নিজেই লগড করা হয় তবে প্রতিটি কমান্ড নয়।


5

অন্যরা যেমন বলেছে, এটি sudoকরতে পারে না।

পরিবর্তে, ব্যবহার করুন auditd। আপনি যদি রুট দ্বারা সম্পন্ন সমস্ত কিছু লগ করতে চান (উদাহরণস্বরূপ ক্রন্টাব দ্বারা করা জিনিসগুলি সহ), এটি ব্যবহার করুন:

sudo auditctl -a exit,always -F euid=0

ইটিএ: নোট করুন যে সমস্ত কিছু লগ করা কর্মক্ষমতাকে প্রভাবিত করবে, তাই আপনি সম্ভবত এটি কিছুটা সীমাবদ্ধ করতে চান। man auditctlউদাহরণ জন্য দেখুন ।

আপনি যদি কেবলমাত্র লগইন করতে চান যেখানে মূল লগইন ইউইডটি মূল নয়, পরিবর্তে এটি ব্যবহার করুন:

sudo auditctl -a exit,always -F euid=0 -F auid!=0

লগগুলি সাধারণত /var/log/audit/audit.log এ শেষ হবে। আপনি তাদের দিয়ে অনুসন্ধান করতে পারেন ausearch

সেখানে মানুষ পাতায় আরো তথ্য রয়েছে auditctl, audit.rulesএবং ausearch


2
ওহ, নিরীক্ষণের লগগুলিকে বিশ্বাসযোগ্য করার জন্য, তাদের আলাদা সার্ভারে প্রেরণ করা উচিত। কোনও অবিশ্বস্ত ব্যবহারকারীর মূলের মেশিনে থাকা কোনও লগ বিশ্বাস করা যায় না।
জেনি ডি

তা সত্ত্বেও আপনি কোনও আপস করা সার্ভার থেকে কী ঘটে বা না আসে তা বিশ্বাস করতে পারবেন না।
ম্যাট

এটি আপোস হওয়ার সময় অবধি আপনার একটি ট্রেস থাকবে।
জেনি ডি 10

2
কোনটি অপেশনের ক্ষেত্রে প্রযুক্তিগতভাবে চালিত হওয়ার সাথে সাথেই sudo su -তাই আপনি স্কয়ার একের দিকে ফিরে এসেছেন
ম্যাট

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

2

sudo su -~/.bash_historyযদি আপনার শেলটি বাশ হয় তবে তা হবে ।

echo 1234567zz/root/.bash_historyমূলের শেলটি যদি বশ হয় তবে তা হবে ।

এর ব্যাখ্যা ইতিমধ্যে স্বর্ণলোক পোস্ট করেছে।


2

আপনি কি সুরক্ষা ত্রুটি বলে মনে করছেন বলে আপনি কি লগ ইন করতে চান? আপনি এই আদেশ সম্পর্কে চিন্তা করেছেন? sudo bashঠিক যেমন imho।

লোকেরা সুডো দিয়ে কী করতে পারে তা নিয়ে আপনি যদি উদ্বিগ্ন হন তবে আপনাকে এটির ব্যবহার সীমাবদ্ধ করতে হবে। তারা কার্যকর করতে পারে এমন আদেশগুলি আপনি সীমাবদ্ধ করতে পারেন। যদি এটি আপনাকে চিন্তিত করে তবে / বিন / সিতে অ্যাক্সেস সীমাবদ্ধ করুন।


1

এই সম্পর্কে কি:

export HISTTIMEFORMAT="%d/%m/%y %T "
export PROMPT_COMMAND='builtin history 1 >> /var/log/sudo.log'
sudo -E su
unset PROMPT_COMMAND

অথবা

export HISTTIMEFORMAT="%d/%m/%y %T "
export PROMPT_COMMAND='builtin history 1 >> /var/log/sudo.log' 
sudo -E su --preserve-environment -
unset PROMPT_COMMAND

বা দীর্ঘ এক-লাইনার:

HISTTIMEFORMAT="%d/%m/%y %T " PROMPT_COMMAND='builtin history 1 >> /var/log/sudo.log' sudo -E su

sudo -E পরিবেশ সংরক্ষণ করে প্রতিটি প্রম্প্টের আগে কার্যকর করা হয় PROMPT_COMMAND


প্রথমটি আমাকে কনসোল দেয় না এবং যদি আমি দ্বিতীয়টিকে /root/.bashrc এ রাখি তবে আমি "sudo su -" এর পরে রুট কনসোল পেতে চাইলে CTRL + C টি চাপতে হবে: ডি কোনও সম্ভাবনা নেই এটি ঠিক করতে (বা এর সাথে "তারিখ" ফাংশন যুক্ত করতে?)। অনেক ধন্যবাদ!
newuser999

আমি ভয় করি আপনি এটির অপব্যবহার করেছেন। আরও স্পষ্ট করতে এটি সম্পাদনা করা হয়েছে।
কোস্টা

1

যদি এটি সহায়তা করে তবে আপনি sudoers এর "NOEXEC" বিকল্পটি ব্যবহার করতে পারেন।

আপনি এটি হিসাবে সংজ্ঞায়িত করা প্রয়োজন

USER_NAME         ALL=(ALL) NOEXEC : ALL

এটি শেল পালাতে বাধা দেবে এবং ব্যবহারকারী সুডো-আই বা সুডো-এস বা সুডো সু ব্যবহার করতে সক্ষম হবে না -

এটি একটি খারাপ দিক দিয়ে আসে তবে যাইহোক, যে কোনও শেল এস্কেপ অক্ষম করা হবে। স্ক্রিপ্টের মধ্যে থেকে এক্সিকিউটিং স্ক্রিপ্টের জন্যও অস্বীকার করা হবে।


0

আসুন এটিকে জটিল করে তুলবেন না: যখনই sudoডাকা হয়, তখন কিছু ফাইলের মধ্যে এই তথ্যটির প্রতিবেদন করা হয় /var/log(আপনার সিস্টেমে auth.logএটি আমার ওএস এক্স বক্সে রয়েছে system.log)। sudoএর কমান্ডলাইন আর্গুমেন্টগুলি রিপোর্ট করে, তবে এটি ইন্টারেক্টিভ কমান্ডের মতো কী হতে পারে তার কোনও জ্ঞান নেই su

এর অর্থ এই নয় যে রুট সাবশেলে কী ঘটেছিল তার কোনও রেকর্ড নেই: শেল কমান্ডগুলি শেলের ইতিহাসে সংরক্ষিত হয়। আমার সিস্টেমে রুটের ইতিহাস সংরক্ষণ ডিফল্টরূপে সক্ষম করা হয়েছে, সুতরাং আমাকে যা করতে হবে ~root/.sh_historyতা হ'ল কী করা হয়েছিল তার রেকর্ড সন্ধান করতে হবে (যদি না কেউ এর সাথে छेड़छाड़ না করে তবে অবশ্যই তারা এতে সমানভাবে छेলাশালী করতে পারে /var/log)।

আমি মনে করি এটিই আপনার পক্ষে সেরা সমাধান। যদি তা না auditdহয় তবে @ জেনির পরামর্শ অনুসারে শহরে যান ।

পুনশ্চ. যদি রুটের ইতিহাস ইতিমধ্যে সক্ষম না করা থাকে তবে এটি সক্ষম করে এটি কোন শেলটি ব্যবহার করবে তার উপর নির্ভর করে। জন্য bash, সেট করুন HISTORYএবং HISTFILESIZEএকটি বৃহত পরিমাণে (ডিফল্ট 500, আমার ম্যানুয়াল বলে)। আপনি যদি ইচ্ছা করেন তবে কোনও ইতিহাস HISTFILE(ডিফল্ট $HOME/.sh_history) এ সেট করে ইতিহাসটি কোথায় সংরক্ষণ করা হয়েছে তা উল্লেখ করতে পারেন


0

আপনি এটি ব্যবহার করে আপনার সেশনের একটি টাইপ স্ক্রিপ্ট তৈরি করতে চাইতে পারেন script(1):

$ sudo su -
# script -t /tmp/my_typescript 2> /tmp/my_typescript.timing
Script started, file is /tmp/my_typescript
# echo foobar
foobar
# echo hello world
hello world
# exit
exit
Script done, file is /tmp/my_typescript

এখন আপনি grep(নোটগুলি #প্রকৃতপক্ষে রেকর্ড করা আছে নোট করুন /tmp/my_typescript):

$ grep echo /tmp/my_typescript
# echo foobar
# echo hello world

বিকল্পভাবে, আপনি এমনকি পুরো সেশনটি এটির সাথে আবার দেখতে পারবেন scriptreplay(1):

$ scriptreplay -t /tmp/my_typescript.timing /tmp/my_typescript

/tmp/my_typescript.timingপ্রতিটি কমান্ডের আবেদন করা হলে ফাইলটিতে তথ্য থাকে। এর মতো আরও সরঞ্জাম রয়েছে ttyrecবা এর মধ্যে আরও shelrবেশি বেল এবং হুইসেল রয়েছে।

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