info-ip-ssh-ftp-server-centos-stream-910

CentOS Stream ใช้ NetworkManager จัดการเครือข่าย, OpenSSH สำหรับการเชื่อมต่อระยะไกลและ SFTP, และ vsftpd เมื่อจำเป็นต้องเปิด FTP แบบเดิม บทความนี้ตั้งค่า FTP สำหรับดาวน์โหลดแบบ anonymous และอ่านอย่างเดียว ส่วนการอัปโหลดไฟล์และการยืนยันตัวตนให้ใช้ SFTP ผ่าน SSH เพราะ FTP ปกติไม่เข้ารหัสชื่อผู้ใช้ รหัสผ่าน หรือข้อมูล

ก่อนเริ่ม: ต้องมีสิทธิ์ sudo และเข้าถึงคอนโซล VM/เครื่องจริงได้หากเปลี่ยน IP แล้ว SSH หลุด ตรวจสอบ IP ที่จะใช้ว่าไม่ซ้ำกับเครื่องอื่น หากเซิร์ฟเวอร์อยู่บนคลาวด์ ให้เปิดพอร์ตใน security group หรือ cloud firewall เพิ่มตามจำเป็น ตัวอย่างด้านล่างใช้ 192.168.10.50/24 และ gateway 192.168.10.1 ซึ่งต้องเปลี่ยนให้ตรงเครือข่ายของคุณ

#1. ตรวจสอบรุ่นและชื่อเครือข่าย

cat /etc/centos-release
nmcli device status
nmcli connection show --active
ip -br address
ip route

ชื่อ DEVICE เช่น enp1s0 เป็นชื่อการ์ดเครือข่าย ส่วนชื่อ NAME ของ connection profile อาจเป็น System enp1s0 หรือชื่ออื่น อย่าสมมติว่าสองชื่อนี้ตรงกัน

รายการตัวอย่าง ค่า
Connection profile System enp1s0
Network interface enp1s0
IP/CIDR 192.168.10.50/24
Default gateway 192.168.10.1
DNS 1.1.1.1 และ 8.8.8.8

#2. ตั้งค่า IPv4 แบบคงที่ด้วย nmcli

กำหนดชื่อ profile และ interface ตามผลที่เครื่องของคุณแสดง ก่อนเรียกคำสั่งอื่น:

CON_NAME='System enp1s0'
IFACE='enp1s0'

sudo nmcli connection modify "$CON_NAME" \
  ipv4.method manual \
  ipv4.addresses 192.168.10.50/24 \
  ipv4.gateway 192.168.10.1 \
  ipv4.dns '1.1.1.1 8.8.8.8'

sudo nmcli connection up "$CON_NAME"

/24 หมายถึง subnet mask 255.255.255.0 หากใช้ SSH เชื่อมต่ออยู่ คำสั่ง connection up อาจตัดการเชื่อมต่อเดิม ให้ใช้คอนโซลของ VM/ผู้ให้บริการหรือเตรียมเข้าทาง IP ใหม่ไว้ก่อน และตรวจสอบว่าระบุ gateway อยู่ใน subnet เดียวกัน

ตรวจสอบค่าหลังเปิด profile:

ip -4 address show dev "$IFACE"
ip -4 route show default
nmcli -f IP4.ADDRESS,IP4.GATEWAY,IP4.DNS device show "$IFACE"
ping -c 3 192.168.10.1

หากต้องกลับไปใช้ DHCP ให้ทำจาก คอนโซล เมื่อยังเข้าเครื่องได้:

sudo nmcli connection modify "$CON_NAME" \
  ipv4.method auto ipv4.addresses '' ipv4.gateway '' ipv4.dns ''
sudo nmcli connection up "$CON_NAME"

ไม่จำเป็นต้องแก้ไฟล์ /etc/resolv.conf โดยตรง เพราะ DNS ของ connection profile อยู่ภายใต้การจัดการของ NetworkManager

#3. เปิด SSH Server และ SFTP

หากกำลังเข้าเครื่องผ่าน SSH: การเปิด firewalld อาจเปลี่ยนกฎที่ใช้กับ interface และทำให้การเชื่อมต่อหลุด ตรวจสอบ zone และสิทธิ์เข้า TCP 22 จากคอนโซลของ VM/เครื่องจริงก่อนเปิด firewall หรือทำขั้นตอนนี้ผ่านคอนโซลโดยตรง

ติดตั้งและเปิดบริการ SSH:

sudo dnf install -y openssh-server firewalld
sudo systemctl enable --now sshd
sudo systemctl enable --now firewalld
sudo systemctl status sshd --no-pager

ตรวจสอบ firewall zone ที่ผูกกับ interface; ตัวอย่างต่อไปนี้ใช้ค่า zone ที่เครื่องแสดง หากเป็น public ให้ใช้ ZONE=public:

sudo firewall-cmd --get-active-zones
ZONE=public
sudo firewall-cmd --zone="$ZONE" --add-service=ssh --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --zone="$ZONE" --list-services

จากเครื่องลูกข่าย เช่น macOS, Linux หรือ PowerShell ที่มี OpenSSH:

ssh youruser@192.168.10.50
sftp youruser@192.168.10.50

ssh ใช้ล็อกอินและสั่งงาน ส่วน sftp ใช้โอนไฟล์ผ่านช่องทาง SSH ที่เข้ารหัส ทั้งคู่ใช้ TCP 22 ในตัวอย่างนี้ SFTP ไม่ใช่ FTP ที่เปลี่ยนพอร์ต และไม่ต้องติดตั้ง vsftpd หากต้องการเพียงโอนไฟล์อย่างปลอดภัย

