একটি নির্দিষ্ট ব্যবহারকারীর জন্য auth.log এ sudo PAM বার্তাগুলি কীভাবে বন্ধ করবেন?


16

আমি আমার পরিবেশ নিরীক্ষণের জন্য জাবিবিক্স ব্যবহার করছি এবং প্রতি 60 সেকেন্ডে zabbix_agentdব্যবহারকারী হিসাবে zabbixএকটি কাস্টম স্ক্রিপ্ট কার্যকর করি; এটি sudoহিসাবে এই স্ক্রিপ্ট চালাতে ব্যবহার করে root

ইন /var/log/auth.logআমি প্রতি 60 সেকেন্ড দেখুন:

Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session closed for user root

আমি এই বার্তাটি আমার লগ বন্যার হাত থেকে থামাতে চাই। আমি /etc/pam.d/sudoফাইলের সাথে নিচের লাইনটি যুক্ত করেছি , এর আগেই session required pam_unix.so:

session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0

এবং বার্তাটি অদৃশ্য হয়ে গেল।

কিন্তু সমস্যা যে এই ভাবে আমি প্রতি পিএএম বার্তা চাপা আছে যখন কারও সাথে একটি স্ক্রিপ্ট চালাতে হয় sudoযেমন root

আমি বার্তাটি কেবল ব্যবহারকারীর জন্য zabbix(অন্য সমস্ত ব্যবহারকারী নয়) বন্ধ করতে চাই । ব্যবহারকারী sudoজানেন যে সুবিধাগুলি zabbixসহ স্ক্রিপ্টটি কার্যকর করতে চায় rootএবং পিএএম কে বলার কোনও উপায় আছে? আমি কীভাবে পামকে বলতে পারি যে ব্যবহারের সময় কোনও নির্দিষ্ট ব্যবহারকারীর জন্য লগ না করা sudo?

দ্রষ্টব্য : আমি syslog এ বার্তাগুলি ফিল্টার করার চেষ্টা করেছি; যদিও এটি কাজ করে, এটি উপরের মতো একই সমস্যা রয়েছে, যথা এটি খুব নির্বিচার,


এটি ফিল্টারিং সমর্থন করে এবং ফিল্টারিংয়ের সাথে এটি কাজ করে। আমি চেষ্টা করেছিলাম কিন্তু আমি এটি পছন্দ করি না, কারণ ফিল্টারিং কোনও সর্বজনীন উপায় নয়। একদিন বার্তায় কিছু চরিত্র পরিবর্তন হবে বা কিছু পরিবর্তন হবে এবং আমার ফিল্টার ব্যর্থ হবে। আমি কনফিগারেশন প্যারামিটার, নির্দেশনা বা এর অনুরূপ কিছু সহ একটি সমাধান অনুসন্ধান করছি যে এটি নিশ্চিত হওয়া যায় যে এটি সব ক্ষেত্রেই বন্ধ হয়ে যাবে। এবং বার্তাটি বলে session closed for user rootএবং যদি আমি এটি ফিল্টার করি তবে আমি সমস্ত বার্তা ফিল্টার করছি। আমি একটি নির্দিষ্ট ব্যবহারকারীর জন্য চাই যার বার্তায় উল্লেখ নেই এবং আমি এর নামে ফিল্টার করতে পারি না ...
inivanoff1

উত্তর:


11

আপনি আপনার প্যাম কনফিড লাইনের সাথে বেশ কাছাকাছি মনে হচ্ছে:

session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0

এর জন্য ম্যানুয়াল পৃষ্ঠাটি দেখে pam_succeed_ifআমার মনে হয় আপনি অনুরোধকারী ব্যবহারকারী ( ruser) হচ্ছেন তা পরীক্ষা করতে চান zabbix

সুতরাং আমি প্রস্তাব:

session [success=1 default=ignore] pam_succeed_if.so quiet uid = 0 ruser = zabbix

এটি পরবর্তী পরীক্ষাকে দমন করবে যখন ব্যবহারকারী zabbixহয়ে উঠবে root(তবে অন্য কোনও রূপান্তর নেই)। আমি আমার নিজের ব্যবহারকারীদের সাথে এটি পরীক্ষা করেছি।

uid = 0উপরের টেস্টটি সরিয়ে ফেলুন যদি আপনি zabbixকেবল রুট না হয়ে কোনও ব্যবহারকারী হওয়ার বিষয়ে চুপ করে থাকতে চান ।

