วันศุกร์ที่ 8 เมษายน พ.ศ. 2554

FreeBSD, Linux: คำสั่ง date กับการประยุกต์ใช้งาน ภาคต่อ

จากที่เคยเขียนไว้ที่ http://khamsawat.blogspot.com/2010/08/linux-date.html
วันนี้จะมาต่อภาคสอง โดยจะเพิ่มการแปลงรูปแบบของวันที่ และการใช้งานคำสั่ง date บน FreeBSD ซึ่งมี Syntax ต่างจากบน Linux นิดหน่อย ทั้งนี้จะไม่เขียนถึงการ set วันที่ผ่านคำสั่ง date โดยแนะนำให้ทำการ set ค่าวันและเวลาผ่าน ntpdate จะดีกว่า

หมายเหตุ อาจมีบางส่วนที่ซ้ำกับบทความเดิมนิดหน่อย

ระบบที่ใช้
OS: FreeBSD 8.2 Release amd64
OS: Ubuntu 9.10 i386

- แสดงวันเวลาปัจจุบัน
FreeBSD# date
Fri Apr 8 16:12:51 ICT 2011

komkit@Linux:~$ date
Fri Apr 8 16:13:08 ICT 2011

- แสดงวันเวลาปัจจุบันในรูปแบบของ Epoch Time
FreeBSD# date +%s
1302254637

komkit@Linux:~$ date +%s
1302254649

- แสดงวันที่ปัจจุบันในรูปแบบ YYY-MM-DD
FreeBSD# date +%F
2011-04-08

komkit@Linux:~$ date +%F
2011-04-08

- แสดงวันที่ของเมื่อวานพร้อมเวลาที่ตรงกับเวลานี้
FreeBSD# date -v-1d
Thu Apr 7 16:26:16 ICT 2011

komkit@Linux:~$ date --date="yesterday"
Thu Apr 7 16:26:55 ICT 2011

- แสดงเฉพาะวันที่ของเมื่อวานในรูปแบบ YYYY-MM-DD
FreeBSD# date -v-1d +%F
2011-04-07

komkit@Linux:~$ date --date="yesterday" +%F
2011-04-07

- แสดงเฉพาะวันที่ของ 10 วันที่แล้วในรูปแบบของ YYYY-MM-DD
FreeBSD# date -v-10d +%F
2011-03-29

komkit@Linux:~$ date --date="10 day ago" +%F
2011-03-29

- แสดงเฉพาะวันที่ของพรุ่งนี้ ในรูปแบบของ YYYY-MM-DD
FreeBSD# date -v+1d +%F
2011-04-09

komkit@moccona:~$ date --date="tomorrow" +%F
2011-04-09

- แสดงเฉพาะวันที่ของอีก 12 วันข้างหน้า ในรูปแบบของ YYYY-MM-DD
FreeBSD# date -v+12d +%F
2011-04-20

komkit@Linux:~$ date --date="12 day" +%F
2011-04-20


- การแปลงรูปแบบวันที่จาก Epoch Time เป็นแบบที่อ่านง่าย (กำหนดเวลา epoch คือ 1302254637)
komkit@Linux:~$ date -d @1302254637
Fri Apr 8 16:23:57 ICT 2011

FreeBSD# perl -e "print scalar(localtime(1302254637))"
Fri Apr 8 16:23:57 2011


- การแปลงรูปแบบวันที่จากรูปแบบ YYYY-MM-DD HH:MM:SS ไปเป็น Epoch
komkit@Linux:~$ date +%s -d"2011-04-08 12:34:56"
1302240896

FreeBSD# date -j -f '%Y-%m-%d %H:%M:%S' '2011-04-08 12:34:56' +%s
1302240896





วันศุกร์ที่ 1 เมษายน พ.ศ. 2554

FreeBSD, Linux, Mac OS : ตรวจสอบรายการ Hardware

ถ้าเป็นเป็นบน MS Windows ก็ Device Manager ส่วนการตรวจสอบรายการ Hardware บน Linux, FreeBSD และ Mac OS เบื้องต้นนั้นทำได้ดังนี้

FreeBSD: (ระบบที่ใช้ FreeBSD 7.1)
- แสดงรุ่น CPU
$ sysctl hw.model
hw.model: Intel(R) Xeon(R) CPU E5410 @ 2.33GHz

- แสดงจำนวน CPU Core
$ sysctl hw.ncpu
hw.ncpu: 8

- แสดงขนาดความจุของ RAM
$ sysctl hw.physmem
hw.physmem: 8571633664 (มีหน่วยเป็น Bytes)

สังเกตุว่าจะขึ้นต้นด้วย hw. เหมือนกัน ดังนั้นสามารถใช้คำสั่งเดียวได้เลยคือ

$ sysctl hw. | more

- ดูรายการ Hardware อื่นๆ เช่น VGA Card, Ethernet Card, Raid Controller เป็นต้น

$ pciconf -lv | more

ตัวอย่าง Output บางส่วน

mfi0@pci0:1:0:0: class=0x010400 card=0x1f0c1028 chip=0x00601000 rev=0x04 hdr=0x00
vendor = 'LSI Logic (Was: Symbios Logic, NCR)'
device = 'SAS1078 PCI-X Fusion-MPT SAS'
class = mass storage
subclass = RAID
pcib13@pci0:2:0:0: class=0x060400 card=0x00000000 chip=0x01031166 rev=0xc3 hdr=0x01
vendor = 'ServerWorks (Was: Reliance Computer Corp)'
device = 'BCM5715 Broadcom dual gigabit, pci bridge'
class = bridge
subclass = PCI-PCI
bce1@pci0:3:0:0: class=0x020000 card=0x01b31028 chip=0x164c14e4 rev=0x12 hdr=0x00
vendor = 'Broadcom Corporation'
device = '5708C Broadcom NetXtreme II Gigabit Ethernet Adapter'
class = network
subclass = ethernet
vgapci0@pci0:14:13:0: class=0x030000 card=0x01b31028 chip=0x515e1002 rev=0x02 hdr=0x00
vendor = 'ATI Technologies Inc'
device = 'Radeon ES1000 Radeon ES1000'
class = display
subclass = VGA


Linux: (ระบบที่ใช้ Ubuntu 8.04)

- แสดงรุ่น CPU

komkit@Linux:~$ cat /proc/cpuinfo

ตัวอย่าง Output

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
stepping : 6
cpu MHz : 2327.499
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca sse4_1 lahf_lm
bogomips : 4654.99
clflush size : 64
cache_alignment : 64
address sizes : 38 bits physical, 48 bits virtual
power management:


- แสดงขนาดความจุของ RAM


komkit@Linux:~$ free -m
total used free shared buffers cached
Mem: 7994 5253 2741 0 5 5151
-/+ buffers/cache: 96 7898
Swap: 7632 0 7632

หรือ

komkit@Linux:~$ cat /proc/meminfo

MemTotal: 8186400 kB

MemFree: 2806968 kB
...


- ดูรายการ Hardware อื่นๆ เช่น VGA Card, Ethernet Card, Raid Controller เป็นต้น

komkit@Linux:~$ lspci
01:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 1078 (rev 04)
07:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)
0a:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 1078 (rev 04)
0e:0d.0 VGA compatible controller: ATI Technologies Inc ES1000 (rev 02)

- ดูรายการ Hardware ที่เชื่อมต่อกับ USB
komkit@Linux:~$ lsusb
Bus 005 Device 002: ID 04b4:6560 Cypress Semiconductor Corp. CY7C65640 USB-2.0 "TetraHub"
Bus 005 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000

Mac OS:
$
system_profiler | more


วันอาทิตย์ที่ 27 มีนาคม พ.ศ. 2554

Squid Proxy Authentication with Active Directory

ระบบที่ใช้ทดสอบ

Proxy Server
OS : FreeBSD 8.2 amd64
Squid Proxy version 3.1
IP address : 192.168.12.200

AD Server
OS : Microsoft Windows 2003 Server R2
IP address : 192.168.12.201

Client
OS : Microsoft Windows 7 Professional 64 bit
Web browser : Firefox 4 , IE9
IP address : 192.168.12.51

ข้อกำหนดเบื้องต้น
Domain ของระบบทดสอบคือ ad.komkit.net

ติดตั้ง AD Server ให้เรียบร้อย (ผมติดตั้งแบบมั่วสุดๆ)

ติดตั้ง FreeBSD 8.2 ตามปกติ เมื่อเสร็จแล้วจึงทำการติดตั้ง Squid Proxy ดังนี้

proxy-test# cd /usr/ports/www/squid31
proxy-test# make install

โดย Options ที่เลือกเพิ่มเติมคือ

SQUID_LDAP_AUTH

จากนั้นก็ OK อย่างเดียว รอจนกระทั่งเสร็จ

เมื่อเสร็จแล้ว เพิ่ม Configuration ของ squid ดังนี้

### ส่วนของการติดต่อกับ AD Server

auth_param basic program /usr/local/libexec/squid/squid_ldap_auth -R \
-b "dc=ad,dc=komkit,dc=net" \
-D "cn=Administrator,cn=Users,dc=ad,dc=komkit,dc=net" \
-w "Administrator-password" \
-f sAMAccountName=%s \
-h 192.168.12.201
auth_param basic children 5
auth_param basic realm KOMKIT.NET Corp.
auth_param basic credentialsttl 5 minutes

