73 lines
3.6 KiB
Bash
73 lines
3.6 KiB
Bash
#!/bin/bash
|
|
# แก้ FTP 530 Login incorrect ให้หมด — รันบนเซิร์ฟเวอร์: sudo bash ftp-fix-all-530.sh
|
|
# หลังรันแล้วต้องตั้งรหัสผ่านอีกครั้ง: sudo passwd ftpweb
|
|
|
|
set -e
|
|
FTP_USER="ftpweb"
|
|
HOME_DIR="/var/www/html"
|
|
SHELL_NOLOGIN="/usr/sbin/nologin"
|
|
|
|
echo "=== 1. ใส่ shell ใน /etc/shells (ต้องมีถึง vsftpd ถึงให้ login) ==="
|
|
if ! grep -Fxq "$SHELL_NOLOGIN" /etc/shells 2>/dev/null; then
|
|
echo "$SHELL_NOLOGIN" >> /etc/shells
|
|
echo "เพิ่ม $SHELL_NOLOGIN ใน /etc/shells แล้ว"
|
|
else
|
|
echo "มีอยู่แล้ว"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== 2. สร้าง user ถ้าไม่มี หรือแก้ shell + home ==="
|
|
if id "$FTP_USER" &>/dev/null; then
|
|
usermod -d "$HOME_DIR" -s "$SHELL_NOLOGIN" "$FTP_USER" 2>/dev/null || true
|
|
echo "มี user $FTP_USER แล้ว — แก้ shell/home แล้ว"
|
|
else
|
|
useradd -m -d "$HOME_DIR" -s "$SHELL_NOLOGIN" "$FTP_USER"
|
|
echo "สร้าง user $FTP_USER แล้ว"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== 3. vsftpd: ถ้าใช้ userlist อนุญาตเฉพาะรายการ — ใส่ ftpweb ในรายการที่อนุญาต ==="
|
|
for conf in /etc/vsftpd.conf /etc/vsftpd/vsftpd.conf; do
|
|
[ ! -f "$conf" ] && continue
|
|
UL_ENABLE=$(grep -E "^userlist_enable\s*=\s*YES" "$conf" 2>/dev/null || true)
|
|
UL_DENY=$(grep -E "^userlist_deny\s*=\s*NO" "$conf" 2>/dev/null || true)
|
|
if [ -n "$UL_ENABLE" ] && [ -n "$UL_DENY" ]; then
|
|
UL_FILE=$(grep -E "^userlist_file" "$conf" 2>/dev/null | head -1 | sed 's/.*=\s*//')
|
|
UL_FILE=${UL_FILE:-/etc/vsftpd.userlist}
|
|
[ -f /etc/vsftpd/user_list ] && UL_FILE=/etc/vsftpd/user_list
|
|
if [ -n "$UL_FILE" ] && [ -f "$UL_FILE" ]; then
|
|
grep -qx "$FTP_USER" "$UL_FILE" || echo "$FTP_USER" >> "$UL_FILE"
|
|
echo "ใส่ $FTP_USER ใน $UL_FILE แล้ว"
|
|
fi
|
|
fi
|
|
# ถ้า userlist_deny=YES = ไม่อนุญาตคนในรายการ — เอา ftpweb ออกจากรายการ
|
|
UL_DENY_YES=$(grep -E "^userlist_deny\s*=\s*YES" "$conf" 2>/dev/null || true)
|
|
if [ -n "$UL_DENY_YES" ]; then
|
|
UL_FILE=$(grep -E "^userlist_file" "$conf" 2>/dev/null | head -1 | sed 's/.*=\s*//')
|
|
UL_FILE=${UL_FILE:-/etc/vsftpd.user_list}
|
|
[ -f /etc/vsftpd/user_list ] && UL_FILE=/etc/vsftpd/user_list
|
|
if [ -f "$UL_FILE" ] && grep -q "^${FTP_USER}$" "$UL_FILE" 2>/dev/null; then
|
|
sed -i "/^${FTP_USER}$/d" "$UL_FILE"
|
|
echo "เอา $FTP_USER ออกจากรายการ deny ($UL_FILE) แล้ว"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "=== 4. สิทธิ์โฟลเดอร์ home (ให้ ftpweb เข้าถึงได้) ==="
|
|
chown -R "$FTP_USER:$FTP_USER" "$HOME_DIR" 2>/dev/null || true
|
|
# หรือถ้าเว็บรันด้วย www-data ให้แค่ execute ขึ้นไปได้
|
|
chmod 755 "$HOME_DIR" 2>/dev/null || true
|
|
|
|
echo ""
|
|
echo "=== 5. รีสตาร์ท vsftpd ==="
|
|
systemctl restart vsftpd 2>/dev/null || systemctl restart vsftpd.service 2>/dev/null || service vsftpd restart 2>/dev/null || true
|
|
echo "vsftpd รีสตาร์ทแล้ว"
|
|
|
|
echo ""
|
|
echo "=============================================="
|
|
echo "ต้องตั้งรหัสผ่านใหม่ด้วยคำสั่ง:"
|
|
echo " sudo passwd $FTP_USER"
|
|
echo "แล้วลองเข้า FTP ด้วย user: $FTP_USER และรหัสที่ตั้ง"
|
|
echo "=============================================="
|