আমি service in sudoপরীক্ষাটি সরিয়ে ফেলেছি : এই লাইনটি রয়েছে তা প্রদানের কারণে এটি অতিরিক্ত কাজ নয় /etc/pam.d/sudo


1
ধন্যবাদ! আমি এটিই সন্ধান করছি। পারফেক্ট! এবং পরামর্শটি সরিয়ে দেওয়ার জন্য ধন্যবাদ service in sudo
inivanoff1

1
আপনি যদি [user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...লগ থেকে লাইনটিও সরাতে চান তবে আপনি এটি sudoers.d / file এ যুক্ত করতে পারেন: Defaults:[user] !logfile, !syslog( [user]যেখানে উপযুক্ত সেখানে প্রতিস্থাপন করুন )
thom_nic

@ থম_নিক এই ফাইলটির পথ কী?
not2qubit

এর অধীনে যে কোনও ফাইল /etc/sudoers.d/- আমি ব্যবহারকারীর নাম, গোষ্ঠী বা প্রয়োগের ক্ষেত্রে এটি প্রয়োগ করতে পছন্দ করি। দেখুন sudo.ws/man/1.8.15/sudoers.man.html
thom_nic

@ থম_নিক আপনি দয়া করে কিছুটা আরও প্রসারিত উত্তর হিসাবে পোস্ট করতে পারেন? আপনার প্রস্তাবিত ফর্ম্যাটটি আমি দেখতে পাচ্ছি না। উপরন্তু আমি মনে করি না যে সেখানে একটি :আছে। এবং logfilesস্পষ্ট বা কিছু প্রতিস্থাপন করা উচিত?
not2qubit

3

টবির উত্তরের ভিত্তিতে, আমি এটি ডিবিয়ান / উবুন্টুতে কিছুটা আলাদা উপায়ে কনফিগার করার একটি উপায় পেয়েছি। প্রসঙ্গে, দেখুন:

সুতরাং দেবিয়ান / উবুন্টুর এই pam-auth-updateআদেশ রয়েছে এবং আপনি যখন /etc/pam.d/sudoএটি দেখেন তখন এমন দেখাচ্ছে:

#%PAM-1.0

@include common-auth
@include common-account
@include common-session-noninteractive

এবং এর /etc/pam.d/common-session-noninteractiveমতো দেখাচ্ছে:

#
# /etc/pam.d/common-session-noninteractive - session-related modules
# common to all non-interactive services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define tasks to be performed
# at the start and end of all non-interactive sessions.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules.  See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
session [default=1]         pam_permit.so
# here's the fallback if no module succeeds
session requisite           pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
session required            pam_permit.so
# and here are more per-package modules (the "Additional" block)
session required    pam_unix.so
# end of pam-auth-update config

সুতরাং নিশ্চিত, আমি উপরের যে কোনও ফাইল সম্পাদনা করতে পারলাম তবে স্পষ্টতই এখানে কিছু "উচ্চ ক্ষমতা" রয়েছে। প্যাম নিয়ম যুক্ত করতে পারে এমন অন্যান্য প্যাকেজগুলির সাথে আমার খেলার পরিবর্তনগুলি কীভাবে পাবেন? এটিকে শীর্ষে উপস্থাপন করার জন্য, মনে হচ্ছিল আমি /etc/pam.d/sudoদু'জনের মাঝে @includeএইরকম কোনও লাইন যুক্ত করতে পারছি না ..

##### THIS DIDN'T WORK :( ######
@include common-auth
@include common-account
session [default=ignore] pam_succeed_if.so quiet_success service = sudo uid = 0 ruser = myappuser
@include common-session-noninteractive

উপরের লিঙ্কগুলি পড়ার পরে অন্যান্য উদাহরণগুলি দেখুন (দেখুন /usr/share/pam-configs/unix) আমি এটি নিয়ে এসেছি /usr/share/pam-configs/myapp:

# Don't log "session opened" messages for myapp user
# See: https://wiki.ubuntu.com/PAMConfigFrameworkSpec
#      https://manpages.debian.org/stretch/libpam-modules/pam_succeed_if.8.en.html
Name: myapp disable session logging
Default: yes
Priority: 300
Session-Type: Additional
Session:
    [default=ignore] pam_succeed_if.so quiet_success service = sudo uid = 0 ruser = myappuser

Sessionএবং Session-Typeনিয়ন্ত্রণ করুন কোন ফাইলগুলি সম্পাদনা করা হয় এবং Priorityকোন আদেশে তারা প্রবেশ করে তা সংজ্ঞায়িত করে that ফাইলটি যুক্ত করার পরে এবং চলার পরে pam-auth-update, /etc/pam.d/common-session-noninteractiveদেখতে এটি দেখতে (নীচে :)

#... omitted
session required            pam_permit.so
# and here are more per-package modules (the "Additional" block)
session [default=ignore] pam_succeed_if.so quiet_success service = sudo uid = 0 ruser = myappuser
session required pam_unix.so 
# end of pam-auth-update config

... যা আমরা চাই কারণ আমাদের pam_succeed_ifলাইনের আগে আসা উচিত session required pam_unix.so। (এই লাইনটি এসেছিল /use/share/pam-configs/unixএবং Priority: 256তাই এটি দ্বিতীয়টি শেষ হয়)) এছাড়াও নোট করুন যে আমি service = sudoপ্রিকিকেটটি ছেড়ে দিয়েছি কারণ common-session-noninteractiveসম্ভবত অন্যান্য কনফিগগুলিতেও অন্তর্ভুক্ত থাকতে পারে sudo