### กำหนด acl เพื่อให้มีการใช้งานการ Authen

acl adusers proxy_auth REQUIRED


### กำหนดการอนุญาตการใช้งานโดยให้ใช้การ Authen ผ่าน AD

http_access allow adusers

และทำ Configure ในส่วนอื่นๆ ตามความเหมาะ จากนั้น save configure แล้วสั่งให้ squid ทำงาน

proxy-test# /usr/local/etc/rc.d/squid start

ตรวจสอบ Log การใช้งาน

proxy-test# cat /var/log/squid/access.log
192.168.12.51 - komkit [28/Mar/2011:13:52:49 +0700] "GET http://khamsawat.blogspot.com/ HTTP/1.1" 200 18535 TCP_MISS:DIRECT

จาก log จะเห็นว่ามีการระบุ Username มาแล้ว ซึ่ง User ดังกล่าวผมกำหนดไว้ที่ AD Server

ข้อมูลอ้างอิงจาก
http://www.papercut.com/kb/Main/ConfiguringSquidProxyToAuthenticateWithActiveDirectory

วันศุกร์ที่ 4 กุมภาพันธ์ พ.ศ. 2554

Network, Fortigate Firewall : Enable multicast address forwarding on Fortigate Firewall

จากโจทย์วันนี้คือ ทำการเปิดการใช้งาน OSPF โดย Router ที่ run OSPF ทั้งสองตัวจะถูก Firewall ขวางอยู่ในรูปแบบ Transparent mode ดังนี้

Router1 <---> Transparent FW <---> Router2

ทั้งนี้ปัญหาที่พบคือ แม้จะเปิด Firewall policy เป็น any to any แล้วก็ตาม Routing OSPF ก็ยังไม่สามารถส่งผ่าน Firewall ไปได้ เนื่องจาก OSPF จะประกาศ Route ผ่าน Multicast address

การแก้ไข ต้องทำใน command mode ของ Fortigate ดังนี้ (หาวิธีใน GUI ไม่เจอ)

อุปกรณ์ที่ใช้
Firewall : Fortigate 3016B

FG3016-B # config system settings
FG3016-B (settings) # set multicast-skip-policy enable
FG3016-B (settings) # end
FG3016-B #

จากนั้นตรวจสอบ Routing table ใน Router ทั้งสองพบว่ามี OSPF package มาเป็นปกติ

วันศุกร์ที่ 21 มกราคม พ.ศ. 2554

Linux: ตัวอย่างการใช้งานคำสั่ง cut

ตัวอย่างข้อมูลที่ได้มา

192.168.11.12

- ต้องการแสดงผลเฉพาะ 3 ตัวอักษรแรก

cut -c 1-3 <<< "192.168.11.12"

หรือ

cut -c -3 <<< "192.168.11.12"

ผลลัพธ์
192

โดยการกำหนด -c คือการกำหนดการแสดงผลตัวอักษรลำดับที่ที่ต้อง ดังตามตัวอย่างคือ ตัวอักษรที่ 1 ถึงตัวอักษรที่ 3 และอีกตัวอย่างคือ ตั้งแต่ตัวอักษรแรกไปถึงตัวอักษรที่ 3


- ต้องการแสดงผลตั้งแต่ตัวอักษรตั้งแต่ตัวที่ 4 ไปถึงตัวสุดท้ายของแถว

cut -c 4- <<< "192.168.11.12"

ผลลัพธ์
.168.11.12


- ต้องการแสดงแบ่งข้อมูล IP ดังกล่าวให้อยู่ในรูปแบบของ A.B.C.D แล้วต้องการแสดงผลแค่ A.B.C

cut -d"." -f 1,2,3 <<< "192.168.11.12"

หรือ

cut -d"." -f 1-3 <<< "192.168.11.12"

ผลลัพธ์
192.168.11

โดยการกำหนด -d เพื่อเป็นการบอกว่าจะใช้อะไรเป็นจุดแบ่งส่วนของข้อมูล อย่างในตัวอย่างคือใช้จุด "." เป็นตัวแบ่งหมายเลข IP ออกเป็น 4 ชุด แล้วนำมาแสดงผลแค่ชุดที่ 1 - 3 เป็นต้น

ตัวอย่างอื่นๆ

ข้อมูลตั้งต้น

komkit@Server:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh

ต้องการแสดงผลชื่อ Username เท่านั้น โดยจะให้เครื่องหมาย : เป็นตัวแบ่งฟิวต่างๆออกจากกัน

