Xử lý lỗi cert SSL trên esxi

Case: Khi cài đặt Esxi ver 6.5. Một thanh niên cầu toàn, oder ngay 1 domain hịn, 1 SSL tương ứng để cắm lên ESXi với mục đích truy cập cho đỡ phải nhớ IP, và đã truy cập bẳng có ổ khoá xanh trên trình duyệt mới đã (Đừng hỏi tại sao lại public trang quản trị ESXi ra ngoài). Không may, up cái cert lỗi tè le lên, và thế là trang web quản trị chết toi luôn, telnet port 80, 443 thấy không thông nữa. làm gì đây:

Giải pháp: thay thế cert trên Esx bằng cert đúng

Bước 1: Truy cập vào màn hình console của ESXi bật SSH và ESX SHELL lên.

Bước 2: kiếm 1 máy tính  nào đó khác, sinh key RSA mới, ở đây chúng ta có 1 máy centos 7, đã cài sẵn openssl, sử dụng lệnh sau để sinh key:

openssl req -x509 -nodes -sha256 -days 1095 -newkey rsa:2048 -keyout rui.key -out rui.crt

Sau bước này sẽ sinh 2 file rui.key và rui.crt

Bước 4: SSH tới máy chủ ESXi, thư mục /etc/vmware/ssl và backup lại 2 file rui.key và rui.crt

# mv /etc/vmware/ssl/rui.crt /etc/vmware/ssl/rui.crt.bkp 
# mv /etc/vmware/ssl/rui.key /etc/vmware/ssl/rui.key.bkp

Bước 5: thay thế 2 file đã sinh ra ở bước 3, đưa vào đường dẫn /etc/vmware/ssl trên ESXi

Bước 6: Khởi động lại dịch vụ

cd
service.sh restart

Bước 7: Nghiệm thu

Tìm hiểu kiến trúc Java Memory Model và Garbage Collection

Trong bài viết này, kiến thức được áp dụng cho java 8  JDK8 Oracle Hot Spot 64 bit JVM. Trước hết, dưới đây là mô tả các vùng bộ nhớ của java

Mỗi khi khởi tạo JVM, OS cấp phát bộ nhớ cho process. Process cho chính con JVM, và phần bộ nhớ cấp cho nó bao gồm: Heap, meta space, JIT code cache, thread stack, và shared library. Chúng ta gọi phần bộ nhớ này là Native memory. Native memory là phần bộ nhớ được cung cấp cho các tiến trình bởi OS. Phần bộ nhớ này là bao nhiêu thì còn phụ thuộc vào  OS, CPU, và JRE. Chúng ta cùng tìm hiểu qua về các phần bộ nhớ có trong JVM:

Heap Memory: JVM sử dụng phần bộ nhớ này để lưu trữ các object. Phần bộ nhớ này được chia ra làm 2 vùng khác nhau gọi là “Young Generation Space” và “Tenured Space“.

Young generation: hay còn gọi là New Space được chia thành 2 phần nhỏ hơn gọi là Eden Space” và “Survivor Space.

Eden Space: khi chúng ta khởi tạo 1 object, phần bộ nhớ cho object đó sẽ lấy từ eden space.

Survivor space: chứa những object còn sót lại sau khi Young garbage collection hoặc Minor garbage collection hoạt động (2 trình dọn rác). Phần này được chia là 2 khối bộ nhớ bằng nhau: S0 và S1

Tenured space: object sẽ chạm ngưỡng tenused tối đa trong quá trình minor GC hoặc Young GC sẽ được move tới vùng này, hoặc vùng old generation space

Dưới đây, chúng ta sẽ nói thêm về garbage collection sau.

Meta space: Phần bộ nhớ này nằm bên ngoài của Heap memory, và cũng là 1 phần của native memory. theo tài liệu mặc định, meta space không có giới hạn max cụ thể là bao nhiêu. Trong các phiên bản java trước, phần bộ nhớ này được gọi là perm gen space. Phần bộ nhớ này có nhiệm vụ lưu trữ các định nghĩa các class bởi class loader. Nó được thiết kế để tránh lỗi out of memory. Tuy nhiên, nếu nó tăng tưởng vượt quá dung lượng có sẵn của bộ nhớ vật lý thì hệ điều hành sẽ ném nó sang phần virtual memory (swap).  Điều này sẽ ảnh hưởng nghiêm trọng tới hiệu năng của ứng dụng và việc chuyển qua lại giữa virtual memory và physical memory là một tiến trình tốn kém về mặt hiệu năng. Có một số option được thiết lập khi khởi tạo JVM để giới hạn phần dung lượng meta space, tuy nhiên, làm như vậy có thể gây ra lỗi out of memory.

