搭建sftp服務(wù)器

1怕品、前言

sftp可以為傳輸文件提供一種安全的網(wǎng)絡(luò)的加密方法妇垢。sftp 與 ftp 有著幾乎一樣的語法和功能。SFTP 為 SSH的其中一部分肉康,是一種傳輸檔案至 Blogger 伺服器的安全方式闯估。其實在SSH軟件包中,已經(jīng)包含了一個叫作SFTP(Secure File Transfer Protocol)的安全文件信息傳輸子系統(tǒng)吼和,SFTP本身沒有單獨的守護進程涨薪,它必須使用sshd守護進程(端口號默認(rèn)是22)來完成相應(yīng)的連接和答復(fù)操作,所以從某種意義上來說纹安,SFTP并不像一個服務(wù)器程序尤辱,而更像是一個客戶端程序。SFTP同樣是使用加密傳輸認(rèn)證信息和傳輸?shù)臄?shù)據(jù)厢岂,所以光督,使用SFTP是非常安全的。但是塔粒,由于這種傳輸方式使用了加密/解密技術(shù)结借,所以傳輸效率比普通的FTP要低得多,如果您對網(wǎng)絡(luò)安全性要求更高時卒茬,可以使用SFTP代替FTP船老。

2咖熟、搭建sftp服務(wù)器

系統(tǒng)背景:Centos 6.10

需求:創(chuàng)建三個用戶,其中一個為sftp管理員柳畔,其余兩個分別為指定目錄的訪問用戶馍管。sftp管理員對其他用戶的sftp根目錄下的內(nèi)容具有讀寫權(quán)限,限制其他用戶只能訪問其自己的根目錄且僅有讀權(quán)限薪韩;相關(guān)的sftp用戶不能登錄到Linux系統(tǒng)中确沸。

- 確認(rèn)openssh的版本

[root@localhost ~]# ssh -V

OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013

使用上述命令查看openssh的版本,要求版本高于4.8p1俘陷,低于此版本需升級罗捎。

- 創(chuàng)建sftp管理組及用戶組

[root@localhost ~]# groupadd sftpadmin

[root@localhost ~]# groupadd sftp

- 創(chuàng)建sftp管理用戶及普通用戶

[root@localhost ~]# useradd -g sftp -s /bin/false charles        #/bin/false也可以替換為/sbin/nologin,目的是不允許該用戶登錄到系統(tǒng)中

[root@localhost ~]# useradd -g sftp -s /bin/false john

[root@localhost ~]# useradd -g sftpadmin -s /bin/false sftpadmin

[root@localhost ~]# passwd charles

[root@localhost ~]# passwd john

[root@localhost ~]# passwd sftpadmin

- 分別創(chuàng)建對應(yīng)用戶的sftp根目錄并指定為其家目錄

[root@localhost ~]# mkdir -pv /data/sftp/{charles,john}/share

mkdir: created directory `/data'

mkdir: created directory `/data/sftp'

mkdir: created directory `/data/sftp/charles'

mkdir: created directory `/data/sftp/charles/share'

mkdir: created directory `/data/sftp/john'

mkdir: created directory `/data/sftp/john/share'

[root@localhost ~]# usermod -d /data/sftp/ sftpadmin    #可忽略

[root@localhost ~]# usermod -d /data/sftp/charles/ charles    #可忽略

[root@localhost ~]# usermod -d /data/sftp/john/ john    #可忽略

- 配置sshd_config文件

[root@localhost ~]# vim /etc/ssh/sshd_config

找到如下這行拉盾,用#符號注釋掉桨菜,大致在文件末尾處。 

#Subsystem sftp /usr/libexec/openssh/sftp-server

Subsystem sftp internal-sftp     #這行指定使用sftp服務(wù)使用系統(tǒng)自帶的internal-sftp

Match Group sftp     #這行用來匹配sftpusers組的用戶捉偏,如果要匹配多個組倒得,多個組之間用逗號分割; 

ChrootDirectory /data/sftp/%u        #用chroot將用戶的根目錄指定到%h告私,%h代表用戶home目錄屎暇,這樣用戶就只能在用戶目錄下活動。也可用%u驻粟,%u代表用戶名根悼。

ForceCommand internal-sftp    #指定sftp命令 

AllowTcpForwarding no

X11Forwarding no

Match user sftpadmin        #匹配用戶了,多個用戶名之間也是用逗號分割

