วันพุธที่ 30 มิถุนายน พ.ศ. 2553
Basic vi Command
vi เป็น full screen editor ซึ่งการทำงานจะมีสองโหมด คือ
1. command mode ซึ่งหากพิมพ์อะไรในโหมดนี้ก็จะเป็นคำสั่งที่ดำเนินการบนโปรแกรมทั้งสิ้น
2. insert mode เป็นโหมดที่ใช้เพิ่ม แก้ไข เนื้อหาหรือข้อมูลในไฟล์
เราสามารถเข้าสู่ insert mode โดยการกด i และกลับสู่ command mode โดยกด Esc ครับ
เริ่มใช้งานกันเลย...
เราสามารถเปิด text file เพื่อเข้าไปสร้างหรือแก้ไขข้อความโดยใช้คำสั่ง vi แล้วตามด้วย filename
$vi example.txt
เมื่อต้องการจะออกจาก vi...
หลังจากที่เราเข้าไปจัดการเขียนหรือแก้ไขข้อมูลเรียบร้อยแล้วหากเราต้องการจะออกจากโปรแกรม vi ก็อย่าลืมนะครับว่าเราจะต้องกลับเข้าสู่ command mode ซะก่อนโดยกด Esc ซึ่งวิธีดูว่าเราอยู่ command mode หรือไม่นั้นให้เราดูที่ cursor ก็ได้ครับ หากอยู่ command mode เจ้า cursor จะอยู่ด้านล่างของจอเมื่อเรากด colon (:) ครับ โดยคำสั่งที่ใช้ออกจาก vi มีดังนี้
:wq = บันทึกข้อมูลที่ได้เขียนหรือแก้ไขในไฟล์นั้นๆ แล้วออกจากโปรแกรม
:q = ออกจากโปรแกรม
:q! = ออกจากโปรแกรมโดยไม่บันทึกข้อมูลในส่วนที่เพิ่มเติมหรือแก้ไขในไฟล์นั้นๆ
การเลื่อน cursor...
ในโปรแกรม vi แท้ๆ นั้นจะไม่สามารถใช้ลูกศรเลื่อน cursor ได้เหมือนกับโปรแกรม editor ทั่วๆ ไป โดยเฉพาะอย่างยิ่งถ้าหากทำงานบน Unix แท้ๆ แล้วนั้นจะต้องใช้ command mode ในการเลื่อน cursor เท่านั้น โดย key ที่ใช้ในการเลื่อน cursor มีดังนี้
j = เลื่อนลง 1 บรรทัด
k = เลื่อนขึ้น 1 บรรทัด
h = เลื่อนไปทางซ้าย 1 ตัวอักษร
l = เลื่อนไปทางขวา 1 ตัวอักษร
0 = เลื่อนไปยังตำแหน่งเริ่มต้นของบรรทัดปัจจุบัน
$ = เลื่อนไปยังตำแหน่งสุดท้ายของบรรทัด
:0 = เลื่อนไปยังบรรทัดแรกของไฟล์
:ตัวเลข = ไปยังบรรทัดของตัวเลขนั้นๆ
:$ = ไปยังบรรทัดสุดท้าย
ยังมีอีกเยอะเลย นี่เพิ่งแค่เริ่มต้น เดี๋ยวว่างๆ จะมาพิมพ์ต่อนะครับ
วันศุกร์ที่ 25 มิถุนายน พ.ศ. 2553
Script สำหรับตรวจสอบรหัสผ่านใกล้หมดอายุบน AcitiveDirectory
'++++++++ Begin of Script ++++++++++++++++
' VB Script for Check User Password Expire on Active Directory Server
' 1st Revision
' By: John Savill, 8th June 2005
' Runs check on last password change date
'
' Last Updated
' By: Chanin Luangingkasut, 24 June 2010
' Create log file
'=================================
Option Explicit
Dim objCommand, objConnection, objChild, objUserConnection, strBase, strFilter, strAttributes, strPasswordChangeDate, intPassAge
Dim lngTZBias, objPwdLastSet, strEmailAddress, objMessage
Dim objShell, lngBiasKey, k, PasswordExpiry, strRootDomain
Dim strQuery, objRecordset, strName, strCN
Dim CheckNoRecord, MAXRECORD, EXPIREIN, PWDNOTIFICATION
' *********** SETUP LOG FILE ***************
Dim objFSO, objFolder, objTextFile, objFile
Dim strDirectory, strFile, strText
Dim myDateString, myTimeString, d
' ****** Check current time and date ********
d = Now
myTimeString = Right("00" & Hour(d), 2) & "" & Right("00" & Minute(d), 2) & "" & Right("00" & Second(d), 2)
myDateString = FormatDateTime(Date(), 1)
' ********* Create file and directory ***********
strDirectory = "d:\PasswordExpireLog"
strFile = "\passwordExpireReport_" & myDateString & "_Time_" & myTimeString & ".log"
' Create the File System Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
' Check that the strDirectory folder exists
If objFSO.FolderExists(strDirectory) Then
Set objFolder = objFSO.GetFolder(strDirectory)
Else
Set objFolder = objFSO.CreateFolder(strDirectory)
WScript.Echo "Just created " & strDirectory
End If
If objFSO.FileExists(strDirectory & strFile) Then
Set objFolder = objFSO.GetFolder(strDirectory)
Else
Set objFile = objFSO.CreateTextFile(strDirectory & strFile)
'Wscript.Echo "Just created " & strDirectory & strFile
End If
set objFile = nothing
set objFolder = nothing
' OpenTextFile Method needs a Const value
' ForAppending = 8 ForReading = 1, ForWriting = 2
Const ForAppending = 8
Set objTextFile = objFSO.OpenTextFile(strDirectory & strFile, ForAppending, True)
' ************** End of Create Log file ****************
' ***CHANGE THESE VALUES TO PASSWORD EXPIRY AND ROOT OF WHERE USERS WILL BE SEARCHED ******
PasswordExpiry=90
EXPIREIN = 15
MAXRECORD = 150
strRootDomain="dc=example,dc=com"
' ***********************************************
' Obtain local Time Zone bias from machine registry.
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias")
If UCase(TypeName(lngBiasKey)) = "LONG" Then
lngTZBias = lngBiasKey
ElseIf UCase(TypeName(lngBiasKey)) = "VARIANT()" Then
lngTZBias = 0
For k = 0 To UBound(lngBiasKey)
lngTZBias = lngTZBias + (lngBiasKey(k) * 256^k)
Next
End If
Set objCommand = CreateObject("ADODB.Command")
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
objCommand.ActiveConnection = objConnection
strBase = "
strFilter = "(&(objectCategory=person)(objectClass=user))"
strAttributes = "sAMAccountName,cn,mail,pwdLastSet,distinguishedName"
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
objCommand.CommandText = strQuery
objCommand.Properties("Page Size") = 100
objCommand.Properties("Timeout") = 30
objCommand.Properties("Cache Results") = False
Set objRecordSet = objCommand.Execute
' WScript.echo "Running at " & Date()
CheckNoRecord = 0
' ******************* IN LOOP *******************
Do Until objRecordSet.EOF
strName = objRecordSet.Fields("sAMAccountName").Value
strCN = objRecordSet.Fields("cn").value
strEmailAddress = objRecordSet.Fields("mail").value
CheckNoRecord = CheckNoRecord + 1
' ********** ALERT BOX & WRITE FILE SHOW USER NAME *************
'Wscript.Echo "NT Name: " & strName & ", Common Name: " & strCN
'objTextFile.WriteLine("NT Name: " & strName & ", Common Name: " & strCN)
Set objUserConnection = GetObject("LDAP://" & objRecordSet.Fields("distinguishedName").Value)
Set objPwdLastSet = objUserConnection.pwdLastSet
strPasswordChangeDate = Integer8Date(objPwdLastSet, lngTZBias)
' *********** ALERT BOX SHOW & WRITE FILE LAST CHANGE DATE ************
'WScript.Echo vbTab & "Password last changed at " & strPasswordChangeDate
'objTextFile.WriteLine("Password last changed at " & strPasswordChangeDate)
intPassAge = DateDiff("d", strPasswordChangeDate, Now)
' **** ALERT BOX SHOW & WRITE FILE TOTAL DAYS FROM LAST CHANGE DATE *****
'WScript.Echo vbTab & "Password changed " & intPassAge & " days ago"
'objTextFile.WriteLine("Password changed " & intPassAge & " days ago")
If intPassAge >= PasswordExpiry Then
objTextFile.WriteLine("-- Following user do not change password long time ago, account may be administrator or disable user. ")
objTextFile.WriteLine("-- NT Name: " & strName & ", Common Name: " & strCN)
objTextFile.WriteLine("-- Password last changed at " & strPasswordChangeDate)
objTextFile.WriteLine("-- Password changed " & intPassAge & " days ago, for security reason must change every " & PasswordExpiry & " days")
objTextFile.WriteLine(" ")
Else
PWDNOTIFICATION = (PasswordExpiry - intPassAge)
If EXPIREIN >= PWDNOTIFICATION Then
objTextFile.WriteLine(">> NT Name: " & strName & ", Common Name: " & strCN)
objTextFile.WriteLine(">> Password last changed at " & strPasswordChangeDate)
objTextFile.WriteLine(">> Password changed " & intPassAge & " days ago")
objTextFile.WriteLine(">> Sending user notification to " & strEmailAddress & " that password expires in " & PWDNOTIFICATION & " days")
objTextFile.WriteLine(" ")
End If
End If
' *** Remove or Comment this part if you want to check all users on your server ****
If CheckNoRecord = MAXRECORD Then
Exit Do
End if
' *****************************************************
objRecordSet.MoveNext
Loop
objTextFile.WriteLine("================================")
objTextFile.WriteLine("TOTAL Scan: " & CheckNoRecord)
objTextFile.Close
objConnection.Close
Function Integer8Date(objDate, lngBias)
' Function to convert Integer8 (64-bit) value to a date, adjusted for
' local time zone bias.
Dim lngAdjust, lngDate, lngHigh, lngLow
lngAdjust = lngBias
lngHigh = objDate.HighPart
lngLow = objdate.LowPart
' Account for error in IADslargeInteger property methods.
If lngLow < 0 Then
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0) Then
lngAdjust = 0
End If
lngDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
+ lngLow) / 600000000 - lngAdjust) / 1440
' Trap error if lngDate is overly large
On Error Resume Next
Integer8Date = CDate(lngDate)
If Err.Number <> 0 Then
On Error GoTo 0
Integer8Date = #1/1/1601#
End If
On Error GoTo 0
End Function
Sub SendEmailMessage(strDestEmail, strNoOfDays)
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Password Expires in " & strNoOfDays & " days"
objMessage.Sender = "IT ADMIN DO NOT REPLY"
objMessage.To = strDestEmail
objMessage.TextBody = "Your password expires in " & strNoOfDays & " days. Please goto http://changepass.com and reset"
objMessage.Send
End Sub
' +++++++++++++++++++ End of Script +++++++++++++++++
ปล. ผมได้ comment ในส่วนที่ใช้ส่ง email ไว้ ถ้าจะให้ส่งเมล์ก็เอา comment ออกได้เลยครับ
วันพุธที่ 16 มิถุนายน พ.ศ. 2553
WebEx คืออะไร??
วันเสาร์ที่ 12 มิถุนายน พ.ศ. 2553
คิดซักนิดก่อนรับใครเป็นเพื่อนบน Social Network
ดูๆ ข่าวข้างบนแล้วอาจจะไกลตัวเกินไปหน่อยนะครับ แต่แนวทางการสืบสวนสอบสวนนั้น ทางเจ้าหน้าที่เค้าจะสืบจากรายชื่อของเพื่อนที่ผู้ตกเป็นเหยื่อ add ไว้ทั้งหมดนั่นแล่ะครับ และการที่เราไปรับเพื่อนแปลกหน้าเข้ามาเป็นเพื่อนเยอะๆ นั้น เราอาจจะตกเป็นผู้ต้องสงสัยโดยไม่รู้ตัว แน่นอนครับเราอาจจะไม่เกี่ยวข้องกับคดี แต่เมื่อถึงเวลาหากถูกเชิญตัวไปสอบปากคำมันคงเป็นเรื่องน่ารำคาญและเสียเวลาไม่น้อยเลยใช่มั้ยล่ะครับ
ดังนั้นก่อนที่เราจะรับคนแปลกหน้าเป็นเพื่อน หรือเพิ่มคนแปลกหน้าเข้าไปในรายชื่อเพื่อนบนเครือข่ายสังคมของเราแล้ว น่าจะตระหนักถึงความสำมะคัญในเรื่องนี้อยู่บ้างครับ
วันจันทร์ที่ 10 พฤษภาคม พ.ศ. 2553
การวิเคราะห์ความปลอดภัยสำหรับ Windows 2003 Server
วันนี้จะมาเล่าเกี่ยวกับวิธีการตรวจสอบความปลอดภัยบนเครื่องที่ติดตั้งด้วย Windows 2003 Server อย่างง่ายๆ นะครับ เนื่องจากจะต้องลองทำและเห็นว่าเอกสารส่วนใหญ่ยังเป็นภาษาปะกิตอยู่ แต่ที่จริงหัวข้อนี้ก็หาอ่านได้ทั่วๆ ไปนะครับโดยลอง search ผ่าน google ดูก็ได้ แต่วันนี้ผมขอเอามาสรุปเป็นภาษาไทยพอเข้าใจก็แล้วกันครับ
1. ขั้นแรกเลยไปที่ desktop แล้วคลิ้กที่ Start -> Run แล้วพิมพ์ mmc ในกล่องข้อความ Open แล้วกด OK ได้เลยครับ
2. หลังจากกด OK แล้ว จะปรากฎหน้าต่างดังภาพที่ 2 เพื่อให้เราเพิ่ม Snap in โดย Security Configuration and Analysis ใน Microsoft Management Console (MMC) ที่เราเปิดนี้ จะวิเคราะห์และจัดเก็บค่าเกี่ยวกับความปลอดภัยต่างๆ ของเครื่อง เพื่อนำไปเปรียบเทียบกับเทมเพลตมาตรฐานที่มีความปลอดภัย โดยขั้นตอนต่อไปให้เลือกที่ File -> Add/Remove Snap-in
3. ในหน้าต่าง Add/Remove Snap-in ให้เลือกปุ่ม Add
4. หลังจากนั้นให้เลือกที่ Security Configuration and Analysis แล้วกดปุ่ม Add
5. แล้วกด Close หน้าต่าง Add/Remove Snap-in หน้าต่างแรก และกด OK ที่หน้าต่างที่สอง
6. คลิ้กขวาที่ Security Configuration and Analysis แล้วเลือก Open Database…
7. พิมพ์ชื่อ database ในช่อง File name: แล้วคลิ้ก Open
8. หลังจากนั้นจะปรากฏหน้าต่างเพื่อให้เราเลือกเทมเพลตที่ใช้ในการเปรียบเทียบการตั้งค่า หากเรามาเทมเพลตของเราตามมาตรฐานขององค์กรอยู่แล้วก็สามารถเลือกไฟล์นั้นได้ หากไม่มี Microsoft เองก็มีเทมเพลตมาตรฐานให้เราเลือกใช้งานอยู่บ้างแล้ว
9. คลิ้กขวาที่ Security Configuration and Analysis อีกครั้ง แล้วเลือก Analyze Computer Now…
10. จากนั้นให้เลือกตำแหน่งในการจัดเก็บไฟล์ error log หลังจากนั้นกด OK เพื่อเริ่มวิเคราะห์ข้อมูล

11. หลังจากที่เครื่องวิเคราะห์ผลเสร็จแล้วจะจัดเก็บผลให้อยู่ในกลุ่มต่างๆ โดยเราสามารถคลิ้กเพื่อขยายดูรายละเอียดผลการตรวจสอบตามหมวดหมู่ได้ โดยผลการตรวจสอบนั้นจะมี Pass หมายถึง การตั้งค่าของระบบปัจจุบันเป็นไปตามข้อกำหนดของเทมเพลตที่เราได้เลือกไว้, Fail หมายถึง การตั้งค่าของระบบปัจจุบันไม่เป็นไปตามข้อกำหนดของเทมเพลตที่เราได้เลือกไว้ และ Not Analyzed, Not Defined หมายถึง ระบบที่ตรวจสอบ หรือเทมเพลตที่นำมาใช้เปรียบเทียบยังไม่ได้มีการตั้งค่าไว้ หรือไม่ต้องการจะตรวจสอบค่านั้นๆ
เรียบเรียงจาก: “Windows Server 2003 System Security Analysis 'Quick and Easy” http://www.windowsecurity.com









