如何在Ubuntu建立只能用sftp的帳號


大三開始,愈來愈多小組實作功課,其中一門課就是DBMS,你會被要求和其他成員寫一個要操作資料庫的網頁。我的電腦是24x7長開的Kubuntu,好適合作伺服器,而且這樣做我個人就不用煩上傳這件事,於是我就產生了建立只能用sftp(Secure FTP,使用ssh來加密的ftp)的帳號,讓其他人可以安全地上傳他的網頁到我的電腦的需求。

在這個情況中,我需要讓其他成員可以登入我的系統,以便更新網頁,而且為安全起見,這個帳號只能用於有加密的sftp來更新網頁,我會以chroot方法,限制該帳號不可有其他功能。
以下例子中,我會以newuser作為帳號名稱,你可以按需要改其他名字,例如:team100。

首先,是建立使用者和設定密碼:
sudo useradd -s /usr/lib/sftp-server newuser
sudo passwd newser
再來是建立使用者home directory,以及讓他可以上傳網頁的地方:
sudo mkdir -p /home/newuser/uploads
sudo chown newuser:newuser /home/newuser/uploads
接著,就是限制使用者操作的部分。
請在/etc/shells裏加這一行,配合之前的設定,讓使用者登入後只能用sftp:
sudo -i
echo "/usr/lib/sftp-server" >> /etc/shells
exit
然後,是修改ssh config檔。
請確保/etc/ssh/sshd_config裏有這一行,保證已經開放sftp功能:
Subsystem sftp internal-sftp
在/etc/ssh/sshd_config最底部加入這幾行,用來使ssh server限制newuser使用者只可用sftp:
Match User newuser
        ChrootDirectory %h
        AllowTCPForwarding no
        X11Forwarding no
        ForceCommand internal-sftp
重啟openssh-server,讓你新的設定生效:
sudo /etc/init.d/ssh restart
Openssh這部分就完成了,接下來是apache部分,如果你沒有更新網頁的需要,請直接忽略。

記得剛才我們設定了/home/newuser/uploads嗎?該使用者帳號只能把它的資料上傳到/home/newuser/uploads這個目錄,我們要做的,就是讓apache可以使用這個目錄的資料。

修改路徑權限,讓apache可以讀取:
sudo chmod 755 /home/newuser /home/newuser/uploads
現在,我要讓這個目錄,可以在瀏覧器用 http://localhost/oursite 瀏覽:
sudo ln -s /home/newuser/uploads /var/www/oursite
現在,用sftp把網頁上傳,就能用瀏覽器看到,完成了!

如何還原:

一搬教學網站有個問題,就是不會教你如何還原,我會!

首先,用root權限開啟文字編輯器,在/etc/ssh/sshd_config中,刪除:
Match User newuser
        ChrootDirectory %h
        AllowTCPForwarding no
        X11Forwarding no
        ForceCommand internal-sftp
再用root權限編輯/etc/shells,刪除:
/usr/lib/sftp-server
再執行:
sudo rm /var/www/oursite
sudo rm -rf /home/newuser/ #注意:這行會把你的網頁都刪除,請確定你需要這樣做才執行;否則,請忽略這行
sudo userdel newser
sudo /etc/init.d/ssh restart
完成! 參考:Ubuntu SFTP-Only Account How-to

留言

這個網誌中的熱門文章

如何在ubuntu中compile kernel(12.10)