Code cache: JVM có một trình biên dịch để biên dịch byte code và convert chúng sang ngôn ngữ máy. Để tối ưu cho JVM, trình JIT (Just in time) được ra đời, các khối code thường được truy cập sẽ được biên dịch sang ngôn ngữ máy bởi JIT và lưu trữ trong vùng code cache. Sau đó, phần này sẽ được trình biên dịch bỏ qua.

Bây giờ, chúng ta sẽ thảo luận về tiến trình garbage collection. JVM sử dụng các tiến trình riêng rẽ cho việc garbage collection (GC). Như đã đề cập tới ở trên, khi ứng dụng tạo các object, JVM sẽ cố lấy phần bộ nhớ cần thiết từ eden space. JVM thực hiện quá trình GC dưới dạng minor GC và major GC. Dưới đây là minh hoạ cho minor GC

Khi khởi tạo, survivor space và tenured space rỗng. Khi JVM không thể lấy bộ nhớ từ eden space được nữa thì nó khởi động tiến trình minor GC. Trong khi minor GC, các object không thể sử dụng được nữa sẽ bị đánh dấu là collected. JVM sẽ chọn một trong 2 phần của survivor space làm “to space”, nó có thể là S0 hoặc S1. Ví dụ nó chọn S0 làm “to space”, JVM sẽ copy các object còn có thể sử dụng vào “to space” (S0) và tăng 1 con số gọi là Age của object đó lên 1, các object không nhét vào survivor space được sẽ bị nhét vào tenured space. Tiến trình này được gọi là “premature promation”. Ở hình bên dưới, tôi đã làm cho “to space” lớn hơn dung lượng được cấp phát, lưu ý rằng survivor không được tăng.

Trong hình trên, các object được đánh dấu màu đỏ có nghĩa rằng nó không còn sử dụng được nữa. Còn lại thuộc về GC roots, vẫn đang còn được sử dụng và sẽ không bị move đi bởi GC. GC sẽ ném phần màu đỏ đi và trả lại bộ nhớ trống cho eden space.

Đối với quá trình minor GC thứ 2, GC sẽ đánh dấu các object vô dụng từ eden space và “to space” S0, và copy GC roots sang survivor khác là S1, Age của các object sẽ được tăng lên tiếp.

Trong hình trên, object được đánh dấu với màu đỏ, sẽ bị GC copy từ eden vào survivor tới vùng survivor S1 và object được tăng thêm.

Tiến trình trên được lặp lại với mỗi minor GC, khi object được chạm tới số Age tối đa cho phép, nó sẽ bị ném sang tenured space.

Vì lẽ đó, JVM có 1 option gọi là MaxTenuringThreshold, để định nghĩa số Age tối đa của object. mặc định con số này là 15

Chung kết lại là minor GC sẽ thu hồi lại bộ nhớ từ Young Generation Space. Minor GC là một tiến trình “stop the world”. Thỉnh thoảng, ứng dụng bị dừng lại, nhưng không đánh kể. Minor GC có thể được chạy dưới dạng đơn luồng hoặc đa luồng, tuỳ vào GC collector được sử dụng.

Nếu minor GC được chạy vài lần, thì Tenured space sẽ bị đầy dần lên và phải cần thêm GC nữa. Khi đó, JVM khởi chạy major GC. đôi khi, có thể gọi tiến trình này là full GC.Nhưng, như 1 phần của full GC, JVM sẽ thu hồi phần bộ nhớ từ Meta space, nếu không có object nào trong heap, thì những class đã được load sẽ bị remove khỏi meta space.

Dưới đây là những trigger mà JVM sử dụng để gọi major GC:

  • Nếu developer sử dụng hàm system.gc() hoặc Runtime.getRunTime().gc()
  • Nếu JVM nhận thấy rằng không đủ bộ nhớ tenred space.
  • Nếu khi thực hiện minor GC, JVM cảm thấy không thể lấy đủ bộ nhớ từ eden hoặc survivor space.
  • Nếu có option MaxMetaspaceSize được đặt sẵn, và JVM không đủ memory để load class mới.