ChrootDirectory /data/sftp

ForceCommand internal-sftp

AllowTcpForwarding no

X11Forwarding no

- 設(shè)置Chroot目錄的權(quán)限

[root@localhost ~]# chown root:sftp /data/sftp/{charles,john}        #修改普通用戶的根目錄屬組

[root@localhost ~]# chmod 755 /data/sftp/{charles,john}        #修改普通用戶的根目錄權(quán)限

[root@localhost ~]# chown root:sftpadmin /data/sftp/        #修改管理員的根目錄屬組

[root@localhost ~]# chmod 755 /data/sftp/        #修改管理員根目錄的權(quán)限

[root@localhost ~]# chown sftpadmin:sftp /data/sftp/{charles,john}/share/        #修改各普通用戶下的share目錄的屬主為管理員蜀撑,屬組為普通用戶組

[root@localhost ~]# chmod 750 /data/sftp/{charles,john}/share/        #各share目錄管理員的權(quán)限為讀寫挤巡,sftp組僅有讀權(quán)限,其他用戶沒有權(quán)限訪問

- 關(guān)閉selinux

[root@localhost ~]# vim /etc/selinux/config 

SELINUX=permissive

[root@localhost ~]# setenforce 0

- 重啟sshd服務(wù)

[root@localhost ~]# service sshd restart

Stopping sshd: [ OK ]

Starting sshd: [ OK ]

- 驗證sftp登錄

#sftpadmin 管理員登錄酷麦,能對share目錄下的文件進行讀寫操作

[root@localhost ~]# sftp sftpadmin@127.0.0.1

Connecting to 127.0.0.1...

sftpadmin@127.0.0.1's password: 

sftp> ls

charles john 

#普通用戶登錄矿卑,對share目錄下的文件只能進行讀操作

[root@localhost ~]# sftp charles@127.0.0.1

Connecting to 127.0.0.1...

charles@127.0.0.1's password: 

sftp> ls

share

驗證登錄出現(xiàn)sftp> 基本就說明了sftp服務(wù)器搭建成功了,剩下需要注意的就是權(quán)限問題了沃饶。此時也可以通過相關(guān)的ftp client 如:FileZilla FTP Client 和xftp 來連接到對應(yīng)的sftp服務(wù)器了母廷。

sftp client 連接sftp服務(wù)器

另外需要注意的是:ChrootDirectory的權(quán)限問題,你設(shè)定的目錄必須是root用戶所有糊肤,否則就會出現(xiàn)問題琴昆。所以請確保sftp用戶根目錄的所有人是root, 權(quán)限是 750 或者 755。注意以下兩點原則:

1)目錄開始一直往上到系統(tǒng)根目錄為止的目錄擁有者都只能是 root馆揉,用戶組可以不是 root业舍。

2)目錄開始一直往上到系統(tǒng)根目錄為止都不可以具有群組寫入權(quán)限

3、設(shè)置記錄sftp服務(wù)器的登錄及操作日志

既然搭建了sftp服務(wù)器,那么通常還是需要知道哪些人在什么時候做了哪些操作舷暮,默認(rèn)情況下sftp服務(wù)只會記錄相關(guān)的登錄信息态罪,默認(rèn)保存在/var/log/audit/audit.log日志下。但是默認(rèn)的記錄方式并不便于管理員獲取指定的信息下面,因此我們可以對sftp日志進行另行的設(shè)置指定复颈。

- 修改/etc/ssh/sshd_config

[root@localhost ~]# vim /etc/ssh/sshd_config 

Subsystem sftp internal-sftp -l VERBOSE -f AUTH,local5        #設(shè)置日志級別為VERBOSE,并指定日志記錄的收集設(shè)施

Match Group sftp

ChrootDirectory /data/sftp/%u

ForceCommand internal-sftp -l VERBOSE        #設(shè)置日志級別為VERBOSE

AllowTcpForwarding no

X11Forwarding no

Match user sftpadmin

ChrootDirectory /data/sftp

ForceCommand internal-sftp -l VERBOSE        #設(shè)置日志級別為VERBOSE

AllowTcpForwarding no

X11Forwarding no

- 修改rsyslog.conf

[root@localhost ~]# vim /etc/rsyslog.conf

auth,authpriv.*,local5.* /var/log/sftp.log        #設(shè)置將相關(guān)的auth诸狭、authpriv及l(fā)ocal5相關(guān)的日志信息記錄到/var/log/sftp.log文件

- 重啟sshd和rsyslog

[root@localhost ~]# service sshd restart

Stopping sshd: [ OK ]

Starting sshd: s [ OK ]

[root@localhost ~]# service rsyslog restart

Shutting down system logger: [ OK ]

Starting system logger: [ OK ]

- 查看日志

[root@localhost ~]# cat /var/log/sftp.log 

Jul 12 15:46:46 localhost sshd[1706]: pam_unix(sshd:session): session closed for user sftpadmin

Jul 12 15:46:49 localhost unix_chkpwd[1816]: password check failed for user (sftpadmin)

Jul 12 15:46:49 localhost sshd[1814]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.10.10.1 user=sftpadmin

Jul 12 15:46:50 localhost sshd[1814]: Failed password for sftpadmin from 10.10.10.1 port 61361 ssh2

Jul 12 15:46:54 localhost sshd[1814]: Accepted password for sftpadmin from 10.10.10.1 port 61361 ssh2

Jul 12 15:46:54 localhost sshd[1814]: pam_unix(sshd:session): session opened for user sftpadmin by (uid=0)

Jul 12 15:46:54 localhost sshd[1819]: subsystem request for sftp

Jul 12 15:46:54 localhost sshd[1820]: session opened for local user sftpadmin from [10.10.10.1]

Jul 12 15:46:54 localhost sshd[1820]: received client version 4

Jul 12 15:46:54 localhost sshd[1820]: realpath "."

Jul 12 15:46:54 localhost sshd[1820]: opendir "/"

Jul 12 15:46:54 localhost sshd[1820]: closedir "/"

Jul 12 15:46:55 localhost sshd[1820]: realpath "/charles"

Jul 12 15:46:55 localhost sshd[1820]: opendir "/charles"

Jul 12 15:46:55 localhost sshd[1820]: closedir "/charles"

Jul 12 15:46:56 localhost sshd[1820]: realpath "/charles/share"

Jul 12 15:46:56 localhost sshd[1820]: opendir "/charles/share"

Jul 12 15:46:56 localhost sshd[1820]: closedir "/charles/share"

Jul 12 15:46:58 localhost sshd[1820]: open "/charles/share/New File" flags WRITE,CREATE,TRUNCATE mode 0666

Jul 12 15:46:58 localhost sshd[1820]: close "/charles/share/New File" bytes read 0 written 0

Jul 12 15:46:58 localhost sshd[1820]: realpath "/charles/share"

Jul 12 15:46:58 localhost sshd[1820]: opendir "/charles/share"

Jul 12 15:46:58 localhost sshd[1820]: closedir "/charles/share"

Jul 12 15:47:01 localhost sshd[1820]: rename old "/charles/share/New File" new "/charles/share/testfile"

[root@localhost ~]# 

在進行了相關(guān)的sftp服務(wù)器操作后券膀,查看相應(yīng)的sftp.log君纫,能查看到相應(yīng)的登錄信息及操作日志驯遇,此時對于管理員排查來說就比之前方便了。

4蓄髓、限制ssh連接的訪問Ip


[root@localhost ~]# vim /etc/ssh/sshd_config 

# Authentication:

AllowUsers root@10.10.10.*        #限制root用戶只能通過10.10.10.*網(wǎng)段登錄訪問

AllowUsers charles@10.10.10.*        #限制charles用戶只能通過10.10.10.*網(wǎng)段登錄訪問

AllowUsers john@10.10.10.*

5叉庐、sftp的密鑰認(rèn)證

- 將對應(yīng)用戶的家目錄更改回默認(rèn)路徑并修改其屬主和屬組權(quán)限:

[root@localhost ~]# usermod -d /home/charles/ charles

- 創(chuàng)建密鑰對

[root@localhost ~]# mkdir /home/charles/.ssh

[root@localhost ~]# ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):         #默認(rèn)保存路徑

Enter passphrase (empty for no passphrase): 

Enter same passphrase again:         #輸入密鑰認(rèn)證密碼

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

9f:76:8f:e0:a3:68:ae:38:34:cf:7c:7d:b0:0d:77:d3 root@localhost.localdomain

The key's randomart image is:

+--[ RSA 2048]----+

| |

| |

| |

| |

| S . |

| o o...o E |

| . = . *=... |

| ..+ o.oo+o o |

| ...=o .o... . |

+-----------------+

[root@localhost ~]# cp /root/.ssh/id_rsa.pub /home/charles/.ssh/authorized_keys        #將公鑰保存為指定用戶的家目錄下的authorized_keys,額外的keys可通過cat追加到authorized_keys中

[root@localhost ~]# chown -R charles.sftp /home/charles        #修改對應(yīng)家目錄的屬主和屬組  

[root@localhost ~]# service sshd restart        #最后重啟sshd服務(wù)

- 測試密鑰登錄sftp

[root@localhost ~]# sftp -oIdentityFile=/root/.ssh/id_rsa charles@10.10.10.11

Connecting to 10.10.10.11...

Enter passphrase for key '/root/.ssh/id_rsa': 

sftp> ls

share  

如上圖所示会喝,輸入了密鑰認(rèn)證的密碼后陡叠,應(yīng)該能正常登錄到sftp服務(wù)中。

此時可以將/root/.ssh/id_rsa 復(fù)制出來肢执,導(dǎo)入到相關(guān)的ssh或sftp連接客戶端即可實現(xiàn)相關(guān)的密鑰登錄枉阵,如:

sftp服務(wù)密鑰認(rèn)證1
sftp服務(wù)密鑰認(rèn)證2

sftp服務(wù)密鑰認(rèn)證3
sftp服務(wù)密鑰認(rèn)證4
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市预茄,隨后出現(xiàn)的幾起案子兴溜,更是在濱河造成了極大的恐慌,老刑警劉巖耻陕,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拙徽,死亡現(xiàn)場離奇詭異,居然都是意外死亡诗宣,警方通過查閱死者的電腦和手機膘怕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來召庞,“玉大人岛心,你說我怎么就攤上這事±鹤疲” “怎么了忘古?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長穿稳。 經(jīng)常有香客問我存皂,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任旦袋,我火速辦了婚禮骤菠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疤孕。我一直安慰自己商乎,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布祭阀。 她就那樣靜靜地躺著鹉戚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪专控。 梳的紋絲不亂的頭發(fā)上抹凳,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音伦腐,去河邊找鬼赢底。 笑死,一個胖子當(dāng)著我的面吹牛柏蘑,可吹牛的內(nèi)容都是我干的幸冻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼咳焚,長吁一口氣:“原來是場噩夢啊……” “哼洽损!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起革半,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤碑定,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后督惰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體不傅,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年赏胚,在試婚紗的時候發(fā)現(xiàn)自己被綠了访娶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡觉阅,死狀恐怖崖疤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情典勇,我是刑警寧澤劫哼,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站割笙,受9級特大地震影響权烧,放射性物質(zhì)發(fā)生泄漏眯亦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一般码、第九天 我趴在偏房一處隱蔽的房頂上張望妻率。 院中可真熱鬧,春花似錦板祝、人聲如沸宫静。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孤里。三九已至,卻和暖如春橘洞,著一層夾襖步出監(jiān)牢的瞬間捌袜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工震檩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留琢蛤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓抛虏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親套才。 傳聞我的和親對象是個殘疾皇子迂猴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1、查看openssh的版本 使用ssh -v 命令來查看openssh的版本背伴,版本必須大于4.8p1沸毁,低于的這個...
    ByeBuy閱讀 4,135評論 1 4
  • 1、遠(yuǎn)程連接服務(wù)器 遠(yuǎn)程連接服務(wù)器對于管理員來說傻寂,是一個很有用的操作息尺。它使得對服務(wù)器的管理更為方便。不過方便歸方便...
    Zhang21閱讀 39,501評論 0 20
  • 加密算法 對稱加密算法 加密和解密使用同一個密鑰 DES疾掰、3DES搂誉、AES、Blowfish静檬、Twofish炭懊、ID...
    毛利卷卷發(fā)閱讀 1,588評論 0 4
  • 原文鏈接 之前兩篇文章利用SSH代理訪問內(nèi)網(wǎng)資源和使用SSH代理在本地開發(fā)環(huán)境調(diào)試各種回調(diào)兩篇文章,介紹了ssh的...
    馮宇Ops閱讀 12,894評論 1 3
  • 兩人世界本來只是個很小的圈,當(dāng)其中一個人開始膨脹時稻励,圈就越變越大父阻,直到撐出了一個缺口,讓其他東西混了進來。 01 ...
    霧島翔介閱讀 990評論 0 51