komkit@Server:~$ cut -d":" -f 1 /etc/passwd
root
daemon
bin
sys
sync
games


ต้องการแสดงผลชื่อ Username และ Default shell ของแต่ละ username

komkit@Server:~$ cut -d":" -f 1,7 /etc/passwd
root:/bin/bash
daemon:/bin/sh
bin:/bin/sh
sys:/bin/sh
sync:/bin/sync
games:/bin/sh

วันอาทิตย์ที่ 16 มกราคม พ.ศ. 2554

Linux, RHEL : ติดตั้ง RHEL 6 แบบ Text mode

ปกติ RHEL ใน Version ที่ผ่านมา จะให้พิมพ์ linux text ที่ Prompt
แต่ใน Version 6 นี้ ไม่มี prompt ให้ ดังนั้นการติดตั้งแบบ text mode จึงมีวิธีการเปลี่ยนไปนิดหน่อย ดังนี้

ทำการ boot จาก DVD ตามปกติ
ที่หน้าจอต้อนรับ จะมีเมนูการติดตั้งอยู่ 2 ตัว คือ

Install or upgrade an existing system
และ
Install system with basic videon driver
และ แต่ละอันจะสามารถกด TAB เพื่อเพิ่ม option การ boot ดังนั้น เพื่อให้ทำการติดตั้งแบบ text mode ก็ให้ทำการเพิ่มคำว่า text เข้าไปข้างหลังของ Option ของแต่ละเมนู ดังนี้

เลือก
Install or upgrade an existing system <-- กด TAB

vmlinuz initrd=initrd.img text <-- เพิ่ม text แล้ว enter

หรือ

เลือก
Install system with basic videon driver <-- กด TAB

vmlinuz initrd=initrd.img xdriver=vesa nomodeset text <-- เพิ่ม text แล้ว enter


ข้อแตกต่าง
เมนูแรกเป็นการติดตั้งแบบความละเอียดสูง แม้แต่ใน Text mode
ส่วนเมนูที่สองเป็นการติดตั้งแบบใช้ VGA driver แบบความละเอียดต่ำ (แนะนำ)

ข้อสังเกตุ
RHEL 6 แบบ Text mode นี้มันเลือก Package ในการติดตั้งยังไงหว่า หาไม่เจอ...


วันศุกร์ที่ 17 ธันวาคม พ.ศ. 2553

FreeBSD : Basic user management

ระบบที่ใช้ทดสอบ FreeBSD 8.1-RELEASE amd64

- การเพิ่มบัญชีผู้ใช้ด้วยคำสั่ง adduser

FreeBSD# adduser
Username: user1
Full name: User1 Fullname
Uid (Leave empty for default):
Login group [user1]:
Login group is user1. Invite user1 into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]:
Home directory [/home/user1]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password: (ขณะที่พิมพ์จะมองไม่เห็น)
Enter password again: (ขณะที่พิมพ์จะมองไม่เห็น)
Lock out the account after creation? [no]:
Username : user1
Password : *****
Full Name : User1 Fullname
Uid : 1002
Class :
Groups : user1
Home : /home/user1
Home Mode :
Shell : /bin/sh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (user1) to the user database.
Add another user? (yes/no): no
Goodbye!

- เปลี่ยนรหัสผ่านของ user1

FreeBSD# passwd user1
Changing local password for user1
New Password: (ขณะที่พิมพ์จะมองไม่เห็น)
Retype New Password: (ขณะที่พิมพ์จะมองไม่เห็น)

- แสดงข้อมูลของ user1

FreeBSD# id user1
uid=1002(user1) gid=1002(user1) groups=1002(user1)

หรือ

FreeBSD# pw user show user1
user1:*:1002:1002::0:0:User1 Fullname:/home/user1:/bin/sh

- แก้ไขข้อมูล user1

FreeBSD# chpass user1
#Changing user information for user1.
Login: user1
Password: $1$oU.ybLTJ$V5GWxT1oXN/emCRnqgx.h0
Uid [#]: 1002
Gid [# or name]: 1002
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/user1
Shell: /bin/sh
Full Name: User1 Fullname
Office Location:
Office Phone:
Home Phone:
Other information:

โดยจะอยู่ในรูปแบบของคำสั่ง vi


- ลบ user1 ออกจากระบบโดยคำสั่ง rmuser

FreeBSD# rmuser
Please enter one or more usernames: user1
Matching password entry:

user1:*:1002:1002::0:0:User1 Fullname:/home/user1:/bin/sh

Is this the entry you wish to remove? y
Remove user's home directory (/home/user1)? y
Removing user (user1): mailspool home passwd.