Hướng dẫn cài đặt oracle client trên redhat 7 – How to install oracle client 12 on redhat

Chuẩn bị:
– Redhat enterprise 7, có thể cài thêm repo: https://devopsvn.xyz/cai-dat-centos-repo-cho-redhat-rhel-7/

– Bộ cài Oracle client 12: https://www.oracle.com/technetwork/database/enterprise-edition/downloads/oracle12c-linux-12201-3608234.html

Trên máy chủ linux, cài đặt các gói: unzip, gcc

yum install -y gcc unzip

Download bộ cài client: linuxx64_12201_client.zip

Giải nén bộ cài, ta được thư mục client

[root@testora opt]# tree -L 3
.
├── client
│   ├── install
│   │   └── ***********
│   ├── response
│   │   ├── client_install.rsp  #File response, cấu hình cho quá trình cài đặt
│   │   └── netca.rsp
│   ├── runInstaller # File cài đặt
│   ├── stage
│   │   ├── **********
│   └── welcome.html
└── linuxx64_12201_client.zip

Mở file response/client_install.rsp và thiết lập các thông số như sau:

UNIX_GROUP_NAME=oracle
INVENTORY_LOCATION=/u01/oracle/ora_inventory
ORACLE_HOME=/u01/oracle/client_v12.2_base/home
ORACLE_BASE=/u01/oracle/client_v12.2_base
oracle.install.client.installType=Administrator

Một số lưu ý:
INVENTORY_LOCATION : đường dẫn thư mục này phải khác với đường dẫn cho ORACLE_HOME và ORACLE_BASE

đường dẫn ORACLE_HOME nên nằm bên trong ORACLE_BASE

oracle.install.client.installType nên để Administrator, sau này sẽ có nhiều tùy chỉnh hơn.

UNIX_GROUP_NAME: Oracle client không cài được dưới user root, nên phải tạo user khác cho nó, group tương ứng với user đó là gì thì điền vào đây, Group này phải có quyền đọc ghi , exec tất cả các đường dẫn đã khai báo trên. (dùng đường dẫn nào thì vào chown cho nó)

Sau khi khai báo, đứng ở thư mục chứa file runInstaller ở trên, chạy:

./runInstaller -silent -responseFile /opt/client/response/client_install.rsp</span>

Nhớ thay đường dẫn đúng vào file client_install.rsp ở trên.

Sau khi chạy, sẽ hiển thị dạng:

[oracle@testora client]$ ./runInstaller -silent -responseFile /opt/client/response/client_install.rsp
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 415 MB.   Actual 32130 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 3967 MB    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2019-06-22_01-52-44PM. Please wait ...
[oracle@testora client]$
[oracle@testora client]$
[oracle@testora client]$ [WARNING] [INS-13014] Target environment does not meet some optional requirements.
   CAUSE: Some of the optional prerequisites are not met. See logs for details. installActions2019-06-22_01-52-44PM.log
   ACTION: Identify the list of failed prerequisite checks from the log: installActions2019-06-22_01-52-44PM.log. Then either from the log file or from installation manual find the appropriate configuration to meet the prerequisites and fix it manually.
You can find the log of this install session at:
 /u01/oracle/ora_inventory/logs/installActions2019-06-22_01-52-44PM.log
The installation of Oracle Client 12c was successful.
Please check '/u01/oracle/ora_inventory/logs/silentInstall2019-06-22_01-52-44PM.log' for more details.

As a root user, execute the following script(s):
        1. /u01/oracle/ora_inventory/orainstRoot.sh



Successfully Setup Software.

[oracle@testora client]$

Làm theo hướng dẫn, chuyển qua user root, chạy /u01/oracle/ora_inventory/orainstRoot.sh là xong.

 

 

Cài đặt centos repo cho redhat rhel 7

Case: Cài đặt redhat enteprise, chưa active gì, trong máy không có repo nào để cài gói cơ bản, mở /etc/yum.repo.d rỗng.

Để cài đặt centos repo cho redhat, tiền hành làm như sau:
Tạo file mới có định dạng .repo ví dụ Centos.repo trong thư mục /etc/yum.repo.d

Nội dung:

[centos]
name=CentOS-7
baseurl=http://ftp.heanet.ie/pub/centos/7/os/x86_64/
enabled=1
gpgcheck=1
gpgkey=http://ftp.heanet.ie/pub/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7

