आप किसी विशिष्ट उपयोगकर्ता की पहचान करने के लिए फ़ाइल सिस्टम ऑब्जेक्ट एक्सेस इवेंट ऑडिटिंग का उपयोग कर सकते हैं जिसने किसी विशिष्ट फ़ाइल को बनाया, हटाया या संशोधित किया है। इस लेख में, हम आपको दिखाएंगे कि विंडोज सर्वर 2016 पर एक साझा नेटवर्क फ़ोल्डर पर फ़ाइलों के लिए ईवेंट ऑडिटिंग को कैसे कॉन्फ़िगर किया जाए। ऑडिटिंग को कॉन्फ़िगर करने के बाद, आप उस उपयोगकर्ता को खोजने के लिए इवेंट व्यूअर से जानकारी का उपयोग कर सकते हैं जिसने फ़ाइल पर विशिष्ट फ़ाइल को हटा दिया है। सर्वर।
जब आप किसी साझा नेटवर्क फ़ोल्डर से किसी फ़ाइल को हटाते हैं, तो उसे उपयोगकर्ता के रीसायकल बिन में भेजे जाने के बजाय तुरंत हटा दिया जाता है। शेयर फोल्डर पर खोली गई फाइलों की सूची निम्नानुसार प्राप्त की जा सकती है।
विंडोज पर फाइल और फोल्डर एक्सेस ऑडिटिंग पॉलिसी को कैसे इनेबल करें?
डिफ़ॉल्ट रूप से, विंडोज सर्वर पर फाइल सिस्टम ऑब्जेक्ट एक्सेस ऑडिट सक्षम नहीं है। आप समूह नीति का उपयोग करके ऑडिट सेटिंग्स को सक्षम और कॉन्फ़िगर कर सकते हैं। यदि आपको एकाधिक सर्वर या कंप्यूटर पर ऑडिट नीतियों को सक्षम करने की आवश्यकता है, तो आप डोमेन जीपीओ (gpmc.msc
का उपयोग करके कॉन्फ़िगर करने योग्य) का उपयोग कर सकते हैं। एमएमसी कंसोल)। यदि आप केवल एक सर्वर पर ऑडिटिंग कॉन्फ़िगर करना चाहते हैं, तो आप स्थानीय समूह नीति संपादक का उपयोग कर सकते हैं।
- स्थानीय समूह नीति संपादक कंसोल खोलें -
gpedit.msc
; - उन्नत ऑडिट नीतियों के साथ GPO अनुभाग पर जाएं:Windows सेटिंग्स -> सुरक्षा सेटिंग्स -> उन्नत ऑडिट नीति कॉन्फ़िगरेशन -> ऑब्जेक्ट एक्सेस;
- ऑडिट फ़ाइल सिस्टम खोलें नीति बनाएं और निर्दिष्ट करें कि आप सिस्टम ऑब्जेक्ट को फ़ाइल करने के लिए केवल सफल एक्सेस इवेंट लॉग करना चाहते हैं (निम्न ऑडिट ईवेंट कॉन्फ़िगर करें -> सफलता ); आप ऑब्जेक्ट ऑब्जेक्ट एक्सेस का ऑडिट करें . का उपयोग करके स्थानीय ऑब्जेक्ट एक्सेस की ऑडिटिंग को भी सक्षम कर सकते हैं 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 सुरक्षा ऑडिटिंग . से स्रोत।
ईवेंट व्यूअर खोलें एमएमसी कंसोल (eventvwr.msc
), Windows लॉग्स . को विस्तृत करें -> सुरक्षा अनुभाग। EventID 4663 द्वारा ईवेंट लॉग फ़िल्टर सक्षम करें।
ईवेंट व्यूअर में कोई भी शेष ईवेंट खोलें। जैसा कि आप देख सकते हैं, इसमें हटाई गई फ़ाइल के नाम, फ़ाइल को हटाने वाले उपयोगकर्ता के खाते और प्रक्रिया के नाम के बारे में जानकारी है।
किसी ऑब्जेक्ट तक पहुंचने का प्रयास किया गया था विशेषताएं: S:AIProcess जानकारी:प्रक्रिया आईडी: 0x4 प्रक्रिया का नाम:एक्सेस अनुरोध जानकारी:एक्सेस:
फ़ाइल एक्सेस ऑडिटिंग नीति को सक्षम करने के बाद, आप सुरक्षा लॉग में पा सकते हैं:
- साझा नेटवर्क फ़ोल्डर से फ़ाइल को किसने हटाया और कब हुआ;
- फ़ाइल को हटाने के लिए किस एप्लिकेशन (प्रक्रिया) का उपयोग किया गया था;
- बैकअप को पुनर्स्थापित करने की तिथि क्या है।
SQL डेटाबेस (MySQL/MSSQL) में फ़ाइल हटाने की घटनाओं को कैसे लिखें?
हालाँकि, भले ही हटाई गई फ़ाइलों का ऑडिट सक्षम हो, लॉग में कुछ खोजने में परेशानी हो सकती है। सबसे पहले, हजारों घटनाओं के बीच एक विशिष्ट प्रविष्टि खोजना काफी कठिन है (विंडोज़ में एक लचीले फिल्टर के साथ एक घटना को खोजने के लिए कोई सुविधाजनक उपकरण नहीं है)। दूसरे, यदि कोई फ़ाइल बहुत समय पहले हटा दी गई थी, तो यह ईवेंट लॉग में अनुपस्थित हो सकता है, क्योंकि इसे नए ईवेंट द्वारा अधिलेखित कर दिया गया था।
आप सभी फाइल डिलीट इवेंट्स को SQL डेटाबेस में सेव कर सकते हैं। आप अपने ईवेंट को संग्रहीत करने के लिए Microsoft SQL Server, Elasticsearch, या 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));
यदि आप माइक्रोसॉफ्ट एसक्यूएल सर्वर डेटाबेस का उपयोग करना चाहते हैं, तो लेख "पावरशेल से एमएसएसक्यूएल सर्वर क्वेरी कैसे चलाएं?" देखें।
वर्तमान दिन के लिए सुरक्षा लॉग से 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
}
}
अगली पावरशेल स्क्रिप्ट एक दूरस्थ सर्वर (आईपी पते 10.1.1.13 के साथ) पर MySQL डेटाबेस में प्राप्त होने वाले डेटा को लिखेगी:
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()
अब, यह पता लगाने के लिए कि "वार्षिक रिपोर्ट.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()
अब आप PS कंसोल में उपयोगकर्ता नाम और फ़ाइल को हटाए जाने का समय देख सकते हैं।
नोट . चूंकि एक समस्या का पता चला है कि प्रतीक “
\
"डेटाबेस पर नहीं लिखा गया है, हमने इसे "|
. के लिए बदल दिया है " इसलिए यदि आपको फ़ाइल का पूरा पथ प्रदर्शित करना है, तो आप डेटाबेस से चयन करते समय एक रिवर्स प्रतिस्थापन कर सकते हैं:
$DataSet.file_name.Replace(‘|’,’\’).
इवेंट लॉग से डेटाबेस में जानकारी लिखने की स्क्रिप्ट को टास्क शेड्यूलर का उपयोग करके दिन के अंत में चलाया जा सकता है या फ़ाइल विलोपन EventID (ऑन इवेंट) से जोड़ा जा सकता है, जो अधिक संसाधन-खपत है। यह सिस्टम की आवश्यकताओं पर निर्भर करता है।
युक्ति . सुनिश्चित करें कि आपने सुरक्षा इवेंट लॉग फ़ाइल का अधिकतम आकार उस दिन के सभी ईवेंट लॉग करने के लिए पर्याप्त रूप से बड़ा करने के लिए सेट किया है। अन्यथा, आपको दिन में एक बार या ट्रिगर पर भी डेटा को डेटाबेस में निर्यात करने का कार्य अधिक बार चलाना होगा। आमतौर पर, अधिकतम लॉग आकार कार्यस्थानों पर कम से कम 64 . होना चाहिए एमबी, और 262 विंडोज फाइल सर्वर पर एमबी। पुराने ईवेंट को अधिलेखित करने का विकल्प सक्षम छोड़ दिया जाना चाहिए (आवश्यकतानुसार ईवेंट को अधिलेखित करें )।
यदि आवश्यक हो, तो आप उन उपयोगकर्ताओं के बारे में जानकारी प्राप्त करने के लिए एक सरल PHP वेब पेज बना सकते हैं, जिन्होंने फ़ाइलों को अधिक सुविधाजनक रूप में हटा दिया है।
महत्वपूर्ण युक्ति . यदि लॉग में एक प्रविष्टि है कि फ़ाइल को उपयोगकर्ता द्वारा हटा दिया गया था, तो इसे जानबूझकर या दुर्भावनापूर्ण कार्रवाई के रूप में व्याख्या करने में जल्दबाजी न करें। कई प्रोग्राम (विशेष रूप से MS Office ऐप्स) परिवर्तनों को सहेजते समय एक अस्थायी फ़ाइल बनाते हैं और फिर फ़ाइल के पुराने संस्करण को हटा देते हैं। इस मामले में, प्रक्रिया नाम (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
}
}
इसलिए, हमने साझा नेटवर्क फ़ोल्डरों में हटाई गई फ़ाइलों के बारे में जानकारी को ऑडिट और संग्रहीत करने के लिए एक विचार और सिस्टम के सामान्य मॉडल का सुझाव दिया है। यदि आवश्यक हो, तो इसे आपकी आवश्यकताओं को पूरा करने के लिए आसानी से संशोधित किया जा सकता है।