Linux FTP 时区显示错误

使用linux自带的Fftp命令访问一个新搭建的ftp服务器(使用vsftpd)时发现ls出的文件修改时间与实际时间有差异,如下图:
ftp中ls:

\"ftpls\"
ssh 中ls:
\"sshls\"

目测是ftp服务器与本地时区设置不同或目标服务器时间错误导致。联络主机管理员对远程主机进行了ntpupdate,时间服务器是内网同一服务器。操作后问题依旧。于是开始了google、statcoverflow。

最终在这里,看到那哥们的回答:

After 2 years, today I found out that the cause of the problem is because the FTP timestamps are set to GMT instead of following the correctly set timezone as highlighted in this URL….

我瞬间感到了里面的无奈。
好了问题已经可以得到解决了,联系主机管理员,让他打开

use_localtime=YES

的选项就是了。重启以后问题解决。解决后的截图:
\"ftplsafter\"

具体的vsftpd配置可以参考下鸟哥给出的配置(如果你喜欢看繁体字):

1. 下載與解壓縮:
[root@test root]# wget 
> ftp://vsftpd.beasts.org/users/cevans/vsftpd-1.2.0.tar.gz
[root@test root]# cd /usr/local/src
[root@test root]# tar -zxvf /root/vsftpd-1.2.0.tar.gz
[root@test root]# cd vsftpd-1.2.0/
# 在這個目錄下有個 INSTALL 與 README 請務必察看喔!
 
2. 開始編譯與安裝
# vsftpd 預設安裝的路徑為:
# 所有可執行檔放置在 /usr/local/sbin 裡面;
# man page 放置在 /usr/local/man/man5 與 /usr/local/man/man8
# 若 super daemon 為 xinetd 時,會複製一份啟動檔案到 /etc/xinetd.d 去!
[root@test vsftpd-1.2.0]# make
# 編譯的過程可能有 warning 的訊息,只要不是 Error 就可以不理他!
[root@test vsftpd-1.2.0]# make install
[root@test vsftpd-1.2.0]# cp vsftpd.conf /etc
# 將 PAM 身份認證模組給他放進去系統裡面!
[root@test vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd
# 建立 ftp 這個使用者以及他的家目錄:
# 若本來就存在 ftp 這個使用者,那就不需要進行新增!
[root@test vsftpd-1.2.0]# useradd -M ftp -d /var/ftp
[root@test vsftpd-1.2.0]# mkdir -p /var/ftp
[root@test vsftpd-1.2.0]# chown root:root /var/ftp
[root@test vsftpd-1.2.0]# chmod 755 /var/ftp
# 建立 vsftpd 需要的特殊目錄
[root@test vsftpd-1.2.0]# mkdir -p /usr/share/empty
 
3. 如果需要移除時:
# 如果想要移除 vsftp 時,可以這樣做
[root@test vsftpd-1.2.0]# rm /usr/local/sbin/vsftpd
[root@test vsftpd-1.2.0]# rm /usr/local/man/man5/vsftpd.conf.5
[root@test vsftpd-1.2.0]# rm /usr/local/man/man8/vsftpd.8
[root@test vsftpd-1.2.0]# rm /etc/xinetd.d/vsftpd
[root@test vsftpd-1.2.0]# rm /etc/vsftpd.conf
# 因為剛剛安裝只有安裝這幾個檔案而已說!所以啦, vsftpd 真的是挺安全的說!

4. 測試:
# 先確認一下 xinetd.d 有沒有問題再說:
[root@test root]# vi /etc/xinetd.d/vsftpd
service ftp
{
    socket_type             = stream
    wait                    = no
    user                    = root
    server                  = /usr/local/sbin/vsftpd
    log_on_success          += DURATION USERID
    log_on_failure          += USERID
    nice                    = 10
 disable                 = no
}
[root@test root]# /etc/rc.d/init.d/xinetd restart
[root@test root]# ftp localhost
ftp localhost
Connected to localhost.
220 (vsFTPd 1.2.0)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): anonymous
# 這樣就表示 vsftpd 已經可以正確的啟動了,不過因為我們還沒有設定好
# /etc/vsftpd.conf ,所以會有無法登入的問題!沒關係,
# 等一下設定好就 OK 了!

vsftpd.conf 設定值說明
 
vsftpd.conf 是 vsftpd 的主要設定檔案,在這裡我們約略來說明一下常見的 vsftpd.conf 裡面的各個設定參數吧!

