实现基于DB文件的虚拟用户FTP服务
1、安装软件
[root@Centos7 ~]#yum install vsftpd
2、创建用户数据库
[root@Centos7 ~]#vim /etc/vsftpd/vuser.txt
ftpuser1
centos
ftpuser2
centos
[root@Centos7 ~]#cd /etc/vsftpd/
[root@Centos7 vsftpd]#db_load -T -t hash -f vuser.txt vuser.db
[root@Centos7 vsftpd]#chmod 600 vuser.txt vuser.db
3、创建用户和访问FTP目录
[root@Centos7 vsftpd]#useradd -d /var/ftproot -s /sbin/nologin vuser
[root@Centos7 vsftpd]#chmod a=rx /var/ftproot/
[root@Centos7 vsftpd]#mkdir /var/ftproot/upload
[root@Centos7 vsftpd]#setfacl -Rm u:vuser:rwx /var/ftproot/upload
4、pam配置文件
[root@Centos7 vsftpd]#vim /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
[root@Centos7 vsftpd]#vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d/
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.db
chroot_local_user=YES
5、虚拟用户建立独立的配置文件
[root@Centos7 vsftpd]#mkdir /etc/vsftpd/vusers.d
[root@Centos7 vsftpd]#cd /etc/vsftpd/vusers.d
[root@Centos7 vusers.d]#vim ftpuser1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@Centos7 vusers.d]#vim ftpuser2
local_root=/data/ftproot2
[root@Centos7 vusers.d]#mkdir /data/ftproot2
[root@Centos7 vusers.d]#setfacl -Rm u:vuser:rwx /data/ftproot2
[root@Centos7 vusers.d]#chmod a-w /data/ftproot2/
6、启动服务
[root@Centos7 vusers.d]#systemctl restart vsftpd
#客户端测试
[root@localhost html]# ftp 192.168.37.7
Connected to 192.168.37.7 (192.168.37.7).
220 (vsFTPd 3.0.2)
Name (192.168.37.7:root): ftpuser1
331 Please specify the password.
Password:
\230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,37,7,168,203).
150 Here comes the directory listing.
drwxrwxr-x 2 0 0 6 Apr 09 09:58 upload
226 Directory send OK.
ftp>cd upload
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,37,7,232,11).
150 Here comes the directory listing.
226 Directory send OK.
ftp> mkdir dir1
257 "/upload/dir1" created
ftp> put 1.txt
local: 1.txt remote: 1.txt
227 Entering Passive Mode (192,168,37,7,212,152).
150 Ok to send data.
226 Transfer complete.
100475 bytes sent in 0.00188 secs (53501.06 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (192,168,37,7,247,229).
150 Here comes the directory listing.
-rw------- 1 1004 1004 100475 Apr 09 10:20 1.txt
drwx------ 2 1004 1004 6 Apr 09 10:18 dir1
226 Directory send OK.
ftp> rmdir dir1
250 Remove directory operation successful.
ftp> rm 1.txt
550 Remove directory operation failed.
ftp> ls
227 Entering Passive Mode (192,168,37,7,221,119).
150 Here comes the directory listing.
-rw------- 1 1004 1004 100475 Apr 09 10:20 1.txt
226 Directory send OK.
[root@localhost ~]# ftp 192.168.37.7
Connected to 192.168.37.7 (192.168.37.7).
220 (vsFTPd 3.0.2)
Name (192.168.37.7:root): ftpuser2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir dir2
550 Permission denied.
ftp> ls
227 Entering Passive Mode (192,168,37,7,248,36).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Apr 09 10:30 f1.txt
226 Directory send OK.
实现基于MySQL的虚拟用户FTP服务
#环境:2台主机:ftp-server(37.17),mysql-server(37.17)
#mysql-server
[root@Centos7 ~]# yum install mariadb-server
[root@Centos7 ~]# systemctl start mariadb
[root@Centos7 ~]# mysql
MariaDB [(none)]> create database vsftpd;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> use vsftpd
Database changed
MariaDB [vsftpd]> CREATE TABLE users (
-> id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
-> name CHAR(50) BINARY NOT NULL,
-> password CHAR(48) BINARY NOT NULL
-> );
Query OK, 0 rows affected (0.01 sec)
MariaDB [vsftpd]> INSERT INTO users(name,password) values('ftpuser1',password('centos'));
Query OK, 1 row affected (0.00 sec)
MariaDB [vsftpd]> INSERT INTO users(name,password) values('ftpuser2',password('magedu'));
Query OK, 1 row affected (0.00 sec)
MariaDB [vsftpd]> grant select on vsftpd.users to vsftpd@'192.168.37.%' identified by 'centos';
Query OK, 0 rows affected (0.01 sec)
MariaDB [vsftpd]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#ftp-server
1、安装软件及模块
[root@Centos7 ~]#yum install gcc gcc-c++ pam-devel mariadb-devel vsftpd
#centos7没有对应的pam_mysql模块,需要编译
[root@Centos7 ~]#tar xf pam_mysql-0.7RC1.tar.gz
[root@Centos7 ~]#cd pam_mysql-0.7RC1/
[root@Centos7 pam_mysql-0.7RC1]#./configure --with-pam-mods-dir=/lib64/security
[root@Centos7 pam_mysql-0.7RC1]#make && make install
2、添加pam配置文件
[root@Centos7 ~]#vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=centos host=192.168.37.17 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=centos host=192.168.37.17 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
3、创建用户与目录
[root@Centos7 ~]#useradd -d /data/ftproot -s /sbin/nologin vuser
[root@Centos7 ~]#chmod 555 /data/ftproot
[root@Centos7 ~]#mkdir -p /data/ftproot/upload
[root@Centos7 ~]#setfacl -m u:vuser:rwx /data/ftproot/upload/
[root@Centos7 vusers.d]#mkdir -p /data/ftproot2/upload
[root@Centos7 vusers.d]#setfacl -m u:vuser:rwx /data/ftproot2/upload
4、配置vsftpd文件
[root@Centos7 ~]#vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
user_config_dir=/etc/vsftpd/vusers.d/
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.mysql
chroot_local_user=YES
[root@Centos7 ~]#mkdir -p /etc/vsftpd/vusers.d/
[root@Centos7 ~]#cd /etc/vsftpd/vusers.d/
[root@Centos7 vusers.d]#vim ftpuser1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/data/ftproot
[root@Centos7 vusers.d]#vim ftpuser2
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/data/ftproot2
5、启动服务
[root@Centos7 vusers.d]#systemctl restart vsftpd
6、测试
ftp 192.168.37.7
ftpuser1:centos
ftpuser2:magedu
实现基于NFS共享服务的http实时数据备份
#服务端
[root@Centos7 ~]#systemctl start nfs-server
[root@Centos7 ~]#vim /etc/exports.d/httpd.exports
/var/www/html *(rw,all_squash,anonuid=48,anongid=48)
[root@Centos7 ~]#exportfs -r
[root@Centos7 ~]#exportfs -v
/var/www/html <world>(sync,wdelay,hide,no_subtree_check,anonuid=48,anongid=48,sec=sys,rw,secure,root_squash,all_squash)
[root@Centos7 ~]#setfacl -Rm u:apache:rwx /var/www/html/
#客户端
[root@localhost ~]# showmount -e 192.168.37.7
Export list for 192.168.37.7:
/var/www/html *
[root@localhost ~]# mkdir /mnt/web
[root@localhost ~]# mount 192.168.37.7:/var/www/html /mnt/web
[root@localhost ~]# ls /mnt/web
index.html
NFS持久挂载/etc/fstab
[root@localhost ~]# umount /mnt/web
[root@localhost ~]# vim /etc/fstab
192.168.37.7:/var/www/html /mnt/web nfs defaults 0 0
[root@localhost ~]# mount -a
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 100G 1.3G 99G 2% /
devtmpfs 900M 0 900M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.5M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda3 5.0G 123M 4.9G 3% /data
/dev/sda1 197M 115M 82M 59% /boot
tmpfs 182M 0 182M 0% /run/user/0
192.168.37.7:/var/www/html 100G 4.7G 96G 5% /mnt/web
autofs
[root@Centos7 ~]# vim /etc/auto.misc
web -fstype=nfs,rw,nosuid,nodev 192.168.37.7:/var/www/html
[root@Centos7 ~]# systemctl restart autofs
[root@Centos7 ~]# ls /misc/web
f1.txt index.html
利用autofs 实现家目录的漫游NFS
1、服务端搭建nfs
[root@Centos7 ~]# vim /etc/exports.d/home.exports
/home/wang 192.168.37.0/24(rw,all_squash,anonuid=1002,anongid=1002)
[root@Centos7 ~]# exportfs -r
2、相对路径挂载(会影响目录原有结构,新目录可以使用此挂载)
[root@Centos7 ~]# vim /etc/auto.master
/home /etc/auto.home
[root@localhost ~]# vim /etc/auto.home
wang -fstype=nfs,rw 192.168.37.7:/home/wang
[root@localhost ~]# ls /home/
wang #mage目录不见了
3、绝对路径挂载(不影响原有目录结构)
[root@Centos7 ~]# vim /etc/auto.master
/- /etc/auto.home
[root@localhost ~]# vim /etc/auto.home
/home/wang -fstype=nfs,rw 192.168.37.7:/home/wang
[root@localhost ~]# ls /home/
mage wang #mage目录还在
实现SAMBA共享,实现用户权限不同,目录可不同
#samba-server
1、安装samba
[root@Centos7 ~]# yum install samba
2、创建用户
[root@Centos7 ~]# echo "smbuser1 smbuser2 smbuser3" | xargs -n1 useradd -s /sbin/nologin
[root@Centos7 ~]# smbpasswd -a smbuser1
[root@Centos7 ~]# smbpasswd -a smbuser2
[root@Centos7 ~]# smbpasswd -a smbuser3
3、修改配置文件
[root@Centos7 ~]# cd /etc/samba/
[root@Centos7 samba]# cp -a smb.conf{,.bak}
[root@Centos7 samba]# vim /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
log file= /var/log/samba/log.%m
log level = 2
config file=/etc/samba/conf.d/%U
[root@Centos7 samba]# mkdir conf.d
[root@Centos7 samba]# vim conf.d/smbuser1
[smb1]
comment= smbuser1_share
path=/data/smbuser1
writeable=yes
valid users=@smbgroup
[root@Centos7 samba]# vim conf.d/smbuser2
[smb2]
comment= smbuser2_share
path=/data/smbuser2
writeable=yes
valid users=@smbgroup
[root@Centos7 samba]# vim conf.d/smbuser3
[smb3]
comment= smbuser3_share
path=/data/smbuser3
writeable=yes
valid users=@smbgroup
4、创建组,并把smb用户加入到组
[root@Centos7 samba]# groupadd smbgroup
[root@Centos7 samba]# gpasswd -a smbuser1 smbgroup
[root@Centos7 samba]# gpasswd -a smbuser2 smbgroup
[root@Centos7 samba]# gpasswd -a smbuser3 smbgroup
5、创建目录
[root@Centos7 samba]# mkdir /data/smbuser{1,2,3}
[root@Centos7 samba]# chown .smbgroup /data/smbuser{1,2,3}
6、启动服务
[root@Centos7 samba]# systemctl start smb
7、测试
smbclient -L 192.168.37.7 -U smbuser1%centos
smbclient //192.168.37.7/smbuser1 -U smbuser1%centos
基于autofs挂载samba共享
[root@localhost ~]# yum install -y cifs-utils
[root@localhost ~]# vim /etc/auto.master
/- /etc/auto.samba
[root@localhost ~]# vim /etc/auto.samba
/mnt/smb1 -fstype=cifs,sec=ntlmssp,credentials=/etc/smb.txt ://192.168.37.7/smb1
[root@localhost ~]# vim /etc/smb.txt
username=smbuser1
password=centos
[root@localhost ~]# chmod 600 /etc/smb.txt
[root@localhost ~]# systemctl reload autofs
#测试
[root@localhost ~]# ls /mnt/smb1/
f11.txt file1
[root@localhost ~]# rm -rf /mnt/smb1/file1/
[root@localhost ~]# ls /mnt/smb1/
f11.txt
数据的实时同步
#服务端
1、修改rsync配置文件
[root@Centos7 ~]# vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 0
ignore errors
exclude = lost+found/
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
reverse lookup = no
hosts allow = 192.168.37.0/24
[backup]
path = /backup/
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass
[root@Centos7 ~]# echo "rsyncuser:magedu" > /etc/rsync.pass
[root@Centos7 ~]# chmod 600 /etc/rsync.pass
[root@Centos7 ~]# mkdir /backup
[root@Centos7 ~]# systemctl restart rsyncd
#客户端
1、配置同步
[root@Centos7 ~]# echo "magedu" > /etc/rsync.pass
[root@Centos7 ~]# chmod 600 /etc/rsync.pass
[root@Centos7 ~]# systemctl restart rsyncd
[root@Centos7 ~]# mkdir /data/www
[root@Centos7 ~]# echo "It is test" > /data/www/index.html
#一次性测试(client)
[root@Centos7 ~]# rsync -avz --password-file=/etc/rsync.pass /data/www rsyncuser@192.168.37.17::backup #/data/www 不带斜杠整个目录备份,带斜杠是目录下备份
2、利用inotify脚本实验自动同步到服务端
[root@Centos7 ~]# yum install inotify-tools
[root@Centos7 ~]# vim inotify_rsync.sh
SRC='/data/www/'
DEST='rsyncuser@192.168.37.17::backup'
inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} | while read DATE TIME DIR FILE;do
FILEPATH=${DIR}${FILE}
rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was
backuped up via rsync" >> /var/log/changelist.log
done
[root@Centos7 ~]# bash inotify_rsync.sh &
3、测试同步(client)
[root@Centos7 ~]# cd /data/www
[root@Centos7 www]# dd if=/dev/zero of=block bs=1M count=100
[root@Centos7 www]# dd if=/dev/zero of=block2 bs=1M count=200
遇到的问题
[root@Centos7 ~]# smbclient -L 192.168.37.7
protocol negotiation failed: NT_STATUS_IO_TIMEOUT #这错误提示
#解决方法,把DNS指向修改为外网DNS地址即可
[root@Centos7 ~]# vim /etc/resolv.conf
nameserver 223.5.5.5
网友评论