2016年9月7日 星期三

架設Apache及vsftpd設定


Install apache2

sudo apt-get update
sudo apt-get install apache2
sudo apt-get install apache2 apache2-doc apache2-utils



若 sudo service apache2 restart 時出現
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

只要在/etc/apache2/apache2.conf加入
ServerName localhost
即可解決



Install & setting vsftpd

sudo apt-get update
sudo apt-get install vsftpd libpam-pwdfile


安裝好了之後,接下來要設定vsftp
本文設定為針對此目錄結構:


















假設www資料夾裡存放網站程式碼(html)及專案資料(ftp),
html目錄下會有許多專案 (以下以wiff為例),
每個專案裡會有一個使用者帳號,
只能存取自己專案資料夾裡的資料。


現在,假設資料夾都已經建好,
立馬開始進行vsftpd的設定:
sudo vim /etc/vsftpd.conf

進入編輯畫面之後,我們要注意的設定如下:
# 預設的情況下,要將使用者限制在自己的家目錄之內
chroot_local_user=YES
# 支援檔案上傳
write_enable=YES
# 為了讓透過 FTP 上傳的檔案的預設群組權限為「可寫入」
local_umask=002
# 支援local端登入使用
local_enable=YES
# 要求vsftpd讓使用者在對自己的家目錄有寫入的權限下仍然允許連線
allow_writeable_chroot=YES

接下來要設定pam(身份認證模組)
sudo vim /etc/pam.d/vsftpd

其實就是全部註解掉,然後加上passwd的設定2行
#Standard behaviour for ftpd(8).
auth   required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
#Note: vsftpd 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 #註解掉


#下面兩行加上
auth    required pam_pwdfile.so pwdfile /etc/vsftpd.passwd
account required pam_permit.so

接下來建立FTP的使用者帳號
# 創造一個不能登入系統的帳號
sudo useradd -M  -s /usr/sbin/nologin htmlAdmin
sudo passwd htmlAdmin

# 第一次設定密碼需要先create htpasswd檔案 (HTTP基本認證的user帳密)
sudo htpasswd -cd /etc/vsftpd.passwd htmlAdmin 
# -c : Create the passwdfile.
# -d : Use crypt() encryption for passwords.
# ps. 如果要創第二組帳號的密碼,去掉-c (因為已經create過了)
# sudo htpasswd -d /etc/vsftpd.passwd user2

接下來設定資料夾,並幫帳號指定根目錄
sudo chmod 555 /var/www/
sudo chmod 755 /var/www/html/
sudo chown htmlAdmin:ftp -R /var/www/html/
sudo usermod --home /var/www/html/ htmlAdmin
sudo service vsftpd restart

好了,這樣應該就可以了~
開一下filezilla來試試看吧!

接下來要設定meteor和wiff 等等子資料夾的權限都跟下面一樣
sudo useradd -M -s /usr/sbin/nologin meteor
sudo passwd meteor
sudo htpasswd -d /etc/vsftpd.passwd meteor
sudo chmod 777 /var/www/html/meteor
sudo chown meteor:ftp -R /var/www/html/meteor/
sudo usermod --home /var/www/html/meteor meteor
sudo service vsftpd restart



最後,注意!切記!
如果要用filezilla來測試,
每次vsftpd restart之後要把filezilla整個關掉再開。



以上參考:
http://hong-s-note.logdown.com/posts/760695-tutorial-ubuntu-set-up-ftp-server-vsftpd
http://ifresh.cc/solution-to-vsftpd-refusing-to-run-with-writable-root-inside-chroot/





SSL(https)設定


現在的apache都已經有內建openssl了,
所以只要裝好apache之後,開啟SSL模組即可
sudo a2enmod ssl
接下來要建立金鑰,為了管理方便,
先建個資料夾,再把金鑰放進去。
sudo mkdir /etc/apache2/ssl
金鑰設定為365天後到期
sudo openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.key
金鑰產生過程會有一些額外資訊要求你填寫,
填寫完之後就算產生完成,
再接著設定apache,
讓預設的http和https都可以使用
sudo vim /etc/apache2/sites-available/000-default.conf
設定內容如下:
<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        ServerName example.com:443
        DocumentRoot /var/www/html
        <Directory />
          Options FollowSymLinks
          AllowOverride None
       </Directory>
       <Directory /var/www/html/>
         Options Indexes FollowSymLinks MultiViews
         AllowOverride None
         Order allow,deny
         allow from all
      </Directory>

      ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
      <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
      </Directory>
      #   SSL Engine Switch:
      #   Enable/Disable SSL for this virtual host.
      SSLEngine on

      #   A self-signed (snakeoil) certificate can be created by installing
      #   the ssl-cert package. See
      #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
      #   If both key and certificate are stored in the same file, only the
      #   SSLCertificateFile directive is needed.    
      SSLCertificateFile /etc/apache2/ssl/apache.pem
      SSLCertificateKeyFile /etc/apache2/ssl/apache.key

      ErrorLog ${APACHE_LOG_DIR}/error.log

      # Possible values include: debug, info, notice, warn, error, crit,
      # alert, emerg.
      LogLevel warn

      CustomLog ${APACHE_LOG_DIR}/access.log combined

      Alias /doc/ "/usr/share/doc/"
      <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
      </Directory>

    </VirtualHost>



重啟,搞定!
sudo service apache2 restart






沒有留言:

張貼留言