আমার ক্ষেত্রে, আমি ইতিমধ্যে আমার কোডটিকে একটি .deb ইনস্টলার হিসাবে প্যাকেজ করেছি তাই আমি /usr/share/pam-configs/myappফাইলটি যুক্ত pam-auth-update --packageকরেছি postinstএবং আমার এবং prermস্ক্রিপ্টগুলিতে যুক্ত করেছি এবং আমি যেতে ভাল আছি!

সতর্কীকরণ ...

আপনি যদি উপরে উল্লিখিত PAMConfigFrameworkSpec নিবন্ধটি পড়েন তবে এটি একটি Session-Interactive-Onlyবিকল্প সংজ্ঞায়িত করে তবে কেবল নন-ইন্টারেক্টিভ বিধি নির্দিষ্ট করার উপায় নেই । তাই আপডেট করা/etc/pam.d/common-session হয়েছিল । আমি মনে করি না এটির কাছাকাছি উপায় আছে। যদি আপনি ইন্টারেক্টিভ সেশনগুলি সেই ব্যবহারকারীর জন্য লগ না করে ঠিক থাকেন (এটি কোনও পরিষেবা অ্যাকাউন্ট, তাই না?) তবে আপনার সব ঠিক করা উচিত!

বোনাস: কিভাবে sudo লগ আউটপুট অপসারণ করতে

ছাড়াও session openened|closedউল্লেখ্য PAM নিঃসরণ করে লাইন, sudoকমান্ড যে চালানো সম্পর্কে অতিরিক্ত তথ্য লগ করা হয়। দেখে মনে হচ্ছে:

