天天看點

說說sftp的chroot

sshd_config的配置:

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

Subsystem sftp internal-sftp

Match User a

ChrootDirectory /home/logs

<a></a>

chown root:a /home/logs

chmod g-w  /home/logs

chmod -R 755 /home/logs

原理

<code>難道他們就真沒搞明白ssh的sftp工作原理嗎?當一個使用者登陸系統,無論是用ssh還是sftp,ssh服務先對這個使用者進行認證,</code>

<code>認證通過以後就會檢查match裡有沒有這個使用者,有的話match以後的語句都會對這個使用者生效.</code>

<code>這個時候當指定ChrootDirectory.ssh會對比對的使用者進行choot的操作.以上面的配置為例,當a使用者認證通過以後,</code>

<code>他的home目錄會限定在</code><code>/</code><code>chroot這個目錄,這個時候a使用者如果是用的sftp協定登陸是沒問題的.</code>

<code>但是如果a使用者使用的是ssh協定,将使用者的home鎖定在</code><code>/</code><code>chroot,會再試圖給使用者加載給a使用者指定的shell,</code>

<code>比如說是</code><code>/</code><code>bin</code><code>/</code><code>bash,而這個時候a使用者的</code><code>/</code><code>是</code><code>/</code><code>chroot,是以ssh試圖在</code><code>/</code><code>chroot下找</code><code>/</code><code>bin</code><code>/</code><code>bash,即:</code><code>/</code><code>chroot</code><code>/</code><code>bin</code><code>/</code><code>bash,</code>

<code>這個路徑肯定是不存在的,是以使用者a使用者ssh協定登陸根本就不會登陸成功!</code>

<code>root@rainbird10:~</code><code># tail -n 1 /etc/passwd</code>

<code>a:x:</code><code>1001</code><code>:</code><code>1001</code><code>:,,,:</code><code>/</code><code>home</code><code>/</code><code>a:</code><code>/</code><code>bin</code><code>/</code><code>bash</code>

<code>root@rainbird10:~</code><code># ssh a@localhost      </code>

<code>/</code><code>bin</code><code>/</code><code>bash: No such </code><code>file</code> <code>or</code> <code>directory</code>

<code>Connection to localhost closed.</code>

<code>root@rainbird10:~</code><code># sftp a@localhost   </code>

<code>Connecting to localhost...</code>

<code>sftp&gt; pwd</code>

<code>Remote working directory: </code><code>/</code>

<code>sftp&gt; cd ..</code>

<code>sftp&gt;</code>

 也就是說經過以上的設定,比對的使用者隻能使用sftp并鎖定到指定的目錄.而tcp轉發和X11轉發都是需要有權限登陸到系統才可以實作的功能,不知道加上有啥意義

注意

<code>另,我的ssh版本:</code>

<code>root@rainbird10:~</code><code># ssh -V</code>

<code>OpenSSH_5.</code><code>1p1</code> <code>Debian</code><code>-</code><code>5ubuntu1</code><code>, OpenSSL </code><code>0.9</code><code>.</code><code>8g</code> <code>19</code> <code>Oct</code> <code>2007</code>

<code>      </code><code>寫到這裡,權限是限制嚴格了,筆者也驚喜的發現,再用winscp上傳完檔案不能執行腳本啦!哈哈,</code>

<code>      </code><code>想想也是,都沒有權限登陸還執行啥腳本呢.哎,安全和複雜總是彼增我長的.</code>

<code>      </code><code>這時候如果想讓使用者可以登陸的話,可以在</code><code>/</code><code>chroot下面給使用者再建立簡單的bash環境,</code>

<code>      </code><code>但是這樣已經偏離的初衷.因為即使使用者能登陸又能咋樣?它執行腳本的時候也隻能操作</code><code>/</code><code>chroot裡的東西,</code>

<code>      </code><code>不會影響系統檔案.這樣雖然鎖定了使用者目錄,但是一點意義也沒有.另外linux本身就是個多使用者的系統,</code>

<code>      </code><code>不發揮它多使用者的優勢而再搞</code><code>'子系統'</code><code>或者說</code><code>'監獄'</code><code>環境,有啥意思呢.</code>

<code>沒有權限登陸還執行啥腳本</code>

這才是最終的原因。

<a>本文轉自 liqius 51CTO部落格,原文連結:http://blog.51cto.com/szgb17/2050090,如需轉載請自行聯系原作者</a>