linuxftp訪問被拒絕訪問
㈠ linux高手,請教一個問題啊!!救命,搞了一天了
你給列印出來,再看!
在Linux系統中,TCP/IP網路是通過若干個文本文件進行配置的,也許你需要編輯這些文件來完成聯網工作,但是這些配置文件大都可以通過配置命令linuxconf(其中網路部分的配置可以通過netconf命令來實現)命令來實現。下面介紹基本的TCP/IP網路配置文件。
*/etc/conf.moles文件
該配置文件定義了各種需要在啟動時載入的模塊的參數信息。這里主要著重討論關於網卡的配置。在使用Linux做網關的情況下,Linux伺服器至少需要配置兩塊網卡。為了減少啟動時可能出現的問題,Linux內核不會自動檢測多個網卡。對於沒有將網卡的驅動編譯到內核而是作為模塊動態載入的系統若需要安裝多塊網卡,應該在「conf.moles」文件中進行相應的配置。
若設備驅動被編譯為模塊(內核的模塊):對於PCI設備,模塊將自動檢測到所有已經安裝到系統上的設備;對於ISA卡,則需要向模塊提供IO地址,以使模塊知道在何處尋找該卡,這些信息在「/etc/conf.moles」中提供。
例如,我們有兩塊ISA匯流排的3c509卡,一個IO地址是0x300,另一個是0x320。編輯「conf.moles」文件如下:
aliaseth03c509
aliaseth13c509
options3c509io=0x300,0x320
這是說明3c509的驅動程序應當分別以eth0或eth1的名稱被載入(aliaseth0,eth1),並且它們應該以參數io=0x300,0x320被裝載,來通知驅動程序到哪裡去尋找網卡,其中0x是不可缺少的。
對於PCI卡,僅僅需要alias命令來使ethN和適當的驅動模塊名關聯,PCI卡的IO地址將會被自動的檢測到。對於PCI卡,編輯「conf.moles」文件如下:
aliaseth03c905
aliaseth13c905
若驅動已經被編譯進了內核:系統啟動時的PCI檢測程序將會自動找到所有相關的網卡。ISA卡一般也能夠被自動檢測到,但是在某些情況下,ISA卡仍然需要做下面的配置工作:
在「/etc/lilo.conf」中增加配置信息,其方法是通過LILO程序將啟動參數信息傳遞給內核。對於ISA卡,編輯「lilo.conf」文件,增加如下內容:
append="ether="0,0,eth0ether="0,0,eth1"
註:先不要在「lilo.conf」中加入啟動參數,測試一下你的ISA卡,若失敗再使用啟動參數。
如果用傳遞啟動參數的方法,eth0和eth1將按照啟動時被發現的順序來設置。
*/etc/HOSTNAME文件
該文件包含了系統的主機名稱,包括完全的域名,如:deep.openarch.com。
*/etc/sysconfig/network-scripts/ifcfg-ethN文件
在RedHat中,系統網路設備的配置文件保存在「/etc/sysconfig/network-scripts」目錄下,ifcfg-eth0包含第一塊網卡的配置信息,ifcfg-eth1包含第二塊網卡的配置信息。
下面是「/etc/sysconfig/network-scripts/ifcfg-eth0」文件的示例:
DEVICE=eth0
IPADDR=208.164.186.1
NETMASK=255.255.255.0
NETWORK=208.164.186.0
BROADCAST=208.164.186.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
若希望手工修改網路地址或在新的介面上增加新的網路界面,可以通過修改對應的文件(ifcfg-ethN)或創建新的文件來實現。
DEVICE=name name表示物理設備的名字
IPADDR=addr addr表示賦給該卡的IP地址
NETMASK=mask mask表示網路掩碼
NETWORK=addr addr表示網路地址
BROADCAST=addr addr表示廣播地址
ONBOOT=yes/no 啟動時是否激活該卡
none:無須啟動協議
bootp:使用bootp協議
dhcp:使用dhcp協議
USERCTL=yes/no 是否允許非root用戶控制該設
*/etc/resolv.conf文
該文件是由域名解析器(resolver,一個根據主機名解析IP地址的庫)使用的配置文件,示例如下:
searchopenarch.com
nameserver208.164.186.1
nameserver208.164.186.2
「searchdomainname.com」表示當提供了一個不包括完全域名的主機名時,在該主機名後添加domainname.com的後綴;「nameserver」表示解析域名時使用該地址指定的主機為域名伺服器。其中域名伺服器是按照文件中出現的順序來查詢的。
*/etc/host.conf文件
該文件指定如何解析主機名。Linux通過解析器庫來獲得主機名對應的IP地址。下面是一個「/etc/host.conf」的示例:
orderbind,hosts
multion
ospoofon
「orderbind,hosts」指定主機名查詢順序,這里規定先使用DNS來解析域名,然後再查詢「/etc/hosts」文件(也可以相反)。
「multion」指定是否「/etc/hosts」文件中指定的主機可以有多個地址,擁有多個IP地址的主機一般稱為多穴主機。
「nospoofon」指不允許對該伺服器進行IP地址欺騙。IP欺騙是一種攻擊系統安全的手段,通過把IP地址偽裝成別的計算機,來取得其它計算機的信任。
*/etc/sysconfig/network文件
該文件用來指定伺服器上的網路配置信息,下面是一個示例:
NETWORK=yes
RORWARD_IPV4=yes
HOSTNAME=deep.openarch.com
GAREWAY=0.0.0.0
GATEWAYDEV=
NETWORK=yes/no 網路是否被配置;
FORWARD_IPV4=yes/no 是否開啟IP轉發功能
HOSTNAME=hostnamehostname表示伺服器的主機名
GAREWAY=gw-ip gw-ip表示網路網關的IP地址
GAREWAYDEV=gw-dev gw-dw表示網關的設備名,如:etho等
注意:為了和老的軟體相兼容,「/etc/HOSTNAME」文件應該用和HOSTNAME=hostname相同的主機名。
*etc/hosts文件
當機器啟動時,在可以查詢DNS以前,機器需要查詢一些主機名到IP地址的匹配。這些匹配信息存放在/etc/hosts文件中。在沒有域名伺服器情況下,系統上的所有網路程序都通過查詢該文件來解析對應於某個主機名的IP地址。
下面是一個「/etc/hosts」文件的示例:
IPAddress Hostname Alias
127.0.0.1 Localhost Gate.openarch.com
208.164.186.1 gate.openarch.comGate
………… ………… ………
最左邊一列是主機IP信息,中間一列是主機名。任何後面的列都是該主機的別名。一旦配置完機器的網路配置文件,應該重新啟動網路以使修改生效。使用下面的命令來重新啟動網路:/etc/rc.d/init.d/networkrestart
*/etc/inetd.conf文件
眾所周知,作為伺服器來說,服務埠開放越多,系統安全穩定性越難以保證。所以提供特定服務的伺服器應該盡可能開放提供服務必不可少的埠,而將與伺服器服務無關的服務關閉,比如:一台作為www和ftp伺服器的機器,應該只開放80和25埠,而將其他無關的服務如:fingerauth等服務關掉,以減少系統漏洞。
而inetd,也叫作「超級伺服器」,就是監視一些網路請求的守護進程,其根據網路請求來調用相應的服務進程來處理連接請求。inetd.conf則是inetd的配置文件。inetd.conf文件告訴inetd監聽哪些網路埠,為每個埠啟動哪個服務。在任何的網路環境中使用Linux系統,第一件要做的事就是了解一下伺服器到底要提供哪些服務。不需要的那些服務應該被禁止掉,最好卸載掉,這樣黑客就少了一些攻擊系統的機會。查看「/etc/inetd.conf」文件,了解一下inetd提供哪些服務。用加上注釋的方法(在一行的開頭加上#號),禁止任何不需要的服務,再給inetd進程發一個SIGHUP信號。
第一步:把文件的許可許可權改成600。
[root@deep]#chmod600/etc/inetd.conf
第二步:確信文件的所有者是root。
[root@deep]#stat/etc/inetd.conf
第三步:編輯「inetd.conf」文件(vi/etc/inetd.conf),禁止所有不需要的服務,如:ftp、telnet、shell、login、exec、talk、ntalk、imap、pop-2、pop-3、finger、auth,等等。如果你覺得某些服務有用,可以不禁止這些服務。但是,把這些服務禁止掉,系統受攻擊的可能性就會小很多。改變後的「inetd.conf」文件的內容如下面所示:
#Tore-readthisfileafterchanges,justdoa'killall-HUPinetd'
#
#
#echodgramudpwaitrootinternal
#
#
#
#
#
#
#
#timedgramudpwaitrootinternal
#
#Thesearestandardservices.
#
#ftpstreamtcpnowaitroot/usr/sbin/tcpdin.ftpd-l-a
#telnetstreamtcpnowaitroot/usr/sbin/tcpdin.telnetd
#
#Shell,login,exec,comsatandtalkareBSDprotocols.
#
#shellstreamtcpnowaitroot/usr/sbin/tcpdin.rshd
#loginstreamtcpnowaitroot/usr/sbin/tcpdin.rlogind
#execstreamtcpnowaitroot/usr/sbin/tcpdin.rexecd
#comsatdgramudpwaitroot/usr/sbin/tcpdin.comsat
#talkdgramudpwaitroot/usr/sbin/tcpdin.talkd
#ntalkdgramudpwaitroot/usr/sbin/tcpdin.ntalkd
#dtalkstreamtcpwaitnobody/usr/sbin/tcpdin.dtalkd
#
#Popandimapmailservicesetal
#
#pop-2streamtcpnowaitroot/usr/sbin/tcpdipop2d
#pop-3streamtcpnowaitroot/usr/sbin/tcpdipop3d
#imapstreamtcpnowaitroot/usr/sbin/tcpdimapd
#
#TheInternetUUCPservice.
#
#uucpstreamtcpnowaituucp/usr/sbin/tcpd/usr/lib/uucp/uucico-l
#
#.Mostsites
#runthisonlyonmachinesactingas"bootservers."Donotuncomment
#thisunlessyou*need*it.
#
#tftpdgramudpwaitroot/usr/sbin/tcpdin.tftpd
#bootpsdgramudpwaitroot/usr/sbin/tcpdbootpd
#
#Finger,
#valuabletopotential"systemcrackers."Manysiteschoosetodisable
#.
#
#fingerstreamtcpnowaitroot/usr/sbin/tcpdin.fingerd
#cfingerstreamtcpnowaitroot/usr/sbin/tcpdin.cfingerd
#systatstreamtcpnowaitguest/usr/sbin/tcpd/bin/ps-auwwx
netstatstreamtcpnowaitguest/usr/sbin/tcpd/bin/netstat-finet
#
#Authentication
#
#authstreamtcpnowaitnobody/usr/sbin/in.identdin.identd-l-e-o
#
#Endofinetd.conf
注意:改變了「inetd.conf」文件之後,別忘了給inetd進程發一個SIGHUP信號(killall–HUPinetd)。
[root@deep/root]#killall-HUPinetd
第四步:
為了保證「inetd.conf」文件的安全,可以用chattr命令把它設成不可改變。把文件設成不可改變的只要用下面的命令:
[root@deep]#chattr+i/etc/inetd.conf
這樣可以避免「inetd.conf」文件的任何改變(意外或是別的原因)。一個有「i」屬性的文件是不能被改動的:不能刪除或重命名,不能創建這個文件的鏈接,不能往這個文件里寫數據。只有系統管理員才能設置和清除這個屬性。如果要改變inetd.conf文件,你必須先清除這個不允許改變的標志:
[root@deep]#chattr-i/etc/inetd.conf
但是對於諸如sendmail,named,www等服務,由於它們不象finger,telnet等服務,在請求到來時由inet守護進程啟動相應的進程提供服務,而是在系統啟動時,作為守護進程運行的。而對於redhatlinux,提供了一個linuxconfig命令,可以通過它在圖形界面下互動式地設置是否在啟動時運行相關服務。也可以通過命令來設置是否啟動時啟動某個服務,如:[root@deep]#chkconfig–level35namedoff
具體命令可以參考manchkconfig的說明。
*/etc/hosts.allow文件
但是對於telnet、ftp等服務,如果將其一同關閉,那麼對於管理員需要遠程管理時,將非常不方便。Linux提供另外一種更為靈活和有效的方法來實現對服務請求用戶的限制,從而可以在保證安全性的基礎上,使可信任用戶使用各種服務。Linux提供了一個叫TCPwrapper的程序。在大多數發布版本中該程序往往是預設地被安裝。利用TCPwrapper你可以限制訪問前面提到的某些服務。而且TCPwrapper的記錄文件記錄了所有的企圖訪問你的系統的行為。通過last命令查看該程序的log,管理員可以獲知誰曾經或者企圖連接你的系統。
在/etc目錄下,有兩個文件:hosts.denyhosts.allow通過配置這兩個文件,你可以指定哪些機器可以使用這些服務,哪些不可以使用這些服務。
當服務請求到達伺服器時,TCPwrapper就按照下列順序查詢這兩個文件,直到遇到一個匹配為止:
1.當在/etc/hosts.allow裡面有一項與請求服務的主機地址項匹配,那麼就允許該主機獲取該服務
2.否則,如果在/etc/hosts.deny裡面有一項與請求服務的主機地址項匹配,就禁止該主機使用該項服務。
3.如果相應的配置文件不存在,訪問控制軟體就認為是一個空文件,所以可以通過刪除或者移走配置文件實現對清除所有設置。在文件中,空白行或者以#開頭的行被忽略,你可以通過在行前加#實現注釋功能。
配置這兩個文件是通過一種簡單的訪問控制語言來實現的,訪問控制語句的基本格式為:
程序名列表:主機名/IP地址列表。
程序名列表指定一個或者多個提供相應服務的程序的名字,名字之間用逗號或者空格分割,可以在inetd.conf文件里查看提供相應服務的程序名:如上面的文件示例中,telent所在行的最後一項就是所需的程序名:in.telnetd。
主機名/IP地址列表指定允許或者禁止使用該服務的一個或者多個主機的標識,主機名之間用逗號或空格分隔。程序名和主機地址都可以使用通配符,實現方便的指定多項服務和多個主機。
Linux提供了下面靈活的方式指定進程或者主機列表:
1.一個以"."起始的域名串,如.amms.ac.cn那麼www.amms.ac.cn就和這一項匹配
2.以"."結尾的IP串如202.37.152.那麼IP地址包括202.37.152.的主機都與這一項匹配。
3.格式為n.n.n.n/m.m.m.m表示網路/掩碼,如果請求服務的主機的IP地址與掩碼的位與的結果等於n.n.n.n那麼該主機與該項匹配。
4.ALL表示匹配所有可能性
5.EXPECT表示除去後面所定義的主機。如:list_1EXCEPTlist_2表示list_1主機列表中除去List_2所列出的主機
6.LOCAL表示匹配所有主機名中不包含"."的主機
上面的幾種方式只是Linux提供的方式中的幾種,但是對於我們的一般應用來說是足夠了。我們通過舉幾個例子來說明這個問題:
例一:我們只希望允許同一個區域網的機器使用伺服器的ftp功能,而禁止廣域網上面的ftp服務請求,本地區域網由202.39.154.、202.39.153.和202.39.152.三個網段組成。
在hosts.deny文件中,我們定義禁止所有機器請求所有服務:
ALL:ALL
在hosts.allow文件中,我們定義只允許區域網訪問ftp功能:
in.ftpd-l–a:202.39.154202.39.153.202.39.152.
這樣,當非區域網的機器請求ftp服務時,就會被拒絕。而區域網的機器可以使用ftp服務。此外,應該定期檢查/var/log目錄下的紀錄文件,發現對系統安全有威脅的登錄事件。last命令可以有效的查看系統登錄事件,發現問題所在。
最後tcpdchk是檢查TCP_WAPPERS配置的程序。它檢查TCP_WAPPERS的配置,並報告它可以發現的問題或潛在的問題。在所有的配置都完成了之後,請運行tcpdchk程序:
[root@deep]#tcpdchk
*/etc/services文件
埠號和標准服務之間的對應關系在RFC1700「AssignedNumbers」中有詳細的定義。「/etc/services」文件使得伺服器和客戶端的程序能夠把服務的名字轉成埠號,這張表在每一台主機上都存在,其文件名是「/etc/services」。只有「root」用戶才有許可權修改這個文件,而且在通常情況下這個文件是沒有必要修改的,因為這個文件中已經包含了常用的服務所對應的埠號。為了提高安全性,我們可以給這個文件加上保護以避免沒有經過授權的刪除和改變。為了保護這個文件可以用下面的命令:
[root@deep]#chattr+i/etc/services
*/etc/securetty文件
「/etc/securetty」文件允許你規定「root」用戶可以從那個TTY設備登錄。登錄程序(通常是「/bin/login」)需要讀取「/etc/securetty」文件。它的格式是:列出來的tty設備都是允許登錄的,注釋掉或是在這個文件中不存在的都是不允許root登錄的。
注釋掉(在這一行的開頭加上#號)所有你想不讓root登錄的tty設備。
編輯securetty文件(vi/etc/securetty)象下面一樣,注釋掉一些行:
tty1
#tty2
#tty3
#tty4
#tty5
#tty6
#tty7
#tty8
*使Control-Alt-Delete關機鍵無效
把「/etc/inittab」文件中的一行注釋掉可以禁止用Control-Alt-Delete關閉計算機。如果伺服器不是放在一個安全的地方,這非常重要。
編輯inittab文件(vi/etc/inittab)把這一行:
ca::ctrlaltdel:/sbin/shutdown-t3-rnow
改為:
#ca::ctrlaltdel:/sbin/shutdown-t3-rnow
用下面的命令使改變生效:
[root@deep]#/sbin/initq
*改變「/etc/rc.d/init.d/」目錄下的腳本文件的訪問許可
/etc/rc.d/init.d/下的腳本主要包含了啟動服務的腳本程序。一般用戶沒有什麼必要知道腳本文件的內容。所以應該改變這些腳本文件的許可權。
[root@deep]#chmod-R700/etc/rc.d/init.d/*
這樣只有root可以讀、寫和執行這個目錄下的腳本。
*/etc/rc.d/rc.local文件
在默認情況下,當登錄裝有Linux系統的計算機時,系統會告訴你Linux發行版的名字、版本號、內核版本和伺服器名稱。這泄露了太多的系統信息。最好只顯示一個「Login:」的提示信息。
第一步:
編輯「/ect/rc.d/rc.local」文件,在下面這些行的前面加上「#」:
--
#Thiswilloverwrite/etc/issueateveryboot.So,makeanychangesyou
#wanttomaketo/etc/.
#echo"">/etc/issue
#echo"$R">>/etc/issue
#echo"Kernel$(uname-r)on$a$(uname-m)">>/etc/issue
#
#cp-f/etc/issue/etc/issue.net
#echo>>/etc/issue --
第二步:
刪除「/etc」目錄下的「issue.net」和「issue」文件:
[root@deep]#rm-f/etc/issue
[root@deep]#rm-f/etc/issue.net
注意:「/etc/issue.net」文件是用戶從網路登錄計算機時(例如:telnet、SSH),看到的登錄提示。同樣在「」目錄下還有一個「issue」文件,是用戶從本地登錄時看到的提示。這兩個文件都是文本文件,可以根據需要改變。但是,如果想刪掉這兩個文件,必須向上面介紹的那樣把「/etc/rc.d/rc.local」腳本中的那些行注釋掉,否則每次重新啟動的時候,系統又會重新創建這兩個文件。
試試!
㈡ linux系統,請問root目錄下的文件夾如何才能允許ftp訪問
許可權問題 系統(當然指的是一開始的)除了默認的home目錄外其他目錄都是不能用tfp訪問的,只要修改許可權即可,例如/lib chmod 777 /lib 就行了
㈢ LinuxFTP上傳文件報錯解決方法linuxftp無法上傳
Linux FTP上傳文件報錯解決方法
FTP(File Transfer Protocol)是 Internet 上最常用的文件傳輸協議,可以實現遠程文件傳輸,在Linux系統中也常用於文件上傳和下載,但在操作過程中也可能會遇到一些問題,比如FTP上傳文件報錯的情況。傳統的FTP的上傳文件報錯的錯誤一般常見的是「425Can’t open data connection」,本文就來介紹Linux下FTP報錯的一些解決方法。
#### 1. 檢查伺服器和客戶端FTP配置
在使用FTP傳輸文件之前,首先需要檢查生產環境和開發機是否已經正確配置,以確保系統可以正常工作:
1)檢查客戶端配置信息:
vi /etc/vsftpd/vsftpd.conf
pasv_enable=YES // 打開配置網路傳輸
pasv_min_port=30000 // 設定網路傳輸最小埠
pasv_max_port=60000 // 設定網路傳輸最大埠
pasv_address= {IP address of the ftp server} // 設定外部的公網IP
2)檢查伺服器配置信息:
vi /etc/sysconfig/iptables
-A INPUT -p tcp -m state –state NEW -m tcp –dport 30000:60000 -j ACCEPT // 允許FTP伺服器客戶端的埠通信
service iptables save //保存配置
完成這些配置後,重啟伺服器生效。
#### 2. 檢查埠是否開放
對於埠不開放的情況,Linux也可以使用Iptables或者其他工具來檢查。
如果使用Iptables, 可執行以下命令開放埠:
// 允許公網訪問該埠,使用-A參數
iptables -A INPUT -p TCP -dport 30000:60000 -j ACCEPT
並執行`service iptables save`來使配置生效,然後重啟FTP服務。
#### 3. 確認本地IP是否正確
當FTP伺服器埠正確開放,客戶端配置也正確時,我們還需要確認本地IP是否正確。如果報錯中出現服務端IP或埠有問題,可以檢查客戶端配置文件中的`pasv_address`配置是否填寫正確,這里填寫的IP地址應該是外部的公網IP,而不是內部環境下的私有IP。
#### 4. 嘗試使用Samba服務
如果FTP伺服器或客戶端已經配置正確,但仍然不能正常上傳文件,可以嘗試使用Samba服務,它可以支持Linux伺服器的共享文件夾打開,可以將文件簡單地傳輸到Linux伺服器。
使用Samba服務時,相比與FTP,它更提供了一種更簡潔的方法:
yum -y install samba // 安裝samba服務
vi /etc/samba/smb.conf // 可以在這里添加共享文件夾
service smb start // 啟動啟動服務
經過這些操作,就可以從其他客戶端通過Samba方法連接到Linux伺服器,並上傳文件,功能上和FTP近似,但使用也更加簡單,可以避免復雜的伺服器配置。
綜上,使用FTP上傳文件報錯的解決方法包含檢查伺服器和客戶端FTP配置,檢查埠是否開放,確認本地IP是否正確,以及使用Samba服務,妥善掌握這些技巧可以確保FTP傳輸文件無需添加其他復雜操作。
㈣ ftp伺服器遠程訪問錯誤500
使用ftp客戶端軟體連接出現500的錯誤提示:
root用戶默認不能登錄ftp服務的
原因:redhat面向目標是企業,為了安全,增加了一個selinux服務,關閉該服務即可.
解決方法:
(1)用vi編輯器打開/etc/selinux/config
(2)把enforcing改為disabled保存退出
(3)運行setenforce 0命令使其立即生效即可
若任連接不成功
(1)查看vsftpd服務是否開啟
(2)關閉防火牆
(3)用戶名或密碼是否輸入錯誤