#เพิ่มการยืนยันตัวตนด้วย SSH key (แนะนำ)

บน เครื่องลูกข่าย สร้าง key แล้วคัดลอก public key ไปยังบัญชีบนเซิร์ฟเวอร์:

ssh-keygen -t ed25519
ssh-copy-id youruser@192.168.10.50
ssh youruser@192.168.10.50

หากจะปิดการล็อกอินด้วยรหัสผ่าน ให้ทดสอบการเข้าเครื่องด้วย key จาก หน้าต่างใหม่ ให้สำเร็จก่อน และคงหน้าต่าง SSH เดิมไว้ จากนั้นแก้ /etc/ssh/sshd_config ให้มี PasswordAuthentication no และ KbdInteractiveAuthentication no, ตรวจด้วย sudo sshd -t, โหลดใหม่ด้วย sudo systemctl reload sshd, และตรวจค่าที่มีผลจริงด้วย sudo sshd -T โดยเฉพาะเมื่อมีไฟล์ใน sshd_config.d ห้ามปิดรหัสผ่านก่อนยืนยันว่า key ใช้งานได้

#4. ติดตั้ง FTP Server ด้วย vsftpd (อ่านอย่างเดียว)

กรณีนี้เหมาะกับการแจกไฟล์ในเครือข่ายที่ควบคุมได้ โดยลูกค้าเชื่อมต่อแบบ anonymous และ อัปโหลดไม่ได้ ถ้าต้องล็อกอินหรืออัปโหลด ให้ใช้ SFTP ตามหัวข้อ 3

sudo dnf install -y vsftpd
sudo cp -a /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
sudoedit /etc/vsftpd/vsftpd.conf

ค้นหาบรรทัดเดิมแล้วแก้ให้เหลือคำสั่งแต่ละรายการเพียงครั้งเดียว โดย คงค่าอื่นที่ distribution จัดมาไว้:

anonymous_enable=YES
local_enable=NO
write_enable=NO
anon_upload_enable=NO
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40010

ตัวอย่างนำไฟล์ออกให้ดาวน์โหลด:

sudo install -d -m 755 /var/ftp/pub
printf 'CentOS Stream FTP test\n' | sudo tee /var/ftp/pub/hello.txt >/dev/null
sudo chmod 644 /var/ftp/pub/hello.txt
sudo restorecon -Rv /var/ftp
sudo systemctl enable --now vsftpd
sudo systemctl restart vsftpd
sudo systemctl status vsftpd --no-pager

เพิ่มบริการ FTP (TCP 21) และช่วงพอร์ตสำหรับ passive data connection ใน firewall zone เดียวกับ interface:

sudo firewall-cmd --zone="$ZONE" --add-service=ftp --permanent
sudo firewall-cmd --zone="$ZONE" --add-port=40000-40010/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --zone="$ZONE" --list-all

จากเครื่องลูกข่ายทดสอบดาวน์โหลดไฟล์:

curl --fail --show-error --noproxy '*' \
  ftp://192.168.10.50/pub/hello.txt \
  --output hello-downloaded.txt
cat hello-downloaded.txt

ถ้าอยู่หลัง NAT/เราเตอร์ ต้อง forward ทั้ง TCP 21 และช่วง passive ports ไปยังเครื่อง FTP และอาจต้องตั้ง pasv_address เป็น IP ภายนอก (หรือชื่อ DNS ร่วมกับ pasv_addr_resolve=YES) ตามการเข้าถึงจริง เปิดพอร์ตดังกล่าวใน cloud firewall ด้วยหากใช้งานบนคลาวด์ การทดลองใน LAN เดียวกันมักไม่ต้องตั้งค่านี้

#5. แก้ปัญหาเบื้องต้น

อาการ ตรวจสอบ
ตั้ง IP แล้วเข้าเครื่องไม่ได้ ตรวจ nmcli connection show --active, ip -4 address, gateway, IP ซ้ำ และเครือข่ายของ VM; เข้าแก้ผ่านคอนโซล
SSH เข้าไม่ได้ ตรวจ systemctl status sshd, sudo sshd -t, firewall-cmd --get-active-zones, cloud firewall และ IP ใหม่
FTP ต่อได้แต่แสดงรายการ/ดาวน์โหลดไม่ได้ ตรวจ pasv_min_port, pasv_max_port, zone, NAT และ cloud firewall
FTP เปิดไฟล์ไม่ได้ ตรวจสิทธิ์ /var/ftp/pub, ls -Z /var/ftp/pub และ sudo journalctl -u vsftpd -b --no-pager; ใช้ restorecon แก้ context ตามค่าเริ่มต้น
ต้องส่งไฟล์โดยใช้บัญชีผู้ใช้ ใช้ sftp youruser@server แทนการเปิด local login ใน FTP ที่ไม่เข้ารหัส

สรุป: ตั้ง IP ด้วย nmcli → เปิด sshd และ TCP 22 → ใช้ SFTP เมื่อมีการล็อกอินหรือส่งไฟล์ → เปิด vsftpd แบบอ่านอย่างเดียวพร้อม TCP 21 และ passive ports เมื่อจำเป็นต้องรองรับ FTP

#แหล่งอ้างอิง