星期五, 9月 05, 2014

Ubuntu 14.04 pure-ftpd 小記

最近因為工作的關係, 會有些伺服器使用 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

再次登入之後就會發現登入的路徑為  /  不會切換到別的目錄

^^

沒有留言: