Sftp限制用戶訪問權限的方法介紹,有須要的朋友能夠參考下。html
第一步:查看OpenSSH軟件版
linux
代碼以下: [root@Oracle-2 ~]# rpm -qa | grep ssh
openssh-4.3p2-36.el5
openssh-clients-4.3p2-36.el5
openssh-server-4.3p2-36.el5
openssh-askpass-4.3p2-36.el5
或者:
[root@Oracle-2 ~]# ssh -V
OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008web
發現操做系統的OpenSSH軟件是4.3p2,低於4.8p1版本,因此須要作升級。
第二步:下載最新的OpenSSH軟件
OpenSSH是免費的,能夠到官網上進行下載: www.openssh.com
當前最高版本是OpenSSH6.0,咱們就能夠下載該版本:openssh-6.0p1.tar.gz服務器
下載的時候,咱們須要看一看官方安裝指導文檔Installation instructions ,裏面有安裝該版本的注意事項和安裝步驟說明,最好仔細閱讀一下。ssh
第三步:確認OpenSSH軟件安裝條件
在官方安裝指導文檔中提到,安裝OpenSSH6.0須要具有兩個條件:
You will need working installations of Zlib and OpenSSL.
Zlib 1.1.4 or 1.2.1.2 or greater (ealier 1.2.x versions have problems):
http://www.gzip.org/zlib/ide
OpenSSL 0.9.6 or greater:
http://www.openssl.org/測試
上面指出了,OpenSSH6.0安裝所依賴的兩款軟件Zlib和OpenSSL的最低版本,若是服務器的軟件版本不符合要求,就要先升級該兩款軟件。spa
首先咱們須要確認服務器上Zlib和OpenSSL軟件的版本:
操作系統
代碼以下:rest
[root@Oracle-2 ~]# rpm -qa | grep -i zlib
zlib-devel-1.2.3-3
perl-Compress-Zlib-1.42-1.fc6
zlib-1.2.3-3
perl-IO-Zlib-1.04-4.2.1
[root@Oracle-2 ~]# rpm -qa | grep -i openssl
pyOpenSSL-0.6-1.p24.7.2.2
openssl-devel-0.9.8e-12.el5
openssl-0.9.8e-12.el5
能夠看到,Zlib 的版本是1.42 ,OpenSSL的版本是0.9.8,知足OpenSSH6.0安裝的要求。
第四步:卸載OpenSSH軟件
安裝以前,有下面幾個工做須要完成:
(1)停sshd服務
[root@Oracle-2 ~]# service sshd stop
Stopping sshd: [ OK ]
(2)備份sshd文件
說明:在卸載以前須要將 /etc/init.d/sshd 文件作個備份,安裝完成後,須要再將備份的sshd文件拷貝到/etc/init.d/目錄中,這樣能夠保證升級完成後能夠繼續使用service sshd start/stop/restart 的方式管理sshd服務,不然將不可以使用。
[root@Oracle-2 ~]# cp /etc/init.d/sshd /root/sshd
(3)卸載服務器上已經存在的OpenSSH軟件
卸載OpenSSH,經過rpm -qa 命名查詢出須要卸載的rpm軟件包, 再用 rpm -e 命令卸載:
查詢:
[root@Oracle-2 ~]# rpm -qa | grep -i openssh
openssh-4.3p2-36.el5
openssh-clients-4.3p2-36.el5
openssh-server-4.3p2-36.el5
openssh-askpass-4.3p2-36.el5
卸載:
[root@Oracle-2 ~]# rpm -e openssh-4.3p2-36.el5 -deps
[root@Oracle-2 ~]# rpm -e openssh-clients-4.3p2-36.el5 -deps
[root@Oracle-2 ~]# rpm -e openssh-server-4.3p2-36.el5 -deps
[root@Oracle-2 ~]# rpm -e openssh-askpass-4.3p2-36.el5 -deps
(4)刪除 /etc/ssh/ 目錄下的ssh文件
rm -rf /etc/ssh/*
第五步:安裝OpenSSH軟件
解壓下載的軟件包 openssh-6.0p1.tar.gz
[root@Oracle-2 ~]# tar -zxvf openssh-6.0p1.tar.gz
安裝OpenSSH軟件:
進入解壓出的文件夾,按照順序執行下面的編譯和安裝命令:
[root@Oracle-2 ~]# ./configure –prefix=/usr –sysconfdir=/etc/ssh –with-pam –with-md5-passwords –mandir=/usr/share/man
[root@Oracle-2 ~]# make
[root@Oracle-2 ~]# make install
執行完成後,就能夠用 ssh -V 命名查看openssh的版本,驗證安裝結果:
[root@Oracle-2 ~]# ssh -V
OpenSSH_6.0p1, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
能夠看到版本已經變成6.0p1了,說明安裝沒有問題。
接下來,恢復sshd文件,將備份的sshd文件複製到 /etc/init.d/ 目錄下:
[root@Oracle-2 ~]# cp /root/sshd /etc/init.d/sshd
測試sshd服務的啓動和中止:
[root@Oracle-2 ~]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
OK,到這裏,OpenSSH 的升級就作完了。
注意:
這樣升級完成,在服務器關機啓動後,sshd服務不會自動啓動,爲了使sshd服務在開機時自動啓動,咱們須要執行下面的命令:
[root@Oracle-2 ~]# chkconfig --add sshd
[root@Oracle-2 ~]# chkconfig --level 123456 sshd on
這樣開機後就能夠自動啓動sshd服務了。
第六步:配置sftp服務用戶的訪問權限
(1)建立sftp用戶的主根目錄
[root@Oracle-2 ~]# mkdir -p /home/sftp
[root@Oracle-2 ~]# chmod -R 755 /home/sftp
(2)建立sftp用戶組和一個sftp用戶
[root@Oracle-2 ~]# groupadd sftp
[root@Oracle-2 ~]# useradd -g sftp -d /home/sftp/blog blog
[root@Oracle-2 ~]# passwd blog
(3)權限設置
設置 /etc/ssh/sshd_config配置文件,經過Chroot限制用戶的根目錄。
[root@Oracle-2 ~]# vi /etc/ssh/sshd_config
# override default of no subsystems
#註釋掉原來的Subsystem設置
#Subsystem sftp /usr/libexec/sftp-server
#啓用internal-sftp
Subsystem sftp internal-sftp
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# ForceCommand cvs server
#限制blog用戶的根目錄
Match User pay
ChrootDirectory /home/sftp/blog/
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
保存退出,重啓sshd服務:
[root@Oracle-2 ~]# service sshd restart
(4)測試sftp權限控制
使用blog用戶嘗試登陸sftp ,發現沒法登錄,給出的提示也很難看懂,什麼緣由呢?
原來要使用Chroot功能實現用戶根目錄的控制,目錄權限的設置很是重要,不然將會沒法登錄。
目錄權限設置上要遵循2點:
ChrootDirectory設置的目錄權限及其全部的上級文件夾權限,屬主和屬組必須是root;
ChrootDirectory設置的目錄權限及其全部的上級文件夾權限,只有屬主能擁有寫權限,也就是說權限最大設置只能是755。
若是不能遵循以上2點,即便是該目錄僅屬於某個用戶,也可能會影響到全部的SFTP用戶。
設置目錄的屬主和權限:
[root@Oracle-2 ~]# chown root:root /home/sftp /home/sftp/blog
[root@Oracle-2 ~]# chmod 755 /home/sftp /home/sftp/blog
因爲上面設置了目錄的權限是755,所以全部非root用戶都沒法在目錄中寫入文件。咱們須要在ChrootDirectory指定的目錄下創建子目錄,從新設置屬主和權限。以blog目錄爲例:
[root@Oracle-2 ~]# mkdir /home/sftp/blog/web
[root@Oracle-2 ~]# chown blog:sftp /home/sftp/blog/web
[root@Oracle-2 ~]# chown 775 /home/sftp/blog/web
設置完成後,咱們再用blog用戶登陸sftp,發現此次能夠正常登陸了,而且能夠訪問的根目錄控制在了/home/sftp/blog/下,達到了咱們的要求。
補充:
上面是設置某一個sftp用戶的訪問權限,咱們能夠經過下面的配置,來設置某一個sftp組的用戶訪問權限:
Match group sftp
ChrootDirectory /home/sftp/
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp