ผู้ใช้บางรายเช่า VPS ที่มีราคาไม่แพงนักพร้อม Windows เพื่อใช้บริการเดสก์ท็อประยะไกล เช่นเดียวกันนี้สามารถทำได้บน Linux โดยไม่ต้องโฮสต์ฮาร์ดแวร์ของคุณเองในศูนย์ข้อมูลหรือเช่าเซิร์ฟเวอร์เฉพาะ บางคนต้องการสภาพแวดล้อมแบบกราฟิกที่คุ้นเคยสำหรับการทดสอบและพัฒนา หรือมีเดสก์ท็อประยะไกลที่มีช่องทางกว้างสำหรับการทำงานจากอุปกรณ์เคลื่อนที่ มีตัวเลือกมากมายสำหรับการใช้ระบบ Virtual Network Computing (VNC) ที่ใช้โปรโตคอล Remote FrameBuffer (RFB) ในบทความสั้น ๆ นี้ เราจะบอกวิธีกำหนดค่าบนเครื่องเสมือนด้วยไฮเปอร์ไวเซอร์
คำศัพท์:
การเลือกเซิร์ฟเวอร์ VNC
สามารถสร้างบริการ VNC ในระบบเสมือนจริงได้ และไฮเปอร์ไวเซอร์จะเชื่อมต่อกับอุปกรณ์จำลอง และไม่จำเป็นต้องกำหนดค่าเพิ่มเติม ตัวเลือกนี้เกี่ยวข้องกับค่าใช้จ่ายที่สำคัญและไม่ได้รับการสนับสนุนจากผู้ให้บริการทั้งหมด - แม้ในการใช้งานที่ใช้ทรัพยากรน้อยกว่า เมื่อแทนที่จะจำลองอุปกรณ์กราฟิกจริง สิ่งที่เป็นนามธรรมแบบง่าย (framebuffer) จะถูกถ่ายโอนไปยังเครื่องเสมือน บางครั้งเซิร์ฟเวอร์ VNC จะเชื่อมโยงกับเซิร์ฟเวอร์ X ที่ทำงานอยู่ แต่วิธีนี้เหมาะสำหรับการเข้าถึงเครื่องจริงมากกว่าและบนเครื่องเสมือนจะทำให้เกิดปัญหาทางเทคนิคหลายประการ วิธีที่ง่ายที่สุดในการติดตั้งเซิร์ฟเวอร์ VNC คือการใช้เซิร์ฟเวอร์ X ในตัว ไม่จำเป็นต้องใช้อุปกรณ์ทางกายภาพ (อะแดปเตอร์วิดีโอ แป้นพิมพ์ และเมาส์) หรือการจำลองโดยใช้ไฮเปอร์ไวเซอร์ ดังนั้นจึงเหมาะสำหรับ VPS ทุกประเภท
การติดตั้งและการกำหนดค่า
เราจะต้องมีเครื่องเสมือนที่มี Ubuntu Server 18.04 LTS ในการกำหนดค่าเริ่มต้น มีเซิร์ฟเวอร์ VNC หลายตัวในที่เก็บมาตรฐานของการแจกจ่ายนี้:
การติดตั้งสภาพแวดล้อมเดสก์ท็อปที่มีการขึ้นต่อกันทั้งหมดทำได้ด้วยคำสั่งต่อไปนี้:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
ถัดไปคุณต้องติดตั้งเซิร์ฟเวอร์ VNC:
sudo apt-get install tigervnc-standalone-server tigervnc-common
การเรียกใช้งานในฐานะ superuser นั้นเป็นความคิดที่ไม่ดี สร้างผู้ใช้และกลุ่ม:
sudo adduser vnc
มาเพิ่มผู้ใช้ในกลุ่ม sudo เพื่อให้เขาสามารถทำงานที่เกี่ยวข้องกับการบริหารได้ หากไม่มีความจำเป็นดังกล่าว คุณสามารถข้ามขั้นตอนนี้ได้:
sudo gpasswd -a vnc sudo
ขั้นตอนต่อไปคือการรันเซิร์ฟเวอร์ VNC ด้วยสิทธิ์ผู้ใช้ vnc เพื่อสร้างรหัสผ่านที่ปลอดภัยและไฟล์การกำหนดค่าในไดเร็กทอรี ~/.vnc/ ความยาวของรหัสผ่านสามารถมีได้ตั้งแต่ 6 ถึง 8 ตัวอักษร (อักขระพิเศษจะถูกตัดออก) หากจำเป็นให้ตั้งรหัสผ่านสำหรับการดูเท่านั้นเช่น โดยไม่ต้องใช้คีย์บอร์ดและเมาส์ คำสั่งต่อไปนี้ถูกดำเนินการในฐานะผู้ใช้ vnc:
su - vnc
vncserver -localhost no
ตามค่าเริ่มต้น โปรโตคอล RFB จะใช้ช่วงพอร์ต TCP ตั้งแต่ 5900 ถึง 5906 ซึ่งเรียกว่า พอร์ตแสดงผล แต่ละพอร์ตสอดคล้องกับหน้าจอเซิร์ฟเวอร์ X ในกรณีนี้ พอร์ตจะเชื่อมโยงกับหน้าจอตั้งแต่ :0 ถึง :6 อินสแตนซ์เซิร์ฟเวอร์ VNC ที่เราเปิดตัวรับฟังพอร์ต 5901 (หน้าจอ: 1) อินสแตนซ์อื่นสามารถทำงานบนพอร์ตอื่นที่มีหน้าจอ :2, :3 ฯลฯ ก่อนกำหนดค่าเพิ่มเติม คุณต้องหยุดเซิร์ฟเวอร์:
vncserver -kill :1
คำสั่งควรแสดงข้อความดังนี้: “การฆ่ากระบวนการ Xtigervnc ID 18105... สำเร็จ!”
เมื่อ TigerVNC เริ่มทำงาน มันจะรันสคริปต์ ~/.vnc/xstartup เพื่อกำหนดการตั้งค่า มาสร้างสคริปต์ของเราเองก่อนอื่นให้บันทึกสำเนาสำรองของสคริปต์ที่มีอยู่หากมี:
mv ~/.vnc/xstartup ~/.vnc/xstartup.b
nano ~/.vnc/xstartup
เซสชันสภาพแวดล้อมเดสก์ท็อป XFCE เริ่มต้นโดยสคริปต์ xstartup ต่อไปนี้:
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
xrdb $HOME/.Xresources
exec /usr/bin/startxfce4 &
ต้องใช้คำสั่ง xrdb เพื่อให้ VNC อ่านไฟล์ .Xresources ในโฮมไดเร็กทอรี ที่นั่นผู้ใช้สามารถกำหนดการตั้งค่ากราฟิกเดสก์ท็อปต่างๆ ได้ เช่น การแสดงแบบอักษร สีเทอร์มินัล ธีมเคอร์เซอร์ ฯลฯ สคริปต์จะต้องสามารถเรียกใช้งานได้:
chmod 755 ~/.vnc/xstartup
เสร็จสิ้นการตั้งค่าเซิร์ฟเวอร์ VNC หากคุณรันด้วยคำสั่ง vncserver -localhost no (ในฐานะผู้ใช้ vnc) คุณสามารถเชื่อมต่อกับรหัสผ่านที่ระบุก่อนหน้าและดูภาพต่อไปนี้:
การเริ่มบริการผ่าน systemd
การเริ่มต้นเซิร์ฟเวอร์ VNC ด้วยตนเองไม่เหมาะสำหรับการใช้งานการต่อสู้ ดังนั้นเราจะกำหนดค่าบริการระบบ คำสั่งถูกดำเนินการในฐานะรูท (เราใช้ sudo) ขั้นแรก เรามาสร้างไฟล์หน่วยใหม่สำหรับเซิร์ฟเวอร์ของเรา:
sudo nano /etc/systemd/system/[email protected]
สัญลักษณ์ @ ในชื่อช่วยให้คุณสามารถส่งอาร์กิวเมนต์เพื่อกำหนดค่าบริการได้ ในกรณีของเรา ระบุพอร์ตแสดงผล VNC ไฟล์หน่วยประกอบด้วยหลายส่วน:
[Unit]
Description=TigerVNC server
After=syslog.target network.target
[Service]
Type=simple
User=vnc
Group=vnc
WorkingDirectory=/home/vnc
PIDFile=/home/vnc/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x960 :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
จากนั้นคุณจะต้องแจ้ง systemd เกี่ยวกับไฟล์ใหม่และเปิดใช้งาน:
sudo systemctl daemon-reload
sudo systemctl enable [email protected]
หมายเลข 1 ในชื่อระบุหมายเลขหน้าจอ
หยุดเซิร์ฟเวอร์ VNC เริ่มเป็นบริการและตรวจสอบสถานะ:
# от имени пользователя vnc
vncserver -kill :1
# с привилегиями суперпользователя
sudo systemctl start vncserver@1
sudo systemctl status vncserver@1
หากบริการกำลังทำงานอยู่เราควรได้รับสิ่งนี้
การเชื่อมต่อเดสก์ท็อป
การกำหนดค่าของเราไม่ได้ใช้การเข้ารหัส ดังนั้นผู้โจมตีจึงสามารถดักจับแพ็กเก็ตเครือข่ายได้ นอกจากนี้ในเซิร์ฟเวอร์ VNC ค่อนข้างบ่อย
sudo netstat -ap |more
ใน Linux, FreeBSD, OS X และระบบปฏิบัติการที่คล้าย UNIX อื่น ๆ ทันเนลจากคอมพิวเตอร์ไคลเอนต์ถูกสร้างขึ้นโดยใช้ยูทิลิตี้ ssh (sshd ต้องทำงานบนเซิร์ฟเวอร์ VNC):
ssh -L 5901:127.0.0.1:5901 -C -N -l vnc vnc_server_ip
ตัวเลือก -L ผูกพอร์ต 5901 ของการเชื่อมต่อระยะไกลกับพอร์ต 5901 บน localhost ตัวเลือก -C เปิดใช้งานการบีบอัด และตัวเลือก -N บอกให้ ssh ไม่ต้องดำเนินการคำสั่งระยะไกล ตัวเลือก -l ระบุการเข้าสู่ระบบสำหรับการเข้าสู่ระบบระยะไกล
หลังจากตั้งค่าทันเนลบนเครื่องคอมพิวเตอร์แล้ว คุณจะต้องเปิดไคลเอนต์ VNC และสร้างการเชื่อมต่อกับโฮสต์ 127.0.0.1:5901 (localhost:5901) โดยใช้รหัสผ่านที่ระบุไว้ก่อนหน้าเพื่อเข้าถึงเซิร์ฟเวอร์ VNC ขณะนี้เราสามารถสื่อสารอย่างปลอดภัยผ่านอุโมงค์ที่เข้ารหัสด้วยสภาพแวดล้อมเดสก์ท็อปกราฟิก XFCE บน VPS ในภาพหน้าจอ ยูทิลิตี้ด้านบนกำลังทำงานอยู่ในโปรแกรมจำลองเทอร์มินัลเพื่อแสดงการใช้ทรัพยากรการประมวลผลที่ต่ำของเครื่องเสมือน จากนั้นทุกอย่างจะขึ้นอยู่กับแอปพลิเคชันของผู้ใช้
คุณสามารถติดตั้งและกำหนดค่าเซิร์ฟเวอร์ VNC ใน Linux บน VPS เกือบทุกรุ่น ไม่จำเป็นต้องกำหนดค่าราคาแพงและใช้ทรัพยากรมากด้วยการจำลองอะแดปเตอร์วิดีโอหรือการซื้อลิขสิทธิ์ซอฟต์แวร์เชิงพาณิชย์ นอกเหนือจากตัวเลือกการบริการของระบบที่เราพิจารณาแล้ว ยังมีตัวเลือกอื่นๆ อีก: เปิดใช้งานในโหมด daemon (ผ่าน /etc/rc.local) เมื่อระบบบู๊ตหรือตามความต้องการผ่าน inetd สิ่งหลังนี้น่าสนใจสำหรับการสร้างการกำหนดค่าผู้ใช้หลายคน Internet Superserver จะเริ่มเซิร์ฟเวอร์ VNC และเชื่อมต่อไคลเอนต์เข้ากับมัน และเซิร์ฟเวอร์ VNC จะสร้างหน้าจอใหม่และเริ่มเซสชัน หากต้องการตรวจสอบสิทธิ์ภายใน คุณสามารถใช้ตัวจัดการการแสดงผลแบบกราฟิก (เช่น
ที่มา: will.com