關於主機的設定值
connect_from_port_20=YES (NO)
還記得 wu ftp 那篇文章提到的,關於主動連線的 ftp-data 嗎?
這個設定項目在啟動主動連線的 port 20 咯!
listen_port=21
使用的 vsftpd 命令通道的 port number 設定,如果您想要使用非
正規的 ftp port,在這個設定項目修改吧!
dirmessage_enable=YES (NO)
當使用者進入某個目錄時,會顯示該目錄需要注意的內容,顯示的
檔案預設是 .message ,當然,可以使用底下的設定項目來修訂!
message_file=.message
當 dirmessage_enable=YES 時,可以設定這個項目來讓 vsftpd 
尋找該檔案來顯示訊息!您也可以設定其他檔名喔!
listen=YES (NO)
若設定為 YES 表示 vsftpd 是以 standalone 的方式來啟動的!
pasv_enable=YES (NO)
啟動被動式連線(passive mode),一定要設定為 YES 的啦!
use_localtime=YES (NO)
是否使用主機的時間?!預設使用 GMT 時間(格林威治),會比台灣
時間晚 8 小時,一般來說,建議設定為 YES 吧!
write_enable=YES (NO)
是否允許使用者具有寫入的權限?!這包括刪除與修改等功能喔!
connect_timeout=60
單位是秒,如果 client 嘗試連接我們的 vsftpd 命令通道超過 60 秒,
則不等待,強制斷線咯。
accept_timeout=60
當使用者以被動式 PASV 來進行資料傳輸時,如果主機啟用 passive port 
並等待 client 超過60 秒,那麼就給他強制斷線!您可以修改 60 這個數值。
data_connection_timeout=300
如果 client 與 Server 間的資料傳送在 300 秒內都無法傳送成功,
那 Client 的連線就會被我們的 vsftpd 強制剔除!
idle_session_timeout=300
如果使用者在 300 秒內都沒有命令動作,強制離線!
max_clients=0
如果 vsftpd 是以 stand alone 方式啟動的,那麼這個設定項目可以設定
同一時間,最多有多少 client 可以同時連上 vsftpd 哩!?
max_per_ip=0
與上面 max_clients 類似,這裡是同一個 IP 同一時間可允許多少連線?
pasv_max_port=0
pasv_min_port=0
上面兩個是與 passive mode 使用的 port number 有關,如果您想要使用
65400 到 65410 這 11 個 port 來進行被動式資料的連接,可以這樣設定
pasv_max_port=65410 以及 pasv_min_port=65400
ftpd_banner=一些文字說明
當使用者無法順利連上我們的主機,例如連線數量已經超過 max_clients 
的設定了,那麼 client 的畫面就會顯示『一些文字說明』的字樣,您可以修改
關於實體用戶登入者的設定值
guest_enable=YES (NO)
若這個值設定為 YES 時,那麼任何非 anonymous 登入的帳號,均會被
假設成為 guest (訪客) 喔!
local_enable=YES (NO)
這個設定值必須要為 YES 時,在 /etc/passwd 內的帳號才能以
實體用戶的方式登入我們的 vsftpd 主機喔!
local_max_rate=0
實體用戶的傳輸速度限制,單位為 bytes/second, 0 為不限制。
chroot_local_user=YES (NO)
將使用者限制在自己的家目錄之內(chroot)!這個設定在 vsftpd 
當中預設是 NO,因為有底下兩個設定項目的輔助喔!
所以不需要啟動他!
chroot_list_enable=YES (NO)
是否啟用將某些實體用戶限制在他們的家目錄內?!預設是 NO ,
不過,如果您想要讓某些使用者無法離開他們的家目錄時,
可以考慮將這個設定為 YES ,並且規劃下個設定值
chroot_list_file=/etc/vsftpd.chroot_list
如果 chroot_list_enable=YES 那麼就可以設定這個項目了!他裡面可以規定
那一個實體用戶會被限制在自己的家目錄內而無法離開!(chroot)
一行一個帳號即可!
userlist_deny=YES (NO)
若此設定值為 YES 時,則當使用者帳號被列入到某個檔案時,在該檔案內
的使用者將無法登入 vsftpd 伺服器!該檔案檔名與下列設定項目有關。
userlist_file=/etc/vsftpd.user_list
若上面 userlist_deny=YES 時,則這個檔案就有用處了!在這個檔案內的
帳號都無法使用 vsftpd 喔!