Sau đó lưu lại dưới tên Centos-Base.repo
Tiếp tục chạy lệnh:

yum repolist
Tiếp theo đã có thể cài đặt các gói bằng yum

Note cài đặt postgresql trên centos 7

Cài đặt PostgreSQL trên centos 7
Tính tới thời điểm hiện tại 2019-06, version khi cài đặt PostgreSQL qua yum trên centos 7 là 9.2.24
[root@posgres-2 etc]# yum info postgresql-server
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: centos-hn.viettelidc.com.vn
* epel: mirror.horizon.vn
* extras: centos-hn.viettelidc.com.vn
* updates: centos-hn.viettelidc.com.vn
Installed Packages
Name : postgresql-server
Arch : x86_64
Version : 9.2.24
Release : 1.el7_5
Size : 16 M
Repo : installed
From repo : base
Summary : The programs needed to create and run a PostgreSQL server
URL : http://www.postgresql.org/
License : PostgreSQL
Description : PostgreSQL is an advanced Object-Relational database management system (DBMS).
: The postgresql-server package contains the programs needed to create
: and run a PostgreSQL server, which will in turn allow you to create
: and maintain PostgreSQL databases.

Chúng ta sẽ cài version này, trước hết update toàn bộ lên cho chắc cú
yum update -y
Tiến hành cài đặt:
yum install postgresql-server postgresql-contrib -y
Thiết định ban đầu:
postgresql-setup initdb
systemctl enable postgresql
systemctl start postgresql

Kiểm tra service nó đã listen chưa:
[root@posgres-2 etc]# netstat -napl | grep post
tcp 0 127.0.0.1:5432 0.0.0.0:* LISTEN 3209/postgres
udp6 0 0 ::1:39788 ::1:39788 ESTABLISHED 3209/postgres
unix 2 [ ACC ] STREAM LISTENING 41137 3209/postgres /tmp/.s.PGSQL.5432
unix 2 [ ACC ] STREAM LISTENING 41135 3209/postgres /var/run/postgresql/.s.PGSQL.5432
unix 3 [ ] STREAM CONNECTED 41116 3210/postgres: logg

Thấy rõ, mặc định thằng này listen trên localhost, thế này thì từ bên ngoài làm sao kết nối tới được. Chúng ta enable nó lên cho listen trên tất cả interface. Mở file cấu hình của thằng này:
vim /var/lib/pgsql/data/postgresql.conf
Sửa lại các dòng có key tương ứng như sau:
listen_addresses = '*'
restart lại service:
systemctl restart postgresql
Đã xong phần cài đặt service, tiếp theo sẽ là tạo database, user, etc
PostgreSQL sau khi cài đặt, tự động nó sẽ thêm vào cho hệ điều hành 1 user = postgres
Mọi thao tác với PostGreSQL phải switch sang user này để thực hiện:
[root@posgres-2 ~]# su - postgres
-bash-4.2$

Tạo database:
psql -c createdb <tên database>
Kết nối vào database đã có:
psql
Ví dụ:
psql chip1stop
psql (9.2.15)
Type "help" for help.

chip1stop=#
Xem danh sách các database, từ PostgreSQL shell: \l
Xoá database: dropdb
Xem danh sách table: \dt

Sử dụng zabbix theo dõi thông tin metric của cluster hadoop

Yêu cầu:

  • Monitor đc các thông số cơ bản của cluster hadoop:
    • Số lượng app được submit
    • Số app đang chạy
    • Số app đang pending
    • Số memory: total, used
    • Số Vcore: Total, used
    • Node: số node, số node bị mất, số node có trạng thái unhealthy

Thực hiện:

  • Có thể xem các con số trên tại trang running custer của resource manager:

  • Ngoài ra, còn có thể sụng API để lấy các con số này:

Dưới đây là script thực hiện lấy các giá trị:

Apps Submitted
Apps Pending
Apps Running
Memory Used

Memory Total

VCores Used

VCores Total

Active Nodes

lostNodes

unhealthyNodes

totalNodes

Các giá trị này để gửi tới zabbix để xây dựng biểu đồ, và lưu trữ, thiết lập cảnh báo.

Dưới đây là script lấy số liệu:

#!/bin/bash
echo "appsSubmitted
appsPending

appsRunning

allocatedMB

totalMB

allocatedVirtualCores

totalVirtualCores

activeNodes

lostNodes

unhealthyNodes

totalNodes" > /tmp/readkey

curl -s -H "Content-Type: application/xml" http://c2s-spk06:8088/ws/v1/cluster/metrics http://c2s-spk07:8088/ws/v1/cluster/metrics > /tmp/input

IFS=$'\n'

for i in `cat /tmp/readkey`;do

a=`egrep -o "${i}\":[0-9]+" /tmp/input | awk -F':' '{print $2}'`

echo "$HOSTNAME yarn.metric.$i $a"

done

 

Output có dạng:

c2s-spk06 yarn.metric.appsSubmitted 443
c2s-spk06 yarn.metric.appsPending 0
c2s-spk06 yarn.metric.appsRunning 25
c2s-spk06 yarn.metric.allocatedMB 265216

c2s-spk06 yarn.metric.totalMB 307200

c2s-spk06 yarn.metric.allocatedVirtualCores 131

c2s-spk06 yarn.metric.totalVirtualCores 320

c2s-spk06 yarn.metric.activeNodes 5

c2s-spk06 yarn.metric.lostNodes 0

c2s-spk06 yarn.metric.unhealthyNodes 0

c2s-spk06 yarn.metric.totalNodes 5

Thiết lập đặt vào cron của máy hadoop, chạy 10 phút 1 lần, và đẩy output cho zabbix sender xử lý, gửi tới zabbix server, chi tiết cú pháp xem help của zabbix sender.

*/10 * * * * /bin/bash GetClusterMetricSpark.sh | /usr/local/zabbix/bin/zabbix_sender -i - -z ws-zbx

 

Các thông số của CPU trên linux

Các thông số của CPU khi sử dụng lệnh top
Cpu(s): 0.1%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
0.1%us CPU đang sử dụng 0.1% năng lực xử lý cho running user space processes, tức các tiến trình không thuộc về hoạt động của kernel như shell, các trình biên dịch, database, webserver, và các chương trình khác. Nếu CPU không ở trạng thái nghỉ, idle thì thường phần lớn năng lực của nó đang dùng cho các tiến trình user như thế này.

99.7%id Con số này nói cho chúng ta biết, CPU dành 99.7% thời gian của nó để nghỉ ngơi trong lần lấy mẫu gần nhất, không có gì để làm. Tổng của các con số us, id, ni càng gần 100% càng tốt, nếu không, có lẽ có gì đó sai sai đang xảy ra.
0.2%sy Con số này là lượng thời gian mà CPU dành cho xử lý của kernel, tất cả các process và tài nguyên hệ thống được phụ trách bởi linux kernel. Khi các tiến trình của người dùng (user space processes) cần cái gì đó từ hệ thống như xin cấp phát bộ nhớ, đọc ghi, tạo thêm tiến trình con, thì kernel sẽ làm những việc này. Trong thực tế, kernel sẽ tự đặt lịch, quyết định tiến trình nào sẽ chạy trước, cái nào chạy sau. Con số CPU dành cho phần này càng ít càng tốt, nếu nhiều hơn, có lẽ có vấn đề gì đó như I/O đang tăng cao quá mức.
0.0%ni Con số này phần trăm CPU sử dụng để thay đổi độ ưu tiên các process.
0.0%wa Con số thể hiện %CPU đang dành cho việc ngồi đợi I/O
0.0%hi Con số thể hiện %CPU dùng cho việc xử lý phần cứng bị gián đoạn. Phần cứng gián đoạn từ nhiều phạm vi khác nhau như ổ đĩa lởm, đường truyền mạng tậm tịt, etc, gây ra gián đoạn những gì CPU đang xử lý.
0.0%si Con số thể hiện %CPU dùng cho việc xử lý khi có phần mềm bị gián đoạn. Không thường xảy ra ở mức CPU, thường xảy ra từ lớp kernel trở lên.
0.0%st COn số này dành cho các máy chủ ảo, khi linux chạy trong máy ảo, trên lớp hypervisor, số st ( short for stolen) thể hiện bao nhiêu CPU đã sử dụng để đợi thằng hypervisor, khi nó phục vụ tài nguyên cho các con CPU khác. Con số này bắt nguồn từ thực tế rằng, có nhiều processor ảo dùng chung processor vật lý với nhau.

