--
ftp(file tranfer protocol)
windows下的服務端serv-U
用戶端 cuteftp leapftp flashftp
一個很老的檔案傳輸通訊協定,明碼傳輸,不安全
網頁維護有很多是用ftp去更新網站頁面內容
dreamweaver
oot@li yum.repos.d]# yum list |grep vsftp--紅帽裡內建的FTP軟體包
This system is not registered with RHN.
RHN support will be disabled.
vsftpd.i386 2.0.5-16.el5 installed
vsftp very secure ftp
另一種開源的ftp軟體proftp
使用的連接埠號碼:
資料轉送連接埠20
命令傳輸連接埠21
串連方式分為兩種
主動:預設情況下,ftp服務是開放了21連接埠,用來接受控制命令,伺服器用20連接埠去發送資料(串連用戶端大於1024的隨機連接埠)
被動:ftp服務也是開放21連接埠,用來接受命令控制,進行資料轉送時,用戶端會告知服務端開啟一個大於1024的連接埠,然後用戶端去主動串連服務
服務模式:
stand alone
super daemon
ftp的20.21這兩個連接埠都是用的tcp串連,所以是要經過兩次的三向交握的過程
但要注意:20連接埠(資料轉送連接埠)是在有資料轉送時才建立,並不是ftp一串連就建立
vim /etc/vsftpd/vsftpd.conf --設定檔
man vsftpd.conf 可以去查看協助
/etc/init.d/vsftpd start
[root@li yum.repos.d]# netstat -ntl |grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
驗證主動模式:
[root@li yum.repos.d]# ftp 10.1.1.35
Connected to 10.1.1.35.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (10.1.1.35:root): ftp
331 Please specify the password.
Password:--ftp使用者的預設密碼也是ftp
ftp> ?--問號去查看命令協助
Commands may be abbreviated. Commands are:
ftp> help ls --看命令的協助
ls list contents of remote directory
ftp> passive--關閉你的被動模式
Passive mode off.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 May 13 06:03 pub
226 Directory send OK.
第二個終端去驗證連接埠:
[root@li ~]# netstat -nt |grep 20|grep TIME
tcp 0 0 10.1.1.35:20 10.1.1.35:60422 TIME_WAIT --因為本機又是用戶端,又是服務端,主動模式可以看到原生20去串連一個隨機連接埠
驗證被動模式:
[root@li yum.repos.d]# telnet 10.1.1.35 21
Trying 10.1.1.35...
Connected to li.cluster.com (10.1.1.35).
Escape character is '^]'.
220 (vsFTPd 2.0.5)
USER ftp
331 Please specify the password.
PASS
230 Login successful.
PASV
227 Entering Passive Mode (10,1,1,35,171,164)
netstat -ntl
tcp 0 0 10.1.1.35:43940 0.0.0.0:* LISTEN
設定檔:
[root@li /]# cat /etc/vsftpd/vsftpd.conf |grep -v ^#|grep -v ^$--不要以#開頭的,也不要空格行^代表以什麼開頭 $代表結尾符
anonymous_enable=YES--允許匿名使用者登入
local_enable=YES--允許本機使用者登入
write_enable=YES--允許本機使用者登入後可寫
local_umask=022--建立檔案或者目錄的許可權掩碼
dirmessage_enable=YES--啟用目錄的說明或者歡迎資訊
xferlog_enable=YES--開啟日誌功能 (記錄檔案的上傳和下載)
connect_from_port_20=YES--預設為主動模式
xferlog_std_format=YES--日誌採用準的格式
listen=yes--預設運行在stand alone下,可以改成no,換成super daemon的運行模式
pam_service_name=vsftpd--支援pam
userlist_enable=YES--開啟使用者列表的功能
tcp_wrappers=YES--支援tcp_wrapper
兩個匿名使用者:
ftp 密碼ftp
anonymous 密碼為空白
例一:關於匿名使用者的下載
匿名使用者預設是可登陸,可下載 (因為/var/ftp目錄是755許可權)
--任何服務的許可權控制是要經過兩道門的,一個是服務本身的許可權控制,一個是作業系統的許可權控制,也就是說兩個都允許,才有許可權
把/var/ftp目錄改為750後
使用匿名使用者登入,ls看不到列表,也下載不了
例二:關於匿名使用者的上傳
anonymous_enable=YES
anon_upload_enable=YES--允許匿名使用者上傳檔案
anon_mkdir_write_enable=YES--允許匿名使用者建立目錄
ftp> lcd /etc-- lcd 指用戶端的目錄路徑改變
Local directory now /etc
ftp> put fstab--put上傳fstab到/var/ftp
local: fstab remote: fstab
227 Entering Passive Mode (127,0,0,1,157,15)
553 Could not create file.--可以看到是不能上傳的,因為/var/ftp的許可權是755,匿名使用者是不可寫的
然後chmod 777 /var/ftp
再登入
[root@li ~]# ftp 10.1.1.35
Connected to 10.1.1.35.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (10.1.1.35:root): ftp
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable anonymous root--可以看到ftp伺服器是不允許家目錄改為777
Login failed.
解決方案:
只能在/var/ftp再建立一個用於上傳的目錄,把許可權改為匿名使用者可寫就行,比如我們
chmod 777 /var/ftp/pub
ftp> cd pub--cd為服務端改變目錄的命令
250 Directory successfully changed.
ftp> lcd /etc
Local directory now /etc
ftp> put inittab--也就是把用戶端/etc/下的inittab上傳到服務端的/var/ftp/pub
local: inittab remote: inittab
227 Entering Passive Mode (10,1,1,35,135,69)
150 Ok to send data.
226 File receive OK.
1666 bytes sent in 4.1e-05 seconds (4e+04 Kbytes/s)
ftp> put /etc/rc.local local--另外一種put方法,可以這樣寫,把/etc/rc.local上傳並改名為local,這樣就避免了使用lcd的麻煩
例三:允許匿名下載剛上傳的檔案
ftp> lcd /root/Desktop--換了下用戶端目錄
Local directory now /root/Desktop
ftp> get inittab--下載剛上傳的inittab,發現失敗
local: inittab remote: inittab
227 Entering Passive Mode (10,1,1,35,133,225)
550 Failed to open file.
解決方案一:
vim /etc/vsftp/vsftpd.conf
添加一行:anon_world_readable_only=no
重啟服務後,發現可以下載剛上傳的檔案
解決方案二:可以把local_umask=022
改為 local_umask=0222
例四:關於普通使用者(指的就是/etc/passwd建立的普通系統帳號)登入,上傳,下載
關於/etc/passwd最後一列的說明:
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
a:x:533:534::/home/a:/bin/bash
b:x:534:535::/home/b:/bin/false
/sbin/nologin --不能登入系統,但可以登入ftp服務
/bin/bash --又可以登入系統,又可以登入ftp
/bin/false --不能登入系統,也不能登入ftp服務
local_enable=YES
write_enable=YES
[root@li ~]# ftp 10.1.1.35
Connected to 10.1.1.35.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (10.1.1.35:root): a--使用者名稱a
331 Please specify the password.
Password:--密碼為a使用者的系統帳號密碼
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls--這裡看到的是a使用者的家目錄裡的檔案
227 Entering Passive Mode (10,1,1,35,251,100)
150 Here comes the directory listing.
-rw------- 1 533 534 44 Apr 24 07:03 nohup.out
-rwxr-xr-x 1 0 0 69 Apr 24 06:57 ntpdate.sh
226 Directory send OK.
ftp> mkdir a--可以建立目錄
257 "/home/a/a" created
例五:不允許本機使用者登入,或者禁用某些使用者登入
local_enable=no --所有的普通使用者都不能登入
方法一:(不推薦)
只針對某些普通使用者來限制
vim /etc/passwd 把要限制的使用者/bin/bash改為/bin/false
usermod -s /bin/false 使用者名稱
方法二:用vsftp服務本身的使用者列表功能來控制(推薦)
userlist_enable=YES--開啟使用者列表功能,如果這裡為no,那麼下面的兩個參數無效
userlist_deny=YES--預設沒有這個參數,不加的話預設是開啟的,注意這裡的否定意思,yes的話表示是拒絕,no表示是允許
vim /etc/vsftpd/user_list --在這裡就可以寫上你要拒絕的使用者名稱,一行寫一個,可以看到預設裡面就有那些uid<500的系統帳號,也就是說預設vsftp是不允許他們登入的
重啟服務後驗證
userlist_enable=YES
userlist_deny=NO
vim /etc/vsftpd/user_list --因為userlist_deny的值為no,所以這個列表裡的使用者是允許
重啟服務後驗證
例六:關於chroot(籠環境)--為了安全性,鎖定登入使用者的活動範圍
預設匿名使用者是只在籠環境裡活動,但普通使用者是沒有籠環境限制
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list--此檔案預設沒有,自動手動建立
vim /etc/vsftpd/chroot_list --手動寫上使用者名稱,一行一個使用者名稱,寫上使用者名稱的使用者不能 cd 出它的登入目錄
例七:登入顯示目錄資訊,或者是歡迎資訊
1,針對單個使用者的訊息顯示:
dirmessage_enable=YES--開啟使用者的目錄資訊功能
在登入家目錄裡 vim .message(--我這裡是寫在/home/b/下,也就是b使用者的家目錄)
寫上登入時顯示的訊息
welcome to my ftp server!!
li
最後用此使用者登入ftp時,會顯示剛寫在.message裡的訊息
ame (10.1.1.35:root): b
331 Please specify the password.
Password:
230-welcome to my ftp server!!--這裡可以看到剛才的.messag的訊息
230- li
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
2,針對整個全域的訊息顯示:
方法一:
ftpd_banner=Welcome to blah FTP service.--開啟此選項
[root@li ~]# ftp 10.1.1.35
Connected to 10.1.1.35.
220 Welcome to blah FTP service.--剛登入時就會顯示
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
方法二:
把訊息直接寫到一個檔案裡
banner_file=/var/ftp/welcome--後面的檔案是自訂的,手動去建立,並寫上訊息
例8:關於ftp的日誌
xferlog_enable=YES--開啟日誌記錄功能
xferlog_file=/var/log/xferlog--指定日誌記錄檔案
xferlog_std_format=YES--格式採用標準格式
cat /var/log/xferlog --注意的是只有上傳和下載時才會記錄日誌
sat May 15 03:22:05 2010 1 10.1.1.35 220 /pub/local b _ i a ftp ftp 0 * c
Sat May 15 03:31:19 2010 1 10.1.1.35 69 /home/a/ntpdate.sh b _ o r a ftp 0 * c
Sat May 15 03:36:08 2010 1 10.1.1.35 791 /home/a/fstab b _ i r a ftp 0 * c
Sat May 15 06:12:41 2010 1 10.1.1.35 1666 /home/b/inittab b _ i r b ftp 0 * c
Sat May 15 06:14:20 2010 1 10.1.1.35 791 /home/b/fstab b _ i r b ftp 0 * c
Sat May 15 06:15:29 2010 1 10.1.1.35 791 /home/b/fstab b _ o r b ftp 0 * c
例9:介紹幾個特殊的限制參數
local_max_rate=1000000 --對本機使用者的最大傳輸速度的限制參數預設沒有這個參數,預設不限制
anon_max_rate--和local_max_rate相似,但是只針對匿名使用者
max_clients--預設最大的用戶端串連數,要運行在stand alone的模式下,預設不限制
max_login_fails--預設登入3次失敗,會殺掉你這次登入的進程
max_per_ip--針對單個客戶的最大串連數,預設也是不限制
例十: ftp支援tcp_wrapper
[root@li b]# ldd /usr/sbin/vsftpd |grep wrap
libwrap.so.0 => /lib/libwrap.so.0 (0x00dbc000)--表示支援tcp_wrapper
[root@li b]# vim /etc/hosts.deny
vsftpd: 10.1.1.0/255.255.255.0 EXCEPT 10.1.1.104--拒絕10.1.1.0網段連上服務的ftp,只允許10.1.1.104連
[root@li b]# ftp 10.1.1.35--用tcp_wrapper拒絕後,自己(IP為35)做用戶端都不能連上自己的伺服器,除了104
Connected to 10.1.1.35.
421 Service not available.
ftp> quit
------------------------------------------------------------------
ftp工具介紹
windows下:
服務端serv-U
用戶端 cuteftp leapftp flashftp
linux下:
lftp,是一個功能強大的用戶端工具,它支援的協議有ftp,http,https等
它相對文字模式下的ftp,有記錄功能,自動補齊功能,萬用字元,下載目錄等功能,非常方便。
[root@li b]# lftp 10.1.1.35--預設以匿名使用者登入
[root@li b]# lftp -u b 10.1.1.35--指定以b使用者來登入
lftp b@10.1.1.35:~> mget *b--批量下載以b字母結尾的檔案
2457 bytes transferred
Total 3 files transferred
lftp b@10.1.1.35:~> mirror aaa--下載目錄aaa
圖形化的ftp用戶端工具 gftp
[root@li b]# yum list |grep gftp
This system is not registered with RHN.
RHN support will be disabled.
gftp.i386 1:2.0.18-3.2.2 installed
安裝後用gftp命令啟動--注意使用ftp的話連接埠填21
--#################################################################################
ntp服務
時間同步對於叢集環境來說非常重要
時區的概念:
GMT(格林威治時間 ,以經度為0的英國城市命名)
UTC(coordinated universal time,協和標準時間,利用物理時鐘(原子鐘)為基準定義出來的時間)
主板的bios是屬於UTC時間,利用主機的原子鐘來計算時間,會有少許誤差,但對於長時間動作並對時間準確性要求高的環境是不允許有這樣的誤差
ssh 10.1.1.218 date;date --這樣去比較兩台電腦的時間差(先要配ssh等效性)
15 15:26:36 CST 2010
15 15:26:45 CST 2010 --時間差有9秒,這在叢集環境裡是不容許的
[root@li b]# file /etc/localtime
/etc/localtime: timezone data--這是一個時區檔案,不是ASCII類型,所以vi是看不了的,對應了/usr/share/zoneinfo/Asia/Shanghai這個檔案(因為裝系統時選的是上海時區)
ls /usr/share/zoneinfo/ --這裡儲存了系統開機時所選的所有的時區檔案
如果服務遷移到了另一個時區的地段,或者是遷移到另一個國家,系統如果沒有重做,而且是用於叢集環境,那麼
第一步:/usr/share/zoneinfo/裡對應的時區給拷到/etc/localtime,就換了時區了
第二步:vim /etc/sysconfig/clock去修改對應的新時區
同步的過程:(與tcp三向交握相似)
1,client 發送資訊到 server
2,ntp server 發送回資訊到 client
3,client 根據回送資訊修改時間
時間同步服務的階層概念:
可以把同步服務分層,(最多15個階層)
層與層會有時間誤差,網路延遲的計算
yum install ntp -y--安裝軟體包 ntp.i386
vim /etc/ntp.conf--設定檔
[root@li b]# cat /etc/ntp.conf |grep -v ^# |grep -v ^$
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
server 10.1.1.1 perfer--指定上層的時間同步伺服器為10.1.1.1,perfer表示優先
server 10.1.1.2
driftfile /var/lib/ntp/drift--記錄本機與上層時間服務的頻率誤差
keys /etc/ntp/keys
server 127.127.1.0--如果上層伺服器不能連通,則以主板的BIOS(UTC)為準
fudge 127.127.1.0 stratum 10--主板時間的層級為10
ignore 拒絕所有ntp串連
nomodify不能改
noquery不能query
notraptrap是一個遠端事件
nopeer不能peer
不加任何參數就代表都不限制
服務端的配置一(以本伺服器為第一層):
1,把第一句的default改為127.0.0.1
2,把第三句restrict 127.0.0.1給注釋掉,儲存退出
3,重啟服務
用戶端的難證:
ntpdate 10.1.1.35 --大概五分鐘後,才能同步,注意(用戶端不能啟動ntp服務)
服務端的配置二(以10.1.1.1為上層時間同步伺服器);
1,先把上面修改的還原
2,加上下面兩句,並儲存退出
server 10.1.1.1
restrict 10.1.1.0 netmask 255.255.255.0 nomodify notrap
3,重啟服務--會監聽udp的123連接埠
[root@li b]# ntpstat --查看與上階層的ntp服務是否串連上
unsynchronised
time server re-starting
polling server every 64 s
root@li b]# ntptrace -n 10.1.1.1--查看與上階層伺服器的關係,time out,是上層與更上層之間的關係(這裡不用管)
10.1.1.1: stratum 2, offset 0.001891, synch distance 0.278392
192.43.244.18: timed out, nothing received
***Request timed out
[root@li b]# ntpq -p--查詢本層與上層間的一些參數
remote refid st t when poll reach delay offset jitter
==============================================================================
squid.cluster.c 192.43.244.18 2 u 3 64 77 0.192 4317162 1612852
*LOCAL(0) .LOCL. 10 l 58 64 37 0.000 0.000 0.001
時間的分類: 軟體時間,硬體時間(BIOS)
hwclock - query and set the hardware clock (RTC)
hwclock -r 讀出bios的時間
hwclock -w 把系統時間寫入bios
所以可以在ntpdate同步時間之後,用hwclock命令寫入到bios,讓主板時間與系統時間保持一致
-------------------------
介紹一個super daemon下的一個時間同步的方法
[root@li test]# vim /etc/xinetd.d/time-dgram
disable = no
[root@li test]# vim /etc/xinetd.d/time-stream
disable = no
/etc/init.d/xinetd restart--監聽兩個37連接埠(一個tcp連接埠,一個udp連接埠)
用戶端使用 rdate -s 10.1.1.35 來同步時間
優點: 不需要象ntp那樣等待較長時間,配置起來比較方便,但功能沒有ntp強大
--------------------------------------------------------------------
作業題:
1,搭建ftp伺服器,允許本機使用者登入,但只允許a,b,c,d四個使用者登入,然後所有的普通使用者登入都登入到/ftp目錄下(也就是同一個籠環境,提示參數為local_root)
每個使用者在/ftp目錄下的使用空間為50M,a使用者可以上傳下載,b使用者只下載,不能上傳,c,d使用者只上傳不能下載
加上歡迎訊息,和日誌功能,禁止匿名使用者登入
mkdir /ftp
vim /etc/vsftpd/vsftpd.conf
userlist_enable=YES
userlist_deny=NO
vim /etc/vsftpd/user_list--這裡加上a,b,c,d
local_root=/ftp--所有登入的普通使用者會登入到/ftp這個籠環境下
banner_file=/var/ftp/welcome--這個檔案手動去建立,並寫上你要的歡迎訊息
xferlog_enable=YES--開啟日誌記錄功能
xferlog_file=/var/log/xferlog--指定日誌記錄檔案
xferlog_std_format=YES
anonymous_enable=NO--禁止匿名使用者登入
fdisk 分一個分區出來 ,格式化為ext3
mount /dev/sdax -o usrquota,grpquota,acl /ftp
quotacheck -cauvg
edquota - u a
edquota - u b
edquota - u c
edquota - u d --四個使用者每個使用者都把hard block改為5000000
chown a,b /ftp
chmod 753 /ftp
2,成功搭建一個能讓用戶端同步時間的ntp服務