[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...

আপনি যদি এটি সরাতে চান তবে এই লিঙ্কটি খুলুন নীচে চালিয়ে যান ...

সুতরাং ... আপনি সম্ভবত সাধারণত /etc/sudoers.d/___সেটআপের সাথে পরিচিত যা কোনও পরিষেবা অ্যাকাউন্টের জন্য এমন কিছু করতে পারে যা কিছু ক্রিয়াকলাপের জন্য সুপারসিউজার প্রাইভেস প্রয়োজন:

myuser ALL=(ALL) NOPASSWD: /bin/ping

যে ভিতরে যেতে পারে /etc/sudoers.d/10_myuser। ঠিক আছে, অন্যান্য জিনিসগুলির মধ্যে আপনিও উল্লেখ করতে পারেনDefaults । বিশেষভাবে এই সিনট্যাক্স নোট করুন'Defaults' ':' User_List

এখন, SUDOERS অপশন বিভাগটি দেখুন । আকর্ষণীয় বিট অন্তর্ভুক্ত log_input, log_outputকিন্তু (সম্ভবত) আরও গুরুত্বপূর্ণ, syslogএবং logfile। এটি আমার কাছে উপস্থিত হয়ে দেখা গেছে যে ডেবিয়ানের সাম্প্রতিক সংস্করণগুলিতে হয়, আরএসপ্লোগ বা sudoলগইন করুন stdoutবা stderrডিফল্টরূপে। সুতরাং আমার জন্য এটি আমার পরিষেবার জন্য জার্নালড লগে প্রদর্শিত হচ্ছে, এবং যেমন /var/log/auth.logএটি যেখানে আমার অ্যাপ্লিকেশন লগগুলিতে মিশ্রিত হবে না not সুডো লগিং অপসারণ করতে, আমি নিম্নলিখিতগুলিতে যুক্ত করেছি /etc/sudoers.d/10_myuserযাতে দেখে মনে হয়:

Defaults:myuser !logfile, !syslog
myuser ALL=(ALL) NOPASSWD: /bin/ping

ওয়াইএমএমভি, আপনি যদি লগিং অক্ষম করা অনুভব করেন তবে সুরক্ষা অডিটগুলির সাথে সমস্যাগুলি তৈরি হয় আপনি আরএসস্লগ ফিল্টারগুলির মাধ্যমে এটি সমাধান করার চেষ্টাও করতে পারেন।


আপনি "সেশন খোলা / বন্ধ" স্টাফটি যেভাবে প্রয়োগ করেছেন তা আমার পক্ষে কার্যকর হয়নি। দুটি কারণ রয়েছে: (১) আপনি ব্যবহারের জন্য নির্দিষ্ট করেন নি success=1, (যা পরবর্তী ধারাটি এড়িয়ে যায়), এবং (২) আপনি কীভাবে নির্দিষ্ট করেছেন service = sudo, কোনও চলমান সিআরএন চাকরির ফলস্বরূপ requirement "service = sudo" not met by user "root"। (এবং সম্ভবত অন্যান্য পার্শ্ব প্রতিক্রিয়া।) তবে, আপনার বোনাস স্টাফ দুর্দান্ত কাজ করেছে! ধন্যবাদ.
not2qubit

আপনার postinstএবং prermস্ক্রিপ্টগুলি কেমন দেখাচ্ছে?
not2qubit

@ not2qubit পুনরায়: success=1- আমি বরং pam_unixপুরোপুরি এড়িয়ে যাব না । আমি কেবল আউটপুটটি লগিং বন্ধ করতে চাই যা [default=ignore]পাম_উনিক্স বাদ না দিয়ে কেবল সূক্ষ্ম অর্জন করে।
thom_nic

পুনরায়: cronচাকরি এবং service = sudo: আপনার ক্রোন জবগুলি কোনও অপ্রয়োজনীয় ব্যবহারকারী হিসাবে চলছে, তবে আপনি sudoক্রোন কাজের অংশ হিসাবে কল দিচ্ছেন না ?
থোম_নিক

2

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

  1. আপনি rsyslog এর জন্য একটি কাস্টম স্ট্রিং ফিল্টার যুক্ত করতে পারেন : /etc/rsyslog.d/anyname.confব্যবহার করে:
    :msg, contains, "session opened for user root by pi" stop
  2. আপনি সরাসরি সম্পাদনা করতে পারেন /etc/pam.d/sudo
  3. আপনি এখানে কাস্টম পিএএম কনফিগারেশন ফাইল তৈরি করে সঠিক উপায়ে করতে পারেন: /usr/share/pam-configs/
  4. আপনি এখানে একটি কাস্টম sudoers ফাইল তৈরি করে কিছু করতে পারেন :/etc/sudoers.d/020_pi

আমি আপনাকে (2) এবং (4) কীভাবে করব তা দেখাব।

সতর্কতামূলক

/etc/pam.d/প্রথমে কোনও ফাইল তাদের বিশ্বের লেখার অনুমতি পরিবর্তন না করে সম্পাদনা করবেন না । যদি আপনি তা না করেন এবং কোনও ভুল করে থাকেন তবে আপনি ভবিষ্যতে সুডো / সু এর ব্যবহার থেকে লক হয়ে যেতে পারেন ! সুতরাং এটি পরিবর্তন করে দেওয়ার আগে আপনি নতুন সেটিংস পরীক্ষা করে দেখেছেন তা নিশ্চিত করুন। (ডিফল্ট 644 হয় )


"সেশন ওপেন / ক্লোজ" থেকে মুক্তি পাওয়ার জন্য:

আমরা নিম্নলিখিত /var/log/auth.logস্প্যাম থেকে মুক্তি পেতে চাই :

May 10 11:28:03 xxx sudo[26437]: pam_unix(sudo:session): session opened for user root by (uid=0)
May 10 11:28:07 xxx sudo[26437]: pam_unix(sudo:session): session closed for user root

এটা কর:

# sudo chmod 666 /etc/pam.d/sudo
# sudo cat /etc/pam.d/sudo

#%PAM-1.0

@include common-auth
@include common-account
session [success=1 default=ignore] pam_succeed_if.so quiet_success uid = 0 ruser = pi
@include common-session-noninteractive

এখানে অত্যন্ত গুরুত্বপূর্ণ যেটি success=1, তার অর্থ, সফল হলে পরবর্তী 1 টি ধারা (বা পিএএম লিঙ্গোতে "স্ট্যাকের পরবর্তী মডিউলটির উপরে ঝাঁপ দাও") এড়িয়ে যাওয়া।

থেকে man pam.conf:

উপেক্ষা করুন - যখন মডিউলগুলির একটি স্ট্যাক ব্যবহার করা হয়, মডিউলটির রিটার্নের স্থিতি অ্যাপ্লিকেশন প্রাপ্ত রিটার্ন কোডটিতে অবদান রাখবে না।

সম্পন্ন - মডিউল স্ট্যাক এবং PAM অবিলম্বে অ্যাপ্লিকেশনে ফিরে আসার পার্শ্ব প্রতিক্রিয়াটির সাথে ঠিক আছে।

এন - স্ট্যাকের পরবর্তী এন মডিউলগুলিতে ঝাঁপ দেওয়ার পার্শ্ব প্রতিক্রিয়াটির সাথে ঠিক আছে।

এরপরে, পুনরায় বুট করুন এবং এটি কাজ করে তা পরীক্ষা করতে কয়েক ঘন্টা (উদাহরণস্বরূপ ক্রোন জবগুলি পরীক্ষা করতে) চালাতে দিন। তারপরে ফাইলের অনুমতিগুলি পুনরায় ইনস্টল করার বিষয়টি নিশ্চিত করুন, অন্যথায় আপনার সিস্টেমে একটি ফাঁকা সুরক্ষা গর্ত থাকবে। ( sudo chmod 644 /etc/pam.d/sudo)


বারবার "TTY PWD COMMAND" বার্তা থেকে মুক্তি পেতে:

আমরা এই জাতীয় বার্তাগুলি থেকে মুক্তি পেতে চাই:

May 11 18:23:20 xxx sudo:       pi : TTY=unknown ; PWD=... ; USER=root ; COMMAND=/usr/bin/arp-scan -q -l

আমার ক্ষেত্রে, এটি একটি আইডিএস স্ক্রিপ্ট দ্বারা উত্পন্ন হয়েছিল যা প্রতি কয়েক মিনিট পরে আরপ-স্ক্যান চালাচ্ছিল । লগগুলিতে প্রদর্শিত হতে এটি সরাতে, নিম্নলিখিত ফাইলটি তৈরি করুন:

# sudo nano /etc/sudoers.d/020_pi
# sudo cat /etc/sudoers.d/020_pi

Defaults:pi     !logfile, !syslog
pi xxx = (root) NOPASSWD: /usr/bin/arp-scan

(এখানে xxxআপনার মেশিনের নাম এবং piএটি ব্যবহারকারীর নাম))


