File Server
Overview:
❑ Image that you are a TA of a course, the professor wants you to build a file server that students can submit their homework to
❑ To prevent your colleagues from accidentally deleting files on the server, the snapshot and rollback features are needed
FTP Server
Install pure-ftpd
Install with pkg
pkg install pure-ftpd
Or install with port
port install pure-ftpd
記得要
[x]UPLOADSCRIPT
enable pure-ftpd
cat pureftpd_enable="YES" > /etc/rc.conf
Create 3 directories under /home/ftp
mkdir -p /home/ftp/public /home/ftp/upload /home/ftp/hidden
Create admin user
Create a system user “sysadm”
adduser
user:sysadm
passwd:W081001
group:sysadm,wheel
ssh enable
pure-ftpd.conf
cp /usr/local/share/doc/pure-ftpd/pure-ftpd.conf \
/usr/local/etc/pure-ftpd.conf
In pure-ftpd.conf:
ChrootEveryone yes
AnonymousOnly no
NoAnonymous no
PureDB /usr/local/etc/pureftpd.pdb
AnonymousCanCreateDirs no
AntiWarez no
//yes -> Disallow downloads of files owned by the ftp system user
Umask 133:022
AnonymousCantUpload no
CallUploadScript yes
TLS 1
Create ftp users
-
Anonymous
pw groupadd ftpuser
pw useradd ftp -g ftpuser -d /home/ftp
-
Virtual users
Create two virtual users “ftp-vip1”, “ftp-vip2”
i. Add a real accountpw group virtualgroup
pw useradd ftpuser1 -g virtualgroup \ -c "FTP virtual user1" -d /home/ftp \ -S /sbin/nologin
ii. Map a virtual account to a real account
pure-pw useradd ftp-vip1 -u ftpuser1 -g virtualgroup \ -d /home/ftp -m
-
看 user info
pure-pw show ftp-vip1
ssl簽證
Launch the server…
For testing the server
/usr/local/sbin/pure-ftpd &
ftp localhost
Automatically run the server when the system boots
add /usr/local/sbin/pure-ftpd &
to /etc/rc.d/rc.local
or /etc/rc.d/boot.local
Service
service pure-ftpd start
service pure-ftpd stop
service pure-ftpd restart
Service conf location
/usr/local/etc/rc.d
or /etc/rc.d
Test in File Zilla
主機:< your ip address >
使用者名稱:< username >
passwd:< ******** >
port:21
權限設定
sudo chown sysadm:virtualgroup /home/ftp/upload
sudo chmod 1777 /home/ftp/upload
sudo chown sysadm:virtualgroup /home/ftp/public
sudo chmod 777 /home/ftp/public
sudo chmod 771 /home/ftp/hidden
sudo mkdir /home/ftp/hidden/treasure
sudo touch /home/ftp/hidden/treasure/secret
It would look like this
drwxrwx--x 2 root wheel hidden
drwxrwxrwx 2 sysadm virtualgroup public
drwxrwxrwt 2 sysadm virtualgroup upload
upload的t 表示只有owner/root 才可以刪除檔案/資料夾
ZFS on /home/ftp
enable ZFS service
cat zfs_enable="YES" > /etc/rc.conf
sudo service zfs start
Add new hard disks
VM settings > Storages > add 2 hard disks: ada1 ada2
Create mypool
sudo zpool create mypoool mirror /dev/ada1 /dev/ada2
檢查
zpool status
Mount
zfs set mountpoint=/home/ftp mypool
zfs set compression=lz4 mypool
zfs set atime=off mypool
重複上述指令給 mypool/public
、mypool/upload
、mypool/hidden
check history
sudo zpool history
Automatic snapshot script
Write a script: zbackup
Usage:
- Create: zbackup DATASET [ROTATION_CNT]
- List: zbackup -l|--list [DATASET|ID|DATASET ID]
- Delete: zbackup -d|--delete [DATASET|ID|DATASET ID]
- Export: zbackup -e|--export [DATASET|ID|DATASET ID]
- Import: zbackup -i|--import FILENAME DATASET
$PATH
下的filename可以當command執行
我的$PATH是 /home/c0846101/bin
zbackup
ftp-watchd
Create ftp-watchd service
cd /usr/local/etc/rc.d
sudo vim ftp-watchd
sudo vim /tmp/uploadscript.sh