Một số vấn đề với các con số trên: (để nguyên tiếng anh)

High user mode – If a system suddenly jumps from having spare CPU cycles to running flat out, then the first thing to check is the amount of time the CPU spends running user space processes. If this is high then it probably means that a process has gone crazy and is eating up all the CPU time. Using the top command you will be able to see which process is to blame and restart the service or kill the process.

High kernel usage – Sometimes this is acceptable. For example a program that does lots of console I/O can cause the kernel usage to spike. However if it remains higher for long periods of time then it could be an indication that something isn’t right. A possible cause of such spikes could be a problem with a driver/kernel module.

High niced value – If the amount of time the CPU is spending running processes with a niced priority value jumps then it means that someone has started some intensive CPU jobs on the system, but they have niced the task.
If the niceness level is greater than zero then the user has been courteous enough lower to the priority of the process and therefore avoid a CPU overload. There is probably little that needs to be done in this case, other than maybe find out who has started the process and talk about how you can help out!
But if the niceness level is less than 0, then you will need to investigate what is happening and who is responsible, as such a task could easily cripple the responsiveness of the system.

High waiting on I/O – This means that there are some intensive I/O tasks running on the system that don’t use up much CPU time. If this number is high for anything other than short bursts then it means that either the I/O performed by the task is very inefficient, or the data is being transferred to a very slow device, or there is a potential problem with a hard disk that is taking a long time to process reads & writes.

High interrupt processing – This could be an indication of a broken peripheral that is causing lots of hardware interrupts or of a process that is issuing lots of software interrupts.

Large stolen time – Basically this means that the host system running the hypervisor is too busy. If possible, check the other virtual machines running on the hypervisor, and/or migrate to your virtual machine to another host.

Tìm hiểu về 2 chế độ active và passive của FTP

  • Giới thiệu 

Active và Passive FTP: Đây là 2 chế độ hoạt động của FTP server. Bài viết này sẽ giải thích về sự ảnh hưởng khác nhau của Firewall lên 2 chế độ Active và Passive. Bài viết này được viết theo kinh nghiệm của mình.

  • Cơ bản FTP Service

FTP chỉ sử dụng TCP để truyền tải, FTP server sẽ listen trên 2 port 20 và 21, sử dụng port 21 để xác thực, điều khiển ( gọi là control port) và Port 20 để truyền tải dữ liệu ( data Port ). Nhưng data port không hẳn luôn luôn là 20 mà nó phụ thuộc vào FTP mode. Sau khi đọc xong hết bài viết các bạn sẽ hiểu được điều này.

  • Active FTP

Active FTP thì client sẽ đi tới FTP server bằng 1 port ngẫu nhiên unprivileged port ( là port có số lớn hơn 1023 ), sau đây sẽ gọi là port S, để connect tới port command trên server là port 21. Sau đó Client sẽ listen trên port S+1 và gửi command port “port S+1” cho thằng server: tao đang chờ mày ở port S+1. FTP server sẽ connect tới port S+1 của Client bằng data port mặt định của nó là port 20.

Hình ví dụ minh họa cho Active FTP mode.


Ở bước 1, từ command port 1026 Client kết nối tới command port 21 của Server và gửi command port PORT 1027. Server gửi gói tin ACK (hiểu đơn giản là chấp nhận ) về cho Client ở bước 2. Bước 3 Server khởi tạo kết nối từ port data 20 tới port 1027 của Client ( port 1027 là port Client gửi cho Server ở bước 1 ). Và cuối cùng là Client gửi gói tin ACK về cho Server.

Vấn đề chính gặp phải khi sử dụng Active FTP là có thể bị mất kết nối ở phía Client. Client không khởi tạo kết nối tới port data của Server mà nó đơn giản chỉ nói với Server là tôi đang lắng nghe trên port 1027 và chờ Server kết nối tới. Nếu có tồn tại Firewall đứng trước Client thì có thể thằng client listen port 1027 chờ server gửi dữ liệu nhưng bị firewall ở ngoài chặn mất.

  • Passive FTP

Thay vì tập trung giải quyết vấn đề bị firewall chặn ở Active mode, thì một different method (một phương thức kết nối mới cho FTP ) for FTP connections được xây dựng. đó là Passive mode.

Trong passive mode FTP Client khởi tạo 2 connections đến Server, như vậy là giải quyết được vấn đề bên phía Client Blocked connection từ Server đến data port của Client. Passive mode hoạt động như sau.