1
> /Etc/pam.d/ এ কোনও ফাইল সম্পাদনা করবেন না প্রথমে তাদের বিশ্ব লেখার অনুমতি পরিবর্তন না করে .... পরিবর্তে রুট হিসাবে অন্য টার্মিনাল অধিবেশন চালিয়ে যাওয়ার পরামর্শ দিন উদাহরণস্বরূপ sudo su - আপনাকে বিপজ্জনক অনুমতি এবং ঝুঁকির পরিবর্তনটি ভুলে যেতে হবে না এটা ফিরেছে.
থোম_নিকি

@ থম_নিক আপনি কি এটি পরীক্ষা করেছেন? আমার ধারণা হ'ল আপনি যদি দুর্ঘটনাক্রমে পিএএম-তে সুডো / স্যু ব্যবহার অবরুদ্ধ করেন তবে আপনি যা কিছু করেন না কেন, ত্রুটি তৈরি করবে এমনকি একটি শেল শেলও। যদি এটি না হয়, তবে প্যাম সম্ভবত এটির মতো কাজ করছে না।
not2qubit

-2

তুমি পাবে:

pam_succeed_if(sudo:session): unknown attribute "ruser"

আপনার উত্তর সহ

#%PAM-1.0

@include common-auth
@include common-account
@include common-session-noninteractive
session     [success=1 default=ignore] pam_succeed_if.so service in zabbix quiet use_uid
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid

কাজ করে তবে আপনি একটি পাবেন:

pam_unix(sudo:session): session opened for user root by (uid=0)

আপনার লগ ইন


1
দয়া করে উল্লেখ করুন: ১. আপনি কোন ফাইলটি সম্পাদনা করছেন, ২ "কে আপনি" এবং এটি কী সমাধান করে।
not2qubit
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.