การใช้ Secure Shell ในการเข้าถึงระบบจากระยะไกล
What are SSH, SFTP and SCP?
Secure Shell (SSH) เป็นโพรโตคอลในการสร้างการติดต่อเพื่อเข้าใช้งานระบบอย่างปลอดภัยมากกว่าการติดต่อแบบเดิมๆ ที่มีการส่งข้อมูลเป็นเพียงตัวอักษรเปล่าๆ (Plain text) โดยที่โพรโตคอลดังกล่าวจะทำการเข้ารหัสข้อมูลทุกอย่างไม่ว่าจะเป็น ชื่อผู้ใช้ รหัสผ่าน หรือข้อมูลอื่นๆ ก่อนที่จะทำการส่งไปยังเครื่องเซิร์ฟเวอร์ โดยปกตินิยมนำ SSH มาใช้งานแทน telnet เพราะมีความปลอดภัยมากกว่า
Secure File Transfer Protocol (SFTP) เป็นโพรโตคอลที่นำมาใช้แทน FTP โดยจะเป็นส่วนหนึ่งของ SSH ซึ่งจะมี sftpserv เป็นโปรแกรมที่รันอยู่ที่ฝั่งเซิร์ฟเวอร์ รอรับการติดต่อจากไคลเอ็นต์ผ่านทางคำสั่ง sftp บนระบบปฏิบัติการ linux และในระบบปฏิบัติการ Windows ก็มีโปรแกรมที่จะใช้สำหรับติดต่อและโอนถ่ายข้อมูลกับเซิร์ฟเวอร์ผ่าน SSH ด้วย เช่น SecureFX และ SSH Secure Shell Client เป็นต้น
Secure Copy (SCP) เป็นวิธีการหนึ่งในรับส่งข้อมูลข้ามระบบเครือข่าย โดยมีลักษณะเป็นการคัดลอกข้อมูลระหว่างเครื่อง 2 เครื่อง และอาศัยโพรโตคอล Secure Shell เช่นเดียวกับ SFTP ซึ่งจะแตกต่างกันที่ SFTP จะต้อง Login เข้าไปที่ระบบก่อนแล้วจึงสามารถที่จะรับส่งไฟล์ได้ แต่ SCP นั้นจะป้อนรหัสผ่านทุกครั้งที่ทำการรับส่งไฟล์
Why Use SSH?
วิธีการส่วนมากที่ผู้โจมตีใช้กันคือการดักขโมยข้อมูลระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ผ่านทางโพรโตคอล telnet ซึ่งข้อมูลที่ดักได้อาจจะเป็นชื่อที่ใช้ Login และรหัสผ่าน ที่ไม่ได้ถูกเข้ารหัสไว้ โดยใช้โปรแกรมประเภท Sniffer ทั่วๆไป ดังรูปที่ 1 และถ้าเกิดกรณีที่ผู้โจมตีดักขโมยชื่อผู้ใช้คือ root และรหัสผ่าน ความเสียหายที่ตามมาอาจจะมากจนเกินที่จะแก้ไขได้
ดังนั้นวิธีแก้ไขคือ ยกเลิกการใช้โพรโตคอล telnet โดยใช้โพรโตคอล SSH แทน และใช้ SFTP แทนโพรโตคอลของ FTP ทั้งนี้เพื่อความปลอดภัยจากการถูกดักข้อมูลขณะทำการส่ง ดังรูปที่ 2
รูปที่ 1 แสดงผลจากการใช้ telnet ในการทำ remote access ไปยังเซิร์ฟเวอร์และผู้โจมตีสามารถดักข้อมูลได้
รูปที่ 2 แสดงผลจากการใช้ ssh จะสังเกตว่ารหัสผ่านที่ส่งจากไคลเอ็นต์นั้นจะถูกเข้ารหัสไว้
การปรับแต่งค่า Secure Shell Daemon
ในระบบปฏิบัติการ linux Red Hat เวอร์ชัน 7.2 นั้นมีแพ็กเกจ OpenSSH (มีแพ็กเกจชื่อ openssh) ที่มีทั้ง openssh-serv (สำหรับเซิร์ฟเวอร์) และ openssh-client (สำหรับไคลเอ็นต์) แพ็กเกจดังกล่าวต้องการแพ็กเกจ OpenSSL (มีแพ็กเกจชื่อ openssl) ดังนั้นก่อนการติดตั้ง openssh นั้นต้องติดตั้ง openssl ก่อนเสมอ
การปรับแต่งจะมุ่งเน้นไปที่การปรับแต่งค่าของ SSHD เป็น daemon ของฝั่งเซิร์ฟเวอร์ที่รอรับการติดต่อจากไคลเอ็นต์ ให้มีความปลอดภัยมากที่สุด โดยจะทำการแก้ไขในไฟล์ที่ชื่อ /etc/ssh/sshd_config ซึ่งรายละเอียดในไฟล์ที่สำคัญมีดังนี้ และให้ลบ # ที่อยู่หน้า option ต่อไปนี้
# This is ssh server systemwide configuration file.
Port 22
ListenAddress 192.168.1.1
HostKey /etc/ssh/ssh_host_key
ServerKeyBits 1024
LoginGraceTime 600
KeyRegenerationInterval 3600
PermitRootLogin no
IgnoreRhosts yes
IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding no
PrintMotd yes
SyslogFacility AUTH
LogLevel INFO
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
AllowUsers admin
Subsystem sftp /usr/libexec/openssh/sftp-server
คำแนะนำในการปรับแต่งค่าต่างๆ ที่สำคัญในไฟล์ /etc/ssh/sshd_config ให้มีความปลอดภัย มีดังนี้
Port 22
ระบุหมายเลขพอร์ตที่ใช้ในการติดต่อ โดยค่า default แล้วจะอยู่ที่พอร์ตที่ 22 แต่ถ้าแก้ไขให้ใช้พอร์ตอื่นก็จะสามารถหลอกแฮ็กเกอร์ที่อ่อนประสบการณ์ที่ได้รหัสผ่านแต่ก็ยังไม่ทราบพอร์ตได้
ListenAddress 192.168.1.1
ระบุหมายเลข IP ให้กับฝั่งเซิร์ฟเวอร์ว่าให้รอรับการติดต่อทาง IP ใด จะเห็นผลชัดเจนยิ่งขึ้น ถ้าเครื่องเซิร์ฟเวอร์ดังกล่าวให้บริการไฟร์วอลล์ด้วย
HostKey /etc/ssh/ssh_host_key
ระบุไดเรกทอรีที่ใช้เก็บคีย์ private ของโฮสต์
ServerKeyBits 1024
ระบุจำนวนบิตที่จะใช้ในคีย์ของเซิร์ฟเวอร์ ซึ่ง default คือ 768 ให้ทำการแก้ไขเป็น 1024
LoginGraceTime 600
ระบุเวลาในหน่วยวินาทีหลังจากมีการร้องขอการติดต่อจากไคลเอ็นต์จนกระทั่งสิ้นสุดการติดต่อโดยที่ยังไม่มีการ Login
KeyRegenerationInterval 3600
ระบุอายุของคีย์ หรือระยะเวลาเป็นวินาทีที่จะสร้างคีย์ใหม่ โดยค่า default อยู่ที่ 3600
PermitRootLogin no
ระบุว่าอนุญาตให้ accout ของ root ทำการ login เข้าระบบได้โดยตรงหรือไม่ ให้เปลี่ยนเป็น no
IgnoreRhosts yes
ระบุไม่อนุญาตให้ใช้ไฟล์ rhosts หรือ shosts สำหรับการ authenticate
StrictModes yes
ก่อนที่จะมีการอนุญาตให้ Login เข้ามาในระบบได้ sshd จะตรวจสอบ permission ในไดเรกทอรี home ของผู้ใช้แต่ละคน และไฟล์ rhosts ก่อน ดังนั้นออปชันนี้ให้เลือก yes เพราะบางครั้งผู้ใช้บางคนอาจจะเปลี่ยนแปลง permission ให้ผู้อื่นสามารถเขียนได้โดยไม่เจตนา
PrintMotd yes
ระบุให้ sshd แสดงข้อความที่อยู่ในไฟล์ /etc/motd เมื่อมีผู้ใช้งานระบบทำการ Login ซึ่งไฟล์ /etc/motd นั้นรู้จักกันในชื่อของ "message of the day"
RhostsAuthentication no
ระบุให้ sshd สามารถที่จะใช้ rhosts ในการ authenticate ได้ แนะนำว่าไม่ควรที่จะใช้เพราะว่า rhosts นั้นไม่มีความปลอดภัย
RhostsRSAAuthentication no
ระบุว่าจะให้สามารถใช้ rhosts ร่วมกับ RSA ในการ authenticate ได้หรือไม่
RSAAuthentication yes
ระบุว่าให้ใช้ RSA ในการ Authenticate โดย RSA จะใช้คีย์คู่ทั้ง public และ private ที่ถูกสร้างโดย ssh-keygen1utility ในกระบวนการ Authenticate
PasswordAuthentication yes
ระบุว่าให้ใช้รหัสผ่านในการทำ Authenticate
PermitEmptyPasswords no
ระบุว่าจะอนุญาตให้ Login โดยไม่ต้องใช้รหัสผ่านหรือไม่ ให้เลือก no เพื่อบังคับให้ป้อนรหัสผ่านทุกครั้ง
AllowUsers admin
ระบุว่าจะอนุญาตให้ใคร Login ได้บ้าง โดยค่า default แล้วจะอนุญาตให้ทุกคนสามารถ Login เข้าระบบได้ และสามารถเพิ่มชื่อผู้ใช้ที่อนุญาตได้หลายคน โดยแยกแต่ละชื่อด้วยเครื่องหมายช่องว่างหรือ space
Subsystem sftp /usr/libexec/openssh/sftp-server
ระบุให้ใช้ sftp โดยค่า default จะอนุญาตอยู่แล้ว
How to use SSH Client?
ถ้าใช้ระบบปฏิบัติการ Linux จะใช้คำสั่งต่อไปนี้
ตัวอย่าง
[kitisak@Server kitisak]$ ssh -p 78 -l kitisak 192.168.1.1 |
ตัวอย่าง
[kitisak@Server kitisak]$ sftp [email protected]
Connecting to 192.168.1.1...
[email protected]'s password:
sftp>
[kitisak@Server /]$ scp /etc/group [email protected]:/tmp/ |
ถ้าใช้ระบบปฏิบัติการ Windows จะมีโปรแกรมที่ใช้ในการทำ Remote Login หลายโปรแกรมยกตัวอย่างเช่น
รูปที่ 3 แสดงหน้าแรกของโปรแกรม PuTTY
รูปที่ 4 แสดงหน้าจอขณะทำการ Login เข้าใช้งานเซิร์ฟเวอร์สำเร็จ
รูปที่ 5 แสดงอินเทอร์เฟซของโปรแกรม PSFTP ซึ่งมีลักษณะคล้ายกับ text-mode ftp
รูปที่ 6 แสดงการใช้งานโปรแกรม PSCP
รูปที่ 7 แสดงโปรแกรมการใช้ Secure command Shell
รูปที่ 8 แสดงส่วนของโปรแกรมที่ใช้ SFTP
รูปที่ 9 แสดงโปรแกรม WinSCP
รูปที่ 10 แสดงลักกษณะของโปรแกรมหลังจากทำการ Login เข้าไปยังเซิร์ฟเวอร์เรียบร้อยแล้ว
ขอบคุณข้อมูลดีๆจาก : กิติศักดิ์ จิรวรรณกูล itwizard
ไม่มีความเห็น