আপনি একটি নির্দিষ্ট ব্যবহারকারীকে সনাক্ত করতে ফাইল সিস্টেম অবজেক্ট অ্যাক্সেস ইভেন্ট অডিটিং ব্যবহার করতে পারেন যিনি একটি নির্দিষ্ট ফাইল তৈরি, মুছে বা সংশোধন করেছেন। এই নিবন্ধে, আমরা আপনাকে দেখাব কিভাবে Windows Server 2016-এ একটি শেয়ার্ড নেটওয়ার্ক ফোল্ডারে ফাইলের জন্য ইভেন্ট অডিটিং কনফিগার করতে হয়। অডিটিং কনফিগার করার পরে, আপনি ইভেন্ট ভিউয়ার থেকে তথ্য ব্যবহার করে সেই ব্যবহারকারীকে খুঁজে পেতে পারেন যিনি ফাইলের নির্দিষ্ট ফাইল মুছে দিয়েছেন। সার্ভার
যখন আপনি একটি শেয়ার্ড নেটওয়ার্ক ফোল্ডার থেকে একটি ফাইল মুছে ফেলেন, এটি ব্যবহারকারীর রিসাইকেল বিনে পাঠানোর পরিবর্তে অবিলম্বে মুছে ফেলা হয়। শেয়ার ফোল্ডারে খোলা ফাইলের তালিকা নিম্নরূপ প্রাপ্ত করা যেতে পারে.
উইন্ডোজে ফাইল এবং ফোল্ডার অ্যাক্সেস অডিটিং নীতি কীভাবে সক্ষম করবেন?
ডিফল্টরূপে, উইন্ডোজ সার্ভারে ফাইল সিস্টেম অবজেক্ট অ্যাক্সেস অডিট সক্ষম হয় না। আপনি গ্রুপ নীতি ব্যবহার করে অডিট সেটিংস সক্ষম এবং কনফিগার করতে পারেন। আপনি যদি একাধিক সার্ভার বা কম্পিউটারে অডিট নীতিগুলি সক্ষম করতে চান তবে আপনি ডোমেন জিপিও ব্যবহার করতে পারেন (gpmc.msc
ব্যবহার করে কনফিগারযোগ্য mmc কনসোল)। আপনি যদি শুধুমাত্র একটি সার্ভারে অডিটিং কনফিগার করতে চান, আপনি স্থানীয় গ্রুপ নীতি সম্পাদক ব্যবহার করতে পারেন৷
- লোকাল গ্রুপ পলিসি এডিটর কনসোল খুলুন –
gpedit.msc
; - উন্নত অডিট নীতি সহ GPO বিভাগে যান:Windows Settings -> Security Settings -> Advanced Audit Policy Configuration -> Object Access;
- অডিট ফাইল সিস্টেম খুলুন নীতি এবং নির্দিষ্ট করুন যে আপনি ফাইল সিস্টেম অবজেক্টে শুধুমাত্র সফল অ্যাক্সেস ইভেন্টগুলি লগ করতে চান (নিম্নলিখিত অডিট ইভেন্টগুলি কনফিগার করুন -> সাফল্য ); আপনি অডিট অবজেক্ট অ্যাক্সেস ব্যবহার করে স্থানীয় অবজেক্ট অ্যাক্সেসের অডিটিং সক্ষম করতে পারেন Windows সেটিংস -> নিরাপত্তা সেটিংস -> স্থানীয় নীতি -> অডিট নীতি এর অধীনে নীতি . যাইহোক, ফাইল সিস্টেম অডিট নীতি ব্যবহার করা বাঞ্ছনীয় কারণ এটি শুধুমাত্র NTFS অ্যাক্সেস ইভেন্ট ট্র্যাক করে।
- পরিবর্তনগুলি সংরক্ষণ করুন এবং কমান্ড ব্যবহার করে আপনার স্থানীয় গ্রুপ নীতি সেটিংস আপডেট করুন:
gpupdate /force
.
একটি ভাগ করা ফোল্ডারে ফাইল মুছে ফেলা অডিট সেটিংস কনফিগার করা
আপনি যে শেয়ার নেটওয়ার্ক ফোল্ডারে অ্যাক্সেস ট্র্যাক করতে চান তার বৈশিষ্ট্যগুলিতে এখন আপনাকে অডিটিং কনফিগার করতে হবে৷ ফাইল এক্সপ্লোরার চালান এবং ফোল্ডার বৈশিষ্ট্য খুলুন। নিরাপত্তা-এ যান ট্যাব উন্নত ক্লিক করুন বোতাম -> অডিটিং-এ যান ট্যাব।
যদি এই বার্তাটি “আপনাকে একজন প্রশাসক হতে হবে বা এই বস্তুর অডিট বৈশিষ্ট্যগুলি দেখার জন্য আপনাকে উপযুক্ত সুযোগ দেওয়া হয়েছে ” প্রদর্শিত হয়, চালিয়ে যান ক্লিক করুন বোতাম।
তারপর যোগ করুন ক্লিক করুন৷ যে ব্যবহারকারী বা গোষ্ঠীর জন্য আপনি অডিট ইভেন্টগুলি ক্যাপচার করতে চান তা নির্দিষ্ট করতে বোতাম। আপনি যদি সমস্ত ব্যবহারকারীর জন্য অ্যাক্সেস ইভেন্টগুলি ট্র্যাক করতে চান তবে সবাইকে নির্দিষ্ট করুন৷ দল
তারপরে আপনাকে নির্দিষ্ট করতে হবে যে বস্তুটি অ্যাক্সেস করার জন্য ব্যবহার করা অনুমতিগুলি লগ করা উচিত। ইভেন্ট লগে শুধুমাত্র ফাইল মুছে ফেলার ইভেন্টগুলি সংরক্ষণ করতে, উন্নত অনুমতিগুলি দেখান ক্লিক করুন বোতাম ইভেন্ট তালিকায়, শুধুমাত্র ফোল্ডার এবং ফাইল মুছে ফেলার ইভেন্টগুলির জন্য অডিটিং ছেড়ে দিন – মুছুন এবং সাবফোল্ডার এবং ফাইল মুছুন .
টিপ . মনে রাখবেন যে Windows অবজেক্টের জন্য অডিটিং নীতির জন্য অতিরিক্ত কম্পিউটিং সংস্থান প্রয়োজন। এটি সাবধানে ব্যবহার করুন, সর্বদা লগ করার জন্য অডিট অবজেক্ট এবং ইভেন্টের সংখ্যা কমানোর চেষ্টা করুন৷
$Path = "E:\Public"
$AuditChangesRules = New-Object System.Security.AccessControl.FileSystemAuditRule('Everyone', 'Delete,DeleteSubdirectoriesAndFiles', 'none', 'none', 'Success')
$Acl = Get-Acl -Path $Path
$Acl.AddAuditRule($AuditChangesRules)
Set-Acl -Path $Path -AclObject $Acl
এখন, ব্যবহারকারী শেয়ার্ড নেটওয়ার্ক ফোল্ডারে কোনো ফাইল বা ফোল্ডার মুছে ফেললে, ফাইল সিস্টেম -> অডিট সাকসেস ফাইল ডিলিট ইভেন্টটি ইভেন্ট আইডি 4663 সহ সিকিউরিটি লগে প্রদর্শিত হবে। Microsoft Windows নিরাপত্তা অডিটিং থেকে উৎস।
ইভেন্ট ভিউয়ার খুলুন mmc কনসোল (eventvwr.msc
), Windows লগ প্রসারিত করুন -> নিরাপত্তা অধ্যায়. EventID 4663 দ্বারা ইভেন্ট লগ ফিল্টার সক্ষম করুন।
ইভেন্ট ভিউয়ারে বাকি যে কোনো ইভেন্ট খুলুন। আপনি দেখতে পাচ্ছেন, এতে মুছে ফেলা ফাইলের নাম, ফাইলটি মুছে ফেলা ব্যবহারকারীর অ্যাকাউন্ট এবং প্রক্রিয়ার নাম সম্পর্কে তথ্য রয়েছে৷
<প্রে>একটি বস্তু অ্যাক্সেস করার চেষ্টা করা হয়েছে।বিষয়:নিরাপত্তা আইডি: CORP\jsmithঅ্যাকাউন্টের নাম: jsmithAccount ডোমেন: CORLogon ID: 0x32B12627অবজেক্ট:অবজেক্ট সার্ভার: অবজেক্ট:আইডি সার্ভার: File:সিকিউরিটিঅবজেক্ট/এবজেক্ট/এবজেক্ট/এবজেক্ট টিএক্স:ডি-আপ গুণাবলী: S:AIProcess তথ্য:প্রসেস আইডি: 0x4 প্রক্রিয়ার নাম:অ্যাক্সেস অনুরোধের তথ্য:অ্যাক্সেস: DELETEAaccess মাস্ক: 0x10000
ফাইল অ্যাক্সেস অডিটিং নীতি সক্রিয় করার পরে, আপনি নিরাপত্তা লগে খুঁজে পেতে পারেন :
- কে শেয়ার করা নেটওয়ার্ক ফোল্ডার থেকে ফাইলটি মুছে দিয়েছে এবং কখন এটি ঘটেছে;
- ফাইল মুছে ফেলার জন্য কোন অ্যাপ্লিকেশন (প্রক্রিয়া) ব্যবহার করা হয়েছিল;
- ব্যাকআপ পুনরুদ্ধার করার তারিখ কি।
এসকিউএল ডেটাবেস (MySQL/MSSQL) এ ফাইল মুছে ফেলার ঘটনাগুলি কীভাবে লিখবেন?
যাইহোক, এমনকি যদি মুছে ফেলা ফাইলগুলির অডিট সক্ষম করা থাকে, লগগুলিতে কিছু খুঁজে পাওয়া সমস্যা হতে পারে। প্রথমত, হাজার হাজার ইভেন্টের মধ্যে একটি নির্দিষ্ট এন্ট্রি খুঁজে পাওয়া বেশ কঠিন (উইন্ডোজে একটি নমনীয় ফিল্টার সহ একটি ইভেন্ট অনুসন্ধান করার জন্য কোন সুবিধাজনক টুল নেই)। দ্বিতীয়ত, যদি একটি ফাইল অনেক আগে মুছে ফেলা হয়, তাহলে এই ইভেন্টটি লগগুলিতে অনুপস্থিত থাকতে পারে, যেহেতু এটি নতুন ইভেন্ট দ্বারা ওভাররাইট করা হয়েছে৷
আপনি SQL ডাটাবেসে সমস্ত ফাইল মুছে ফেলা ইভেন্ট সংরক্ষণ করতে পারেন। আপনি আপনার ইভেন্টগুলি সঞ্চয় করতে Microsoft SQL সার্ভার, ইলাস্টিকসার্চ, বা MySQL/MariaDB ডেটাবেস ব্যবহার করতে পারেন৷
এই উদাহরণে, আমরা আপনাকে দেখাব কিভাবে একটি MySQL-এ একটি পৃথক ডাটাবেস টেবিলে অডিট ইভেন্টগুলি লগ করতে হয়। আমি নিম্নলিখিত টেবিল বিন্যাস ব্যবহার করব:
- সার্ভারের নাম;
- মুছে ফেলা ফাইলের নাম;
- তারিখ এবং সময়;
- ফাইলটি মুছে ফেলা ব্যবহারকারীর নাম।
এই টেবিলটি তৈরি করার জন্য MySQL ক্যোয়ারীটি এরকম দেখাচ্ছে:
CREATE TABLE deleted_items (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), file_name VARCHAR(255), dt_time DATETIME, user_name VARCHAR(100), PRIMARY KEY (ID));
আপনি যদি মাইক্রোসফ্ট এসকিউএল সার্ভার ডাটাবেস ব্যবহার করতে চান তবে নিবন্ধটি দেখুন “কীভাবে PowerShell থেকে একটি MSSQL সার্ভার কোয়েরি চালাবেন?”
বর্তমান দিনের নিরাপত্তা লগ থেকে EventID 4663 এর সাথে ইভেন্টগুলি পেতে, আপনি নিম্নলিখিত PowerShell স্ক্রিপ্টটি ব্যবহার করতে পারেন:
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = [xml]$_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data[6]."#text"
$User = $event.Event.EventData.Data[1]."#text"
$Computer = $event.Event.System.computer
}
}
পরবর্তী PowerShell স্ক্রিপ্টটি একটি দূরবর্তী সার্ভারে (আইপি ঠিকানা 10.1.1.13 সহ):
Add-Type –Path ‘C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5\MySql.Data.dll'
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@{ConnectionString='server=10.1.1.13;uid=posh;pwd=P@ssw0rd;database=aduser'}
$Connection.Open()
$sql = New-Object MySql.Data.MySqlClient.MySqlCommand
$sql.Connection = $Connection
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = [xml]$_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data[6]."#text"
$File = $File.Replace(‘\’,’|’)
$User = $event.Event.EventData.Data[1]."#text"
$Computer = $event.Event.System.computer
$sql.CommandText = "INSERT INTO deleted_items (server,file_name,dt_time,user_name ) VALUES ('$Computer','$File','$Time','$User')"
$sql.ExecuteNonQuery()
}
}
$Reader.Close()
$Connection.Close()
এখন, "AnnualReport.DOC ফাইলটি কে মুছেছে তা খুঁজে বের করতে৷ ", PowerShell কনসোলে নিম্নলিখিত স্ক্রিপ্ট চালানোর জন্য এটি যথেষ্ট:$DeletedFile = "%AnnualReport.DOC%"
Set-ExecutionPolicy RemoteSigned
Add-Type –Path ‘C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5\MySql.Data.dll'
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@{ConnectionString='server=10.1.1.13;uid=posh;pwd=P@ssw0rd;database=aduser'}
$Connection.Open()
$MYSQLCommand = New-Object MySql.Data.MySqlClient.MySqlCommand
$MYSQLDataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter
$MYSQLDataSet = New-Object System.Data.DataSet
$MYSQLCommand.Connection=$Connection
$MYSQLCommand.CommandText="SELECT user_name,dt_time from deleted_items where file_name LIKE '$DeletedFile'"
$MYSQLDataAdapter.SelectCommand=$MYSQLCommand
$NumberOfDataSets=$MYSQLDataAdapter.Fill($MYSQLDataSet, "data")
foreach($DataSet in $MYSQLDataSet.tables[0])
{
write-host "User:" $DataSet.user_name "at:" $DataSet.dt_time
}
$Connection.Close()
আপনি এখন পিএস কনসোলে ব্যবহারকারীর নাম এবং ফাইলটি মুছে ফেলার সময় দেখতে পারেন।
দ্রষ্টব্য . যেহেতু একটি সমস্যা পাওয়া গেছে যে প্রতীক “
\
” ডাটাবেসে লেখা হয় না, আমরা এটিকে “|
এর জন্য প্রতিস্থাপন করেছি ” তাই যদি আপনাকে ফাইলটির সম্পূর্ণ পথ প্রদর্শন করতে হয়, আপনি ডাটাবেস থেকে নির্বাচন করার সময় একটি বিপরীত প্রতিস্থাপন করতে পারেন:
$DataSet.file_name.Replace(‘|’,’\’).
ইভেন্ট লগ থেকে ডাটাবেসে তথ্য লেখার স্ক্রিপ্ট দিনের শেষে টাস্ক শিডিউলার ব্যবহার করে চালানো যেতে পারে বা ফাইল মুছে ফেলার ইভেন্টআইডি (অন ইভেন্ট) এর সাথে সংযুক্ত করা যেতে পারে, যা আরও সম্পদ-ব্যবহারকারী। এটি সিস্টেমের প্রয়োজনীয়তার উপর নির্ভর করে।
টিপ . নিশ্চিত করুন যে আপনি সিকিউরিটি ইভেন্ট লগ ফাইলের সর্বাধিক আকার সেট করেছেন যাতে দিনের জন্য সমস্ত ইভেন্ট লগ করার জন্য যথেষ্ট বড় হয়৷ অন্যথায়, আপনাকে দিনে একাধিকবার বা এমনকি ট্রিগারেও ডাটাবেসে ডেটা এক্সপোর্ট করার কাজ চালাতে হবে। সাধারণত, সর্বাধিক লগ আকার ওয়ার্কস্টেশনে কমপক্ষে 64 হতে হবে MB, এবং 262 উইন্ডোজ ফাইল সার্ভারে এমবি। পুরানো ইভেন্টগুলি ওভাররাইট করার বিকল্পটি সক্রিয় রেখে দেওয়া উচিত (প্রয়োজন অনুসারে ইভেন্টগুলি ওভাররাইট করুন )।
যদি প্রয়োজন হয়, আপনি একটি সহজ PHP ওয়েব পেজ তৈরি করতে পারেন যে ব্যবহারকারীরা ফাইল মুছে ফেলেছে তাদের সম্পর্কে তথ্য পেতে আরও সুবিধাজনক আকারে৷
গুরুত্বপূর্ণ টিপ . যদি লগটিতে এমন একটি এন্ট্রি থাকে যে ফাইলটি ব্যবহারকারী দ্বারা মুছে ফেলা হয়েছে, তাহলে এটিকে ইচ্ছাকৃত বা দূষিত ক্রিয়া হিসাবে ব্যাখ্যা করার জন্য তাড়াহুড়ো করবেন না। অনেক প্রোগ্রাম (বিশেষত এমএস অফিস অ্যাপস) পরিবর্তনগুলি সংরক্ষণ করার সময় একটি অস্থায়ী ফাইল তৈরি করে এবং তারপরে ফাইলটির পুরানো সংস্করণ মুছে দেয়। এই ক্ষেত্রে, প্রক্রিয়ার নামের লগিং সক্ষম করুন (ProcessName fileld), যেখান থেকে ফাইলটি মুছে ফেলা হয়েছিল, এবং আপনি এটির উপর ভিত্তি করে ফাইল মুছে ফেলার ঘটনাগুলি পার্স করতে পারেন৷ অথবা আপনি winword.exe, excel.exe, ইত্যাদির মতো প্রক্রিয়াগুলি থেকে ইভেন্টগুলি ফিল্টার করতে পারেন।ফাইল লগ করা একটি পাঠ্য ফাইলে অডিট ইভেন্ট মুছে দেয়
আপনি যদি একটি পৃথক ডাটাবেস সার্ভার ব্যবহার করতে না চান, আপনি একটি প্লেইন টেক্সট লগ ফাইলে ফাইল মুছে ফেলার অডিট ইভেন্টগুলি সংরক্ষণ করতে পারেন। একটি টেক্সট ফাইলে আপনার আউটপুট সংরক্ষণ করতে এই পাওয়ারশেল স্ক্রিপ্টটি ব্যবহার করুন:
$Outfile = "C:\Logs\Deleted-file-history-log.txt"
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = [xml]$_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data[6]."#text"
$User = $event.Event.EventData.Data[1]."#text"
$strLog = $Computer + " " + $File + " " + $Time + " " + $User
$strLog | out-file $Outfile –append
}
}
সুতরাং, আমরা শেয়ার করা নেটওয়ার্ক ফোল্ডারে মুছে ফেলা ফাইলগুলির তথ্য অডিট এবং সংরক্ষণ করার জন্য একটি ধারণা এবং সিস্টেমের সাধারণ মডেলের পরামর্শ দিয়েছি। প্রয়োজন হলে, আপনার প্রয়োজনীয়তা পূরণের জন্য এটি সহজেই পরিবর্তন করা যেতে পারে।