-
1 # dsf4243
-
2 # 誰暖冬季影紫似水浮生
從技術角度來分析,幾個要求:
1、從安全方面看,sftp會更安全一點
2、線上伺服器提供線上服務,對使用者需要控制,只能讓使用者在自己的home目錄下活動
3、使用者只能使用sftp,不能ssh到機器進行操作
提供sftp服務,可以用系統自帶的internal-sftp,也可以使用vsftpd,這裡需求不多,直接選用internal-sftp。
限制使用者只能在自己的home目錄下活動,這裡需要使用到chroot,openssh4.8p1以後都支援chroot,我現在用的是centos6.3,自帶的openssh已經是5.3p1,足夠了。
可以輸入:
#ssh-v
來檢視openssh的版本,如果低於4.8p1,需要自行升級安裝,不在這裡具體介紹了。
假設,有一個名為sftp的組,這個組中的使用者只能使用sftp,不能使用ssh,且sftp登入後只能在自己的home目錄下活動
1、建立sftp組
#groupaddsftp
2、建立一個sftp使用者,名為mysftp
#useradd-gsftp-s/bin/falsemysftp
#passwdmysftp
3、sftp組的使用者的home目錄統一指定到/data/sftp下,按使用者名稱區分,這裡先新建一個mysftp目錄,然後指定mysftp的home為/data/sftp/mysftp
#mkdir-p/data/sftp/mysftp
#usermod-d/data/sftp/mysftpmysftp
4、配置sshd_config
編輯/etc/ssh/sshd_config
#vim+132/etc/ssh/sshd_config
找到如下這行,並註釋掉
subsystemsftp/usr/libexec/openssh/sftp-server
新增如下幾行
subsystemsftpinternal-sftp
matchgroupsftp
chrootdirectory/data/sftp/%u
forcecommandinternal-sftp
allowtcpforwardingno
x11forwardingno
解釋一下新增的幾行的意思
subsystemsftpinternal-sftp
這行指定使用sftp服務使用系統自帶的internal-sftp
matchgroupsftp
這行用來匹配sftp組的使用者,如果要匹配多個組,多個組之間用逗號分割
當然,也可以匹配使用者
matchusermysftp
這樣就可以匹配使用者了,多個使用者名稱之間也是用逗號分割,但我們這裡按組匹配更靈活和方便
chrootdirectory/data/sftp/%u
用chroot將使用者的根目錄指定到/data/sftp/%u,%u代表使用者名稱,這樣使用者就只能在/data/sftp/%u下活動,chroot的含義,可以參考這裡:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
forcecommandinternal-sftp
指定sftp命令
allowtcpforwardingno
x11forwardingno
5、設定chroot目錄許可權
#chownroot:sftp/data/sftp/mysftp
#chmod755/data/sftp/mysftp
錯誤的目錄許可權設定會導致在log中出現”fatal:badownershipormodesforchrootdirectoryxxxxxx”的內容
目錄的許可權設定有兩個要點:
1、由chrootdirectory指定的目錄開始一直往上到系統根目錄為止的目錄擁有者都只能是root
2、由chrootdirectory指定的目錄開始一直往上到系統根目錄為止都不可以具有群組寫入許可權
所以遵循以上兩個原則
1)我們將/data/sftp/mysftp的所有者設定為了root,所有組設定為sftp
2)我們將/data/sftp/mysftp的許可權設定為755,所有者root有寫入許可權,而所有組sftp無寫入許可權
6、建立sftp使用者登入後可寫入的目錄
照上面設定後,在重啟sshd服務後,使用者mysftp已經可以登入,但使用chroot指定根目錄後,根應該是無法寫入的,所以要新建一個目錄供mysftp上傳檔案。這個目錄所有者為mysftp,所有組為sftp,所有者有寫入許可權,而所有組無寫入許可權
#mkdir/data/sftp/mysftp/upload
#chownmysftp:sftp/data/sftp/mysftp/upload
#chmod755/data/sftp/mysftp/upload
7、重啟sshd服務
#servicesshdrestart
到這裡,mysftp已經可以透過sftp客戶端登入並可以上傳檔案到upload目錄。
如果還是不能在此目錄下上傳檔案,提示沒有許可權,檢查selinux是否關閉,可以使用如下指令關閉selinux
修改/etc/selinux/config檔案中的selinux=""為disabled,然後重啟。或者
#setenforce0
回覆列表
本地埠對映(Local Port Forwarding):目標:將本地埠的資料轉發到遠端埠應用場景:當我們需要擁有公網IP的遠端主機做跳板,登陸到與遠端主機同一個區域網的一臺非公網IP機器時,可以在公網IP的遠端主機做本地埠對映,轉發到非公網IP機器上。這樣就只要一次ssh到公網IP主機做了對映的埠就登陸到非公網IP主機上了。遠端埠對映(Remote Port Forwarding):目標:將遠端埠的資料轉發到本地埠應用場景:區域網主機可以透過公網IP訪問遠端主機,但是反過來的時候,如果不建立VPN,則可以透過在區域網機器上做遠端埠對映,這樣透過公網機器就能直接ssh到區域網機器。動態埠對映(Dynamic Port Forwarding):目標:充當SOCKS代理應用場景:在瀏覽器中訪問某些受區域網防火牆限制的網頁時,就可以透過在本地機器做動態埠對映,代理到未受限制的主機上去訪問。