Trong ngày thứ 5 này ta có vẻ như quay lại như mới bắt đầu một chút nhưng thực tế thì không hẳn. Linux mạnh vì giao diện dòng lệnh nhưng nếu không biết đến giao diện đồ họa trên Linux thì ta gần như đang bỏ qua một trải nghiệm hết sức thú vị với GUI interface nổi tiếng của Linux là GNOME và KDE. Hơn thế nữa, qua nhiều năm kinh nghiệm làm việc với khách hàng thuê vps, 1Hosting thấy rằng vẫn có rất nhiều khách hàng chỉ có thể thao tác với giao diện đồ họa như Windows mà không thể nhớ các câu lệnh của Linux. Không sao cả, Centos 7 sẽ chiều lòng những khách hàng khó tính nhất.
Công nghệ ngày càng phát triển, cũng giống như công nghệ ảo hóa, công nghệ remote từ xa vào máy chủ Linux cũng không ngừng cho ra những sản phẩm mới. Nếu trước đây ta chỉ loanh quanh với VNC thì hiện nay, trên máy tính mà đa số người dùng vẫn sử dụng là Windows desktop, ta có thể sử dụng luôn chương trình Remote Desktop hoặc hơn nữa là Teamview rất tiện dụng.
Trong ngày thứ 5 này, ta sẽ tìm hiểu những kỹ thuật từ đơn giản nhất đến phức tạp nhất để cài đặt cho con máy chủ ảo Cloud VPS thân yêu cùa mình có những tính năng giống như 1 Desktop Server. Nhưng trước đó ta cần cài đặt 2 thành phần cơ bản:
1. Các gói GNOME trên Centos 7 Server với lệnh sau:
yum groupinstall "Server with GUI"
2. Xming Server trên máy tính Windows client ta đang sử dụng
Bước tiếp theo là cái đặt EPEL repository, thường là cái này đã có trong các phần trước của bài học theo ngày
yum -y install epel-release
Phải nói là với phương thức này, việc thực hiện là vô cùng đơn giản khi ta chỉ cần một vài lệnh setup là xong. XRDP Remote Desktop Server là một service hoặc daemon cho phép sử dụng giao thức RDP trên Linux. XRDP sử dụng x11rdp ở backend để manage các X Sessions. XRDP an toàn hơn VNC thông thường khi kết nối nó sử dụng các RSA Public Key và Private key để transfer dữ liệu.
Nào, ta hãy cài các gói sau:
yum -y install xrdp tigervnc-server
Và start Remote Desktop Server giả lập trên Centos 7
systemctl start xrdp.service
Kiểm tra lại bằng lệnh:
netstat -antup | grep xrdp
Nếu được như sau là chuẩn:
netstat -antup | grep xrdp tcp 0 0 127.0.0.1:3350 0.0.0.0:* LISTEN 2607/xrdp-sesman tcp 0 0 0.0.0.0:3389 0.0.0.0:* LISTEN 2608/xrdp
Enable xRDP service lúc hệ thống khởi động
systemctl enable xrdp.service
Sau đó mở firewall port 3389 nếu hệ thống sử dụng firewalld
# firewall-cmd --permanent --zone=public --add-port=3389/tcp # firewall-cmd --reload
Và cấu hình lại SELinux nếu SELinux đã enable, còn nếu đã để SELinux= disabled thì không cần nữa
# chcon --type=bin_t /usr/sbin/xrdp # chcon --type=bin_t /usr/sbin/xrdp-sesman
Mở remote desktop trên máy tính Windows và gõ địa chỉ IP vào, kết nối như kết nối Remote Desktop vào một Windows Server thông thường.
Sau đó điền user và password
Và Login với giao diện GNOME rất đẹp
VNC là một kỹ thuật khác để thực hiện việc remote Login vào Linux server, tuy nhiên nó cũng chỉ dựa trên giao thức client-server truyền thống. VNC hoạt động hơi khác một chút so với những chương trình khác, đó là nó sinh ra 1 VNC service daemon mỗi khi có một user login. Trong ngày hôm nay, ta sẽ thực hiện kết nối VNC với các user khác nhau. Trước tiên ta tạo 02 user trên hệ thống
useradd -c "User Admin Configured for VNC Access" admin useradd -c "User Boss Configured for VNC Access" boss
Tiếp đó là cài gói VNC Server
yum install -y tigervnc-server
Sau khi đã có VNC Server và GNOME desktop, ta kiểm tra lại như sau:
systemctl status vncserver@:.service
Ta sẽ thấy :
vncserver@:.service - Remote desktop service (VNC) Loaded: loaded (/usr/lib/systemd/system/vncserver@.service; disabled) Active: inactive (dead)
Tại sao lại là “Inactive”? Lý do là vì Centos 7 sử dụng systemd daemon để khởi động các services khác nhau, mỗi service nằm dưới systemd có một service unit file nằm trong thư mục /lib/systemd/system và được link đến các file trong thư mục /etc/systemd/system có nhiệm vụ start services lúc khởi động.
Trong trường hợp này, ta thấy một unit file chung đã được tạo trong thư mục /lib/systemd/system nhưng chưa có link nào liên kết đến /etc/systemd/system/
ls -l /lib/systemd/system/vnc* -rw-r--r--. 1 root root 1744 Jun 10 16:15 /lib/systemd/system/vncserver@.service
Check thư mục /etc/systemd/system/
ls -l /etc/systemd/system/*.wants/vnc*
sẽ thấy như sau:
ls: cannot access /etc/systemd/system/*.wants/vnc*: No such file or directory
Ta sẽ sửa lại như sau:
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:5.service cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:6.service
VNC mặc định chạy trên cổng 5900 nhưng mỗi khi có một kết nối đến, nó sẽ sử dụng một port riêng biệt là 5900 + 5 và 5900 + 6 tương ứng với số ta đã tạo ở service unit file ở trên. Ta sẽ edit các service unit file như sau:
vi /etc/systemd/system/vncserver@:5.service
Các thông số cần chú ý là màu đỏ:
[Service] Type=forking # Clean any existing files in /tmp/.X11-unix environment ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' ExecStart=/sbin/runuser -l admin -c "/usr/bin/vncserver %i -geometry 1280x1024" PIDFile=/home/admin/.vnc/%H%i.pid ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' [Install] WantedBy=multi-user.target
Save & exit, đồng thời làm tương tự cho user boss ở unit file 6
Sau đó reload lại systemd
systemctl daemon-reload
Và Enable cho từng instance:
systemctl enable vncserver@:5.service systemctl enable vncserver@:6.service
Vậy là ta đã cấu hình xong 2 VNC instance
Lúc này ta cần cấu hình password để login cho 02 user ở trên để kết nối vào VNC Server, chú ý đây không phải là password của Linux user mà là password được VNC Server setup. Để làm như vậy ta cần login SSH vào bằng chính 02 user trên. Sau khi login được vào, ta chạy lệnh sau:
vncserver
Đánh password mới vào và chả cần để ý thông báo gì sinh ra ngoài việc nhìn thấy dòng như sau:
You will require a password to access your desktops. Password: Verify: xauth: file /home/admin/.Xauthority does not exist New 'localhost.localdomain:1 (admin)' desktop is localhost.localdomain:1 Creating default startup script /home/admin/.vnc/xstartup Starting applications specified in /home/admin/.vnc/xstartup Log file is /home/admin/.vnc/localhost.localdomain:1.log
Reload lại các instance để mọi thứ có tác dụng
systemctl daemon-reload systemctl restart vncserver@:5.service systemctl restart vncserver@:6.service
Tiếp theo ta sẽ download và cài đặt chương trình VNC View trên máy tính Windows của mình để chuẩn bị kết nối vào VNC Server cài trên Centos 7.
Khởi động VNC Viewer và điền thông tin của VNC Server cùng với port kết nối tương ứng với user đã tạo ở trên
Gõ password của VNC user
Và kết quả thật tuyệt vời
Đến đây, về cơ bản là ta đã hoàn tất công việc, tuy nhiên kết nối VNC hiện tại theo mặc định là các kết nối không được mã hóa nên độ an toàn trở nên khá kém, chính vì thế ta cần làm thêm 1 bước là đưa các connection này vào SSH Tunnel. Với SSH, các VNC session được mã hóa và ta gọi nó là Tunnel. Bản chất của Tunnel là SSH sẽ tạo lớp bảo vệ bên ngoài cho các kết nối VNC, các VNC connection di chuyển trong 1 ống dẫn là SSH, kỹ thuật này cũng có thể được sử dụng cho các giao thức khác như POP, X, IMAP.
SSH Tunnel làm việc với port forwarding, về cơ bản là một phương thức chuyển đổi truy nhập từ một port cụ thể sang port khác trên cùng máy tính mà ứng dụng client không hề biết được việc này
Với user admin ở trên, ta sẽ sử dụng Putty với cách cấu hình như sau:
Tiếp theo là X11 Forwarding
Cuối cùng là setup thông số của instance cho Tunnel
Và kết nối SSH với password của user admin ở trên là password trên hệ thống Centos 7, không phải password của VNC Server. Đây là điều rất đáng chú ý ở bước 3 này.
Bây giờ, sau khi đã login SSH vào được, cứ để Putty ở đó, ta mở lại VNC Viewer và kết nối lại. Ta vẫn thấy VNC báo “Unencrypted Connection“, đó là bới vì VNC Viewer không hể biết port đã được forward và vẫn nghĩ là đang kết nối vào local nhưng thực chất SSH Tunneling đã đảm bảo an toàn cho kết nối này.
Vậy là ta đã hoàn thành việc kết nối, sử dụng giao diện đồ họa trên VPS cài đặt Centos 7 bằng 2 cách khác nhau trong ngày số 5 này. Sẽ có rất nhiều ứng dụng bắt buộc phải cài đặt, khởi động ở chế độ đồ họa này như Oracle hay Teamview, chính vì thế việc làm chủ kỹ thuật này sẽ giúp ta xử lý được mọi tình huống phát sinh mà không gặp trở ngại đáng kể nào.