标签:nfs ftp
一. NFS
NFS全称是network file system
NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。
举例:
假如有三台机器A, B, C,它们需要访问同一个目录,目录中都是图片,传统的做法是把这些图片分别放到A, B, C. 但是使用NFS只需要放到A上,然后A共享给B和C即可。访问的时候,B和C是通过网络的方式去访问A上的那个目录的。
1.服务端安装、配置NFS
[root@webserver ~]# yum install -y nfs-utils //同时会安装依赖的包rpcbind
[root@webserver ~]# vi /etc/exports
/home/ 192.168.1.0/24(rw,sync,all_squash,anonuid=501,anongid=501)
共分为三部分,第一部分就是本地要共享出去的目录,第二部分为允许访问的主机(可以是一个IP也可以是一个IP段)第三部分就是小括号里面的,为一些权限选项。它表示:共享的目录为/home,信任的主机为192.168.1.0/24这个网段,权限为读写,同步,限定所有使用者,并且限定的uid和gid都为501。
[root@webserver ~]# /etc/init.d/rpcbind start; /etc/init.d/nfs start
启动 NFS 服务: [确定]
启动 NFS mountd: [确定]
启动 NFS 守护进程: [确定]
正在启动 RPC idmapd: [确定]
2. 客户端上挂载NFS
[root@hpf-linux ~]# yum install -y nfs-utils //客户端同样安装
[root@hpf-linux ~]# showmount -e 192.168.1.222 //查看服务器端都共享了哪些目录
Export list for 192.168.1.222:
/home 192.168.1.0/24
[root@hpf-linux ~]# mount -t nfs 192.168.1.222:/home/ /mnt/
[root@hpf-linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda5 13G 2.4G 9.7G 20% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 190M 24M 157M 13% /boot
/dev/sda2 4.7G 9.9M 4.5G 1% /home
192.168.1.222:/home/ 4.7G 9.8M 4.5G 1% /mnt
搭建好环境后做以下实验:
[root@webserver ~]# ls /home/
cangls lost+found mysql peng virftp
[root@hpf-linux ~]# ls /mnt/
cangls lost+found mysql peng virftp
[root@hpf-linux mnt]# mkdir movies
mkdir: 无法创建目录"movies": 权限不够
[root@webserver home]# mkdir movies
[root@webserver home]# chmod 777 movies/
[root@hpf-linux movies]# touch cangls
[root@hpf-linux movies]# ls -l //挂载时默认的nfsvers=4,会导致未知的错误,为避免出现错误故需从新挂载
总用量 0
-rw-r--r-- 1 nobody nobody 0 5月 26 2015 cangls
[root@hpf-linux ~]# umount /mnt/
[root@hpf-linux ~]# mount -t nfs -onolock,nfsvers=3 192.168.1.222:/home/ /mnt/ //在客户端上挂载服务端的nfs
[root@hpf-linux movies]# ls -l //设置的权限为501,但在服务端uid为501的组为php-fpm
总用量 0
-rw-r--r-- 1 php-fpm php-fpm 0 5月 26 2015 cangls
[root@hpf-linux movies]# id php-fpm
uid=501(php-fpm) gid=501(php-fpm) 组=501(php-fpm)
[root@webserver movies]# ll
总用量 0
-rw-r--r-- 1 peng peng 0 5月 26 16:24 cangls
[root@webserver movies]# id peng
uid=501(peng) gid=501(peng) 组=501(peng)
[root@webserver movies]# cat /etc/exports
/home/ 192.168.1.0/24(rw,sync,no_root_squash)
[root@webserver movies]# exportfs -arv
exporting 192.168.1.0/24:/home
[root@hpf-linux movies]# mount -t nfs -oremount,nolock,nfsvers=3 192.168.1.222:/home/ /mnt/
[root@hpf-linux movies]# touch longls
[root@hpf-linux movies]# ll
总用量 0
-rw-r--r-- 1 php-fpm php-fpm 0 5月 26 2015 cangls
-rw-r--r-- 1 root root 0 5月 26 2015 longls
[root@hpf-linux mnt]# chmod 755 movies/
[root@hpf-linux mnt]# ll
总用量 32
drwx------ 2 root root 16384 5月 25 00:41 lost+found
drwxr-xr-x 2 root root 4096 5月 26 2015 movies
drwx------ 3 mysql mysql 4096 5月 25 04:37 mysql
drwx------ 3 php-fpm php-fpm 4096 5月 25 23:27 peng
drwx------ 4 502 502 4096 5月 26 00:30 virftp
3. exportfs 命令的使用
-a :全部挂载或者卸载;
-r :重新挂载;
-u :卸载某一个目录;
-v :显示共享的目录
改变/etc/exports配置文件后,不用重启nfs服务直接用这个exportfs即可
exportfs -arv 使生效
在使用nfs时,常用一个选项就是 -o nolock
我们还可以把要挂载的nfs目录写到client上的/etc/fstab文件中 192.168.1.222:/tmp/ /test nfs nolock 0 0 然后 mount -a
4. NFS配置的一些选项说明
rw :读写;
ro :只读;
sync :同步模式,内存中数据时时写入磁盘;
async :不同步,把内存中数据定期写入磁盘中;
no_root_squash :加上这个选项后,root用户就会对共享的目录拥有至高的权限控制,就像是对本机的目录操作一样。不安全,不建议使用;
root_squash:和上面的选项对应,root用户对共享目录的权限不高,只有普通用户的权限,即限制了root;
all_squash:不管使用NFS的用户是谁,他的身份都会被限定成为一个指定的普通用户身份;
anonuid/anongid :要和root_squash 以及all_squash一同使用,用于指定使用NFS的用户限定后的uid和gid,前提是本机的/etc/passwd中存在这个uid和gid。
二、ftp
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为 “文传协议” 用于Internet上的控制文件的双向传输。
FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。
在CentOS或者RedHat Linux上有自带的ftp软件叫做vsftpd。
1.使用pure-ftpd搭建FTP服务
[root@webserver movies]# yum install -y epel-release
[root@webserver movies]# yum install -y pure-ftpd
[root@webserver movies]# curl www.aminglinux.com/study_v2/.pf.c > /etc/pure-ftpd/pure-ftpd.conf
[root@webserver movies]# cat /etc/pure-ftpd/pure-ftpd.conf
ChrootEveryone yes
BrokenClientsCompatibility no
MaxClientsNumber 50
Daemonize yes
MaxClientsPerIP 8
VerboseLog no
DisplayDotFiles yes
AnonymousOnly no
NoAnonymous yes
SyslogFacility ftp
DontResolve yes
MaxIdleTime 15
PureDB /etc/pure-ftpd/pureftpd.pdb
LimitRecursion 3136 8
AnonymousCanCreateDirs no
MaxLoad 4
AntiWarez yes
Umask 133:022
MinUID 10
AllowUserFXP no
AllowAnonymousFXP no
ProhibitDotFilesWrite no
ProhibitDotFilesRead no
AutoRename no
AnonymousCantUpload no
CustomerProof yes
生成随机字符串用户名长度为5没有特殊字符没有数字没有大写字母密码没有特殊字符然后重定向到一个文件中 ,如果没有mkpasswd命令需要安装expect包。
[root@webserver ~]# yum install -y expect //安装mkpasswd命令
[root@webserver ~]# user=`mkpasswd -l 5 -s 0 -d 0 -C 0`
[root@webserver ~]# pass=`mkpasswd -s 0`
[root@webserver ~]# echo $user $pass > /tmp/ftp.pass
[root@webserver ~]# cat /tmp/ftp.pass
mhosl 8ghXuqx6W
[root@webserver ~]# mkdir /data/ftp
[root@webserver ~]# echo -e "$pass\n$pass"|pure-pw useradd $user -u apache -d /data/ftp/
You must give (non-root) uid and gid //提示apache用户不存在,需要用存在的用户
[root@webserver ~]# echo -e "$pass\n$pass"|pure-pw useradd $user -u peng -d /data/ftp/
Password:
Enter it again:
[root@webserver ~]# pure-pw mkdb //创建密码文件
[root@webserver ~]# pure-pw list //列出用户
eohry /data/ftp/./
mhosl /data/ftp/./
[root@webserver ~]# pure-pw userdel eohry
[root@webserver ~]# pure-pw list
mhosl /data/ftp/./
[root@webserver ~]# /etc/init.d/pure-ftpd start
正在启动 pure-ftpd: [确定]
[root@webserver ~]# netstat -lnp |grep pure
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1496/pure-ftpd (SER
tcp 0 0 :::21 :::* LISTEN 1496/pure-ftpd (SER
[root@hpf-linux ~]# yum install -y lftp //在服务端安装ftp的客户端工具
[root@hpf-linux ~]# lftp mhosl@192.168.1.222 //用户和密码在服务端的/tmp/ftp.pass
口令:
lftp mhosl@192.168.1.222:~> ls
drwxrwxrwx 3 0 0 4096 May 25 23:38 .
drwxrwxrwx 3 0 0 4096 May 25 23:38 ..
drwxr-xr-x 2 0 0 4096 May 25 23:33 daoguo
-rw-r--r-- 1 501 peng 0 May 25 23:37 longls
-rw-r--r-- 1 0 0 0 May 25 23:33 zhihu.txt
lftp mhosl@192.168.1.222:/> get longls
lftp mhosl@192.168.1.222:/> get zhihu.txt
lftp mhosl@192.168.1.222:/> quit
[root@hpf-linux ~]# ls //下载是会下载到登录时所在的目录下
anaconda-ks.cfg install.log install.log.syslog longls zhihu.txt
lftp mhosl@192.168.1.222:~> put install.log //上传文件
12577 bytes transferred
lftp mhosl@192.168.1.222:/> ls
drwxrwxrwx 3 0 0 4096 May 26 17:46 .
drwxrwxrwx 3 0 0 4096 May 26 17:46 ..
drwxr-xr-x 2 0 0 4096 May 25 23:33 daoguo
-rw-r--r-- 1 501 peng 12577 May 25 00:46 install.log
-rw-r--r-- 1 501 peng 0 May 25 23:37 longls
-rw-r--r-- 1 0 0 0 May 25 23:33 zhihu.txt
[root@hpf-linux ~]# touch {cangls,longls,xiaozels}.avi
[root@hpf-linux ~]# ls
anaconda-ks.cfg install.log longls.avi xiaozels.avi
cangls.avi install.log.syslog movies
lftp mhosl@192.168.1.222:/> mput *.avi //上传多个文件
Total 3 files transferred
lftp mhosl@192.168.1.222:/> ls
drwxrwxrwx 3 0 0 4096 May 26 19:35 .
drwxrwxrwx 3 0 0 4096 May 26 19:35 ..
-rw-r--r-- 1 501 peng 0 May 26 17:36 cangls.avi
drwxr-xr-x 2 0 0 4096 May 25 23:33 daoguo
-rw-r--r-- 1 501 peng 0 May 26 17:36 longls.avi
-rw-r--r-- 1 501 peng 0 May 26 17:36 xiaozels.avi
2.vsftp配置ftp服务
[root@webserver ~]# yum install -y vsftpd db4-utils
[root@webserver ~]# useradd virftp -s /sbin/nologin //建立虚拟账号相关联的系统账号
[root@webserver ~]# vim /etc/vsftpd/vsftpd_login //建立虚拟账户相关的文件,内容如下:
test1 //用户名
123456 //密码
test2
abcdef
[root@webserver ~]# chmod 600 /etc/vsftpd/vsftpd_login
[root@webserver ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db //生成对应的库文件,若更改了虚拟帐号的文件需要从新生成。
[root@webserver ~]# mkdir /etc/vsftpd/vsftpd_user_conf //建立虚拟账号相关的目录以及配置文件
[root@webserver ~]# cd /etc/vsftpd/vsftpd_user_conf //创建和用户对应的配置文件
[root@webserver vsftpd_user_conf]# vim test1
local_root=/home/virftp/test1
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=50000
[root@webserver ~]# mkdir /home/virftp/test1
[root@webserver ~]# chown -R virftp:virftp /home/virftp
[root@webserver ~]# vim /etc/pam.d/vsftpd //在最开头添加两行
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login //如果是64位系统,则改为/lib64/security/pam_userdb.so
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login //如果是64位系统,则改为/lib64/security/pam_userdb.so
[root@webserver ~]# vim /etc/vsftpd/vsftpd.conf //配置文件内容较多,按以下更改文件
anonymous_enable=YES改为anonymous_enable=NO
#anon_upload_enable=YES 改为 anon_upload_enable=NO
#anon_mkdir_write_enable=YES 改为 anon_mkdir_write_enable=NO
同时在文件内增加以下内容:
chroot_local_user=YES
guest_enable=YES
guest_username=virftp
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
[root@webserver virftp]# /etc/init.d/vsftpd start
为 vsftpd 启动 vsftpd: [确定]
[root@hpf-linux ~]# lftp test1@192.168.1.222
口令:
lftp test1@192.168.1.222:/> put cangls.avi
lftp test1@192.168.1.222:/> ls
-rw-r--r-- 1 502 502 0 May 26 12:13 cangls.avi
lftp test1@192.168.1.222:/> mput *.avi
Total 3 files transferred
lftp test1@192.168.1.222:/> ls
-rw-r--r-- 1 502 502 0 May 26 12:31 cangls.avi
-rw-r--r-- 1 502 502 0 May 26 12:31 longls.avi
-rw-r--r-- 1 502 502 0 May 26 12:31 xiaozels.avi
三、实验过程中的错误:
1.由于21端口被占用导致vsftpd无法启动
[root@webserver virftp]# /etc/init.d/vsftpd start
为 vsftpd 启动 vsftpd: [失败]
[root@webserver virftp]# netstat -lnp |grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1344/pure-ftpd (SER
tcp 0 0 :::21 :::* LISTEN 1344/pure-ftpd (SER
udp 0 0 0.0.0.0:51521 0.0.0.0:* 964/rpc.statd
[root@webserver virftp]# /etc/init.d/pure-ftpd stop
停止 pure-ftpd: [确定]
[root@webserver virftp]# /etc/init.d/vsftpd start
为 vsftpd 启动 vsftpd: [确定]
2.由于根目录没有写权限无法上传文件
lftp test1@192.168.1.222:/> put cangls.avi
put: Access failed: 553 Could not create file. (cangls.avi)
[root@webserver virftp]# chmod 777 test1/
[root@webserver virftp]# ll
总用量 4
drwxrwxrwx 2 root root 4096 5月 26 20:13 test1
lftp test1@192.168.1.222:/> put cangls.avi
lftp test1@192.168.1.222:/> ls
-rw-r--r-- 1 502 502 0 May 26 12:13 cangls.avi
3.出现530错误的一种解决方法
lftp test1@192.168.1.222:~> put cangls.avi
put: 登录失败: 530 Login incorrect.
[root@webserver vsftpd]# tail /var/log/secure
May 26 20:34:55 webserver vsftpd[1496]: pam_unix(vsftpd:auth): check pass; user unknown
May 26 20:34:55 webserver vsftpd[1496]: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=test1 rhost=192.168.1.110
May 26 20:34:55 webserver vsftpd[1496]: pam_userdb(vsftpd:auth): user ‘test1‘ granted access
[root@webserver vsftpd]# cat /etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
由于把添加的两行文件放到最后导致的错误,把两行文件放到开头处就解决该问题。
lftp test1@192.168.1.222:~> put cangls.avi
lftp test1@192.168.1.222:/> ls
-rw-r--r-- 1 502 502 0 May 26 12:40 cangls.avi
扩展:
http://blog.chinaunix.net/uid-23365147-id-2427229.html
vsftp使用mysql存放虚拟用户并验证 http://www.aminglinux.com/bbs/thread-342-1-1.html
ftp的主动和被动模式 http://www.aminglinux.com/bbs/thread-961-1-1.html
标签:nfs ftp
原文地址:http://9950284.blog.51cto.com/9940284/1655259