Khi khởi tạo kết nối thì Client mở 2 ports random unprivileged port local (N > 1023 and N+1 ). Port đầu tiên Client mở connect tới port 21 của Server. Nhưng thay thì gửi PORT command như ở Active mode thì Client sẽ gửi câu lệnh PASV command. Lúc đó Server sẽ khởi tạo a random unprivileged port ( P > 1023)
và gửi P đến Client trong cái response PASV command. Lúc này Client khởi tạo connection từ port N+1 của nó tới port P trên Server và transfer data.


Tại Step 1. Client liên lạc với Server trên command port và đưa ra câu lệnh PASV. Server trả lời ở Step 2 với PORT 1024 và nói với Client đây là port dữ liệu tối đang lắng nghe. Step 3 Client khởi tạo data connection từ port Data của nó tới port 1024 mà Server đã gửi cho nó. Cuối cùng là Server gửi lại gói tin ACK chấp nhận.

Với Passive mode ta giải quyết được nhiều vấn đề ở phía Client, nhưng nó đã mở ra một range port lớn tạo nên các lổ hỏng nguy hiểm cho phía Server. Vấn đề lớn nhất ở đây là phải chấp nhận hầu hết các kết nối port > 1023 trên Server

Vì lý do này nên hầu hết các FTP Service đều được khai báo một range port nhất định, để dễ dàng Control hơn. và tránh rũi ro.

Vấn đề lớn thứ 2 là phía Client không hổ trợ Passive Mode. Ví Dụ như nếu ai sài Solaris thì commandline FTP không hổ trợ cơ chế Passive này mà phải sử dụng FTP software client của hãng khác. ví dụ như ncftp.

Một số lượng lớn người dùng sử dụng Browser (Trình duyệt) của mình để đăng nhập vào FTP server. và trên Browser chỉ hổ trợ Passive mode.

  • Một chú ý khác.

Active FTP Mode không thể hoạt động được với mô hình Client-side NAT Device. Vì thiết bị này không có khả năng thay thế thông tin IP trong FTP Packets.

  • Tổng hợp 

Dưới đây là một biểu đồ nhỏ để giúp chúng ta nhớ được 2 mode FTP trên.

Active FTP :
command : client >1023 –> server 21
data : client >1023 <– server 20

Passive FTP :
command : client >1023 –> server 21
data : client >1024 –> server >1023

Như vậy, với Active FTP thì có lợi cho FTP Server admin, nhưng lại ảnh hưởng tới Client side. Server tạo connetion tới random hight ports trên Client. Có thể sẽ bị Firewall Client Side Blocked. Còn với Passive FTP thì có lợi cho phía Client nhưng thiệt bên FTP Server admin. Client khởi tạo 2 kết nối tới Server với Hight Ports có thể sẽ bị Server Blocked.

Tuy vậy nhưng với kinh nghiệm và hiểu biết của mình thì nếu Support cho một hệ thống với nhiều truy cập FTP từ Client. thì Nên setup Passive mode. Việc Control trên một Server để giúp tất cả Client có thể connect tới thì dễ hơn là việc Control trên Firewall của Từng Client Side.

Hướng dẫn cài đặt VNC server trên centos


Để sử dụng GUI từ xa của centos, có thể dùng VNC server, sau đây là hướng dẫn:

Lệnh cài đặt:
yum install tigervnc-server -y
chkconfig vncserver on

VNC sử dụng chính user của hệ điều hành, nên cần thêm user thì chỉ cần dùng lệnh useradd như bình thường, tuy nhiên, password thì VNC dùng password riêng. Để đặt password, ví du cho user huybk thì cần:
su - huybk
vncpasswd

Thêm dòng cấu hình vào file: vi /etc/sysconfig/vncservers
VNCSERVERS="1:huybk"
VNCSERVERARGS[1]="-geometry 1280x768"

Khởi động lại service vnc để cấu hình có hiệu lực
service vncserver restart

Phía client: Truy cập http://tigervnc.bphinz.com/nightly/ để download bản vnc client phù hợp
kết nối tới server mới cài ở địa chỉ
IP server:5901


Notice: ob_end_flush(): failed to send buffer of zlib output compression (0) in /home/devopsvn/public_html/wp-includes/functions.php on line 5427