最近因為工作的關係, 會有些伺服器使用 ubuntu 14.04
小記一下相關筆記
^^
小記一下相關筆記
OS: Ubuntu 14.04
預計使用 pure-ftpd 套件來提供 ftp 服務
搜尋套件名稱
$ sudo apt-cache search ^pure-f
pure-ftpd - Secure and efficient FTP server
pure-ftpd-common - Pure-FTPd FTP server (Common Files)
pure-ftpd-ldap - Secure and efficient FTP server with LDAP user authentication
pure-ftpd-mysql - Secure and efficient FTP server with MySQL user authentication
pure-ftpd-postgresql - Secure and efficient FTP server with PostgreSQL user authentication
查詢是否安裝
$sudo dpkg --get-selections pure-ftpd
dpkg: no packages found matching pure-ftpd
安裝套件
$ sudo apt-get install pure-ftpd
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libfile-copy-recursive-perl openbsd-inetd pure-ftpd-common update-inetd
The following NEW packages will be installed:
libfile-copy-recursive-perl openbsd-inetd pure-ftpd pure-ftpd-common update-inetd
0 upgraded, 5 newly installed, 0 to remove and 112 not upgraded.
Need to get 423 kB of archives.
After this operation, 1244 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
再次查詢安裝狀態
$ sudo dpkg --get-selections pure-ftpd
pure-ftpd install
這邊覺得比較神奇的是, 安裝完成之後就自動啟動了.
$ sudo /etc/init.d/pure-ftpd status
* pure-ftpd is running
$ sudo service pure-ftpd status
* pure-ftpd is running
$ netstat -tupln | grep :21
(No info could be read for "-p": geteuid()=1007 but you should be root.)
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN -
tcp6 0 0 :::21 :::* LISTEN -
Ubuntu 下的 pure-ftpd 設定檔在 /etc/pure-ftpd/conf 下面
$ ls /etc/pure-ftpd/
auth conf db pureftpd-dir-aliases
$ ls /etc/pure-ftpd/conf/
AltLog FSCharset MinUID NoAnonymous PAMAuthentication PureDB UnixAuthentication
因為透過 pure-ftpd-wrapper 來啟動 pure-ftpd 服務, 所以conf 並不像 openSUSE 是整合在同一個檔案, 在 /etc/pure-ftpd/conf 下的每個檔案
- 都只能有一行, 否則視為設定錯誤不處理
- 以# 為開頭視為註解
例如
$ cat /etc/pure-ftpd/conf/NoAnonymous
yes
建立一個 ftp 使用者, 並將 shell 指定為 /bin/false (效果為不能登入 系統)
$ sudo useradd -m testvm -s /bin/false
設定密碼
$passwd testvm
因為 PAM 有設定控管 pure-ftpd (pam_shells.so), 所以他會去檢查 /etc/shells
$ cat /etc/pam.d/pure-ftpd
# PAM config for pure-ftpd
# Standard behaviour for ftpd(8).
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# Uncomment next line to allow non-anonymous ftp access ONLY for users,
# listed in /etc/ftpallow
#auth required pam_listfile.so item=user sense=allow file=/etc/ftpallow onerr=fail
# Note: pure-ftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
# Standard pam includes
@include common-account
@include common-session
@include common-auth
auth required pam_shells.so
檢查 /etc/shells 內容, 可以發現剛剛的 /bin/false 並不在/etc/shells 內容內(所以這個使用者會被阻擋)
$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/tmux
/usr/bin/screen
所以動手把 /bin/false 加入 /etc/shells
這樣的方式會失敗是因為 >> 附加還是使用原本使用者的 bash
$ sudo echo "/bin/false" >> /etc/shells
-bash: /etc/shells: Permission denied
所以透過 tee 來接進去 (當然也可以用 vi 來解決)( tee -a 代表附加 )
$ sudo echo "/bin/false" | sudo tee -a /etc/shells
/bin/false
$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/tmux
/usr/bin/screen
/bin/false
然後嘗試使用剛剛的使用者帳號以及密碼就可以登入 ftp, 但是這樣的缺點是
預設的 ftp 設定如下
$ ls /etc/pure-ftpd/conf/
AltLog FSCharset MinUID NoAnonymous PAMAuthentication PureDB UnixAuthentication
這邊並沒有設定 chroot 的設定, 也就是使用者可以藉由 .. 的方式進入到上層或其其他的目錄
這邊有兩種方式
方式一, 只針對某個特定的使用者
在 /etc/passwd 家目錄欄位後面加上 /./
例如
nccuvm:x:1008:1008::/home/testvm/./:/bin/false
方式二, 針對所有的使用者
加入 ChrootEveryone 設定
$ sudo echo "yes" | sudo tee /etc/pure-ftpd/conf/ChrootEveryone
yes
觀察檔案以及相關設定
$ ls /etc/pure-ftpd/conf/
AltLog ChrootEveryone FSCharset MinUID NoAnonymous PAMAuthentication PureDB UnixAuthentication
$ cat /etc/pure-ftpd/conf/ChrootEveryone
yes
要讓所有人生效要重新啟動 pure-ftpd
$ sudo /etc/init.d/pure-ftpd restart
再次登入之後就會發現登入的路徑為 / 不會切換到別的目錄
^^
沒有留言:
張貼留言