關於匿名者登入的設定值
anonymous_enable=YES (NO)
設定為允許 anonymous 登入我們的 vsftpd 主機!預設是 YES ,底下的所有
相關設定都需要將這個設定為 anonymous_enable=YES 之後才會生效!
anon_world_readable_only=YES (NO)
僅允許 anonymous 具有下載可讀檔案的權限,預設是 YES。
anon_other_write_enable=YES (NO)
是否允許 anonymous 具有寫入的權限?預設是 NO!如果要設定為 YES,
那麼開放給 anonymous 寫入的目錄亦需要調整權限,讓 vsftpd 的 PID
擁有者可以寫入才行!
anon_mkdir_write_enable=YES (NO)
是否讓 anonymous 具有建立目錄的權限?預設值是 NO!如果要設定為 YES,
那麼 anony_other_write_enable 必須設定為 YES !
anon_upload_enable=YES (NO)
是否讓 anonymous 具有上傳資料的功能,預設是 NO,如果要設定為 YES ,
則 anon_other_write_enable=YES 必須設定。
deny_email_enable=YES (NO)
將某些特殊的 email address 抵擋住,不讓那些 anonymous 登入!
如果以 anonymous 登入主機時,不是會要求輸入密碼嗎?密碼不是要您
輸入您的 email address 嗎?如果你很討厭某些 email address ,
就可以使用這個設定來將他取消登入的權限!需與下個設定項目配合:
banned_email_file=/etc/vsftpd.banned_emails
如果 deny_email_enable=YES 時,可以利用這個設定項目來規定那個
email address 不可登入我們的 vsftpd 喔!在上面設定的檔案內,
一行輸入一個 email address 即可!
no_anon_password=YES (NO)
當設定為 YES 時,表示 anonymous 將會略過密碼檢驗步驟,
而直接進入 vsftpd 伺服器內喔!所以一般預設都是 NO 的!
anon_max_rate=0
這個設定值後面接的數值單位為 bytes/秒 ,限制 anonymous 的傳輸速度,
如果是 0 則不限制(由最大頻寬所限制),如果您想讓 anonymous 僅有 
30 KB/s 的速度,可以設定『anon_max_rate=30000』
anon_umask=077
限制 anonymous 的權限!如果是 077 則 anonymous 傳送過來的檔案
權限會是 -rw------- 喔!

關於系統安全的設定值:
ascii_download_enable=YES (NO)
如果設定為 YES ,那麼 client 就可以使用 ASCII 格式下載檔案。
一般來說,由於啟動了這個設定項目可能會導致 DoS 的攻擊,因此預設是NO。
ascii_upload_enable=YES (NO)
與上一個設定類似的,只是這個設定針對上傳而言!預設是 NO。
async_abor_enable=YES (NO)
如果您的 FTP client 會下達 \"async ABOR\" 這個指令時,這個設定才需要啟用
一般來說,由於這個設定並不安全,所以通常都是將他取消的!
check_shell=YES (NO)
如果您想讓擁有任何奇怪的 shell 的使用者(在 /etc/passwd 的 shell 欄位)
可以使用 vsftpd 的話,這個設定可以設定為 NO 喔!
one_process_model=YES (NO)
這個設定項目比較危險一點~當設定為 YES 時,表示每個建立的連線
都會擁有一支 process 在負責,可以增加 vsftpd 的效能。不過,
除非您的系統比較安全,而且硬體配備比較高,否則容易耗盡系統資源喔!
一般建議設定為 NO 的啦!
tcp_wrappers=YES (NO)
當然我們都習慣支援 TCP Wrappers 的啦!所以設定為 YES 吧!
xferlog_enable=YES (NO)
當設定為 YES 時,使用者上傳與下載檔案都會被紀錄起來。記錄檔案
與下一個設定項目有關:
xferlog_file=/var/log/vsftpd.log
如果上一個 xferlog_enable=YES 的話,這裡就可以設定了!
這個是登錄檔的檔名啦!
xferlog_std_format=YES (NO)
是否設定為 wu ftp 相同的登錄檔格式?!預設為 NO ,因為登錄檔會比較容易讀!
不過,如果您有使用 wu ftp 登錄檔的分析軟體,這裡才需要設定為 YES
nopriv_user=nobody
我們的 vsftpd 預設以 nobody 作為此一服務執行者的權限。因為 nobody 的權限
相當的低,因此即使被入侵,入侵者僅能取得 nobody 的權限喔!
pam_service_name=vsftpd
這個是 pam 模組的名稱,我們放置在 /etc/pam.d/vsftpd 即是這個咚咚!

 
上面這些是相當常見的 vsftpd 的設定參數,還有很多參數我沒有列出來,您可以使用 man 5 vsftpd.conf 查閱喔!不過,基本上上面這些參數已經夠我們設定 vsftpd 囉!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.