NFS服务:
常见文件服务:
nfs:network files system,常常专用于linux同平台的文件共享,当然也可以使用samba来完成。
samba:基于smb(协议)实现跨平台共享,在linux 实现cifs(windows)。
将linux加入到域内需要winbind来完成。
ftp:应用层协议,可以跨越平台。所有应用层协议都是跨平台的协议。
nfs和samba是工作在第五层,是通过rpc来实现的(remote procedure call,远程过程调用,过程就是函数。)
运行的前提条件:
1、rpcbind,为nfs提供远程过程调用服务,
nfs本身由多个程序组成,在启用nfs服务的过程中会调用多个程序,就要涉及到端口,除了2049端口是固定的其它端口都是随机的小于1024的端口,所有需要rpc来协调。
nfs启动的前提是rpcbind需要先启动,并且如果rpcbind重启了,那么nfs也需要重新启动,因为随机端口需要重新再rpc上注册。
2、nfs-utils,包含nfsd及nfs-daemons服务的软件包。
nfs验证用户是通过用户的uid和gid来进行验证身份的。
文件共享权限由两部分组成:
文件共享权限和文件权限(和windows的权限类似)
nfs的认证
认证主机,不是认证用户。
服务脚本:/etc/rc.d/init.d/nfs
配置文件:/etc/exports
nfsd监控端口: 2049/tcp 2049/udp。
rpc服务监听端口:随机
一般情况下是在内网通讯的,如果要跨防火墙的话,要使用固定端口配置/etc/sysconfig/nfs文件,将mount_port、rquotad_port、lockd_tcpport、lockd_udpport修改为指定端口。
rpcbind为rpc提供服务,端口为111。所以111端口必须启动,如果没有启动nfs也不可能提供服务。
配置文件/etc/exports格式
export host(options,options,options) host(options)
/data 192.168.1.9(rw)
/data 本地共享的文件名
ip:可以访问的主机或者网络号 主机号(192.168.1.0/24 sut??.com.cn *.inno.com) 主机名的方式要求必须可以被解析,通过dns、hosts。
rw:权限。
共享选项:
rw:读写
ro:只读
secure:限制用户只能使用小于1024端口的访问请求,默认开启,关闭使用insecure。
sync:同步写入,立即写入到服务端,性能差,可靠性高,。
async:异步写入,完成后写入服务端,性能好,可靠性差,建议async
wdelay:写入延迟,no_wdelay,不延迟。
nohide:不隐藏服务端挂载的其它nfs目录。
root_squash:压缩root权限,root变为最小权限。
no_root_squash:不压缩
all_squash:y压缩所有用户权限
anonuid:以某一个用户身份执行
anonuid=nfsuser
默认情况下nfs里面root的权限是最小的,
NFS软件结构:
客户端查询服务器端共享资源的命令:showmount
showmount
-d:显示当前主机所共享的NFS文件系统中,有哪些已经被客户端挂载。
-e ipaddr:显示指定ip可以挂载 的nfs文件系统。
-a:显示当前系统主机的nfs文件系统中,每个挂载链接。(服务器端)
客户端显示的文件权限均为nobody。
服务器端nfs文件系统维护命令:exportfs
exportfs:避免重新启动nfs服务。
-r:重新挂载exports里面的共享目录
-a:挂载所有共享目录
-u:卸载共享目录
日志文件:/var/lib/nfs/*tab
etab:主要记录NFS共享文件系统的权限设置值。
xtab:记录曾经链接到此服务器的客户端信息。
理解NFS文件系统权限问题:
1、服务端的nfs文件共享出来权限是收到两部分影响的,配置文件/etc/exports的选项权限,第二就是nfs共享文件本身的权限。
2、客户端访问使用的用户账户在nfs端是不被验证的,实际验证的是用户的id号码,也就是说,客户端用户的id如果是501,那么在服务端对应的501账户就应该有文件访问权限(这个账户可能和客户端账户不同,不必考虑),所有要求设置服务端对应的ID号具有文件相应的读写权限。
client gongbing id:501------>>server zhang id:501----->>setfacl -m zhang:rwx /data。
AUTOFS
自动挂载远程共享文件夹,并在空闲时卸载远程文件夹。
安装程序:autofs
主配置文件:/etc/auto.master
配置文件规则:
FTP服务
ftp协议:文件传输和管理
主要功能:
1、三种不同用户身份,系统实体用户、guest、anonymous
2、命令记录和日志记录/var/log/
3、限制用户登录的目录,chroot(显示的根目录就是用户的家目录),就是说用户只能登录自己的家目录,不能随意进入linux系统目录。
命令链接:21/tcp(控制端口) 20/tcp(数据端口)
数据连接:
主动模式:
1、 客户端使用随机端口连接服务器21端口,通过三次握手后建立通讯控制通道
2、当用户要传输数据时,通过自己的另一个随机端口申请。
3、服务器会使用20端口主动创建数据传输通道。
缺点:客户端如果是在NAT或者防火墙后面,由于是服务器发动主动请求,客户端端口是随机的,往往造成建立数据通道失败。
解决办法:1、通过iptables的FTP检测模块:ip_conntrack_ftp、ip_nat_ftp,需要加载在中间的防火墙或NAT上面。
2、通过被动模式
被动模式:1、客户端发起ftp请求,通过21端口建立连接
2、客户端想要建立数据通道,通过pasv提出申请
3、服务器创建一个随机端口,告知客户端,等待连接
4、客户端随机使用一个端口连接服务器给得端口。
服务器端
ftp软件:vsftpd proftpd filezilla
windows版本:serv-u,IIS。
客户端:ftp,lftp
转义响应码:
1**:服务器信息。
2**:正确响应信息。
3**:正常响应,但操作过程不完成,需要进一步补充。
4**:客户端错误
5**:服务器错误
vsftp的用户类型:
匿名用户:实际上是映射的一个系统用户。根目录为/var/ftp
本地用户:服务器端存在的用户,建议禁用本地用户,因为是明文传输。
如果可以登录建议设置为chroot模式。
访客用户:服务器端自动映射的一个系统用户。
多个虚拟用户可以同时被映射为一个系统用户,但不同的虚拟用户可以有不同的权限。
配置虚拟用户的配置文件:/etc/pam.d/vsftpd
vsftpd:
服务脚本:/etc/rc.d/init.d/vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
/etc/pam.d/vsftpd //用户身份验证
用户身份限制:
方法一、通过/etc/pam.d/vsftpd里面的file=/etc/vsftpd/ftpusers
来禁止file文件指定的用户登录FTP服务。
方法二、修改/etc/vsftpd/user_list文件
这个文件的生效需要在vsftpd.conf里面添加两个参数:
userlist_enable=yes 是否开启user_list文件功能
userlist_deny=yes|no 如果是yes表示user_list里面的账户都拒绝,其他允许,如果为no表示里面的都允许,其他为拒绝。
设置白名单(只有里面的用户可以登录,其他用户不可以登录)
1、在user_list里面创建用户
2、在vsftp.conf里面添加userlist_deny=NO即可。
设置黑名单(只有里面的用户不可登录,其他用户可以登录)
1、在user_list里面创建用户
2、在vsftp.conf里面添加userlist_deny=YES即可。
限制用户目录:/etc/vsftpd/chroot_list,需要创建。
此文件需要vsftpd.conf里面的两个参数:
chroot_list_enable
chroot_list_file
方法:
chroot:禁锢用户于其自己的家目录。
1、禁锢所有用户
chroot_local_user=yes //所有本地用户都锁定在家目录。
2、禁锢指定用户 (黑名单)
chroot_list_enable=yes
chroot_list_file=/etc/vsftpd/chroot_list //禁锢指定文件内的用户,这个chroot_list需要创建,并且里面设置用户名,一个用户名一行。
3、如果三个选项都启用,那么chroot_list里面的用户就是没有被禁锢的。
vsftpd.conf常见设置值:
与服务器相关
1、connect_from_port_20=YES|NO
设置主动连接工作时监听的端口号。
2、dirmessage_enable=YES|NO
设置用户进入某个目录时的显示信息, message_file=.message,在目录中创建。
3、pasv_enable=YES|NO
设置是否启动被动工作模式。
4、write_enable=YES|NO
是否允许用户上传
5、accept_timeout=60
data_connection_timeout=300
idle_session_timeout=300
6、max_clients=0
最大客户端连接数
7、max_per_ip=0
同一个ip最大连接数
8、pasv_min_port=1024 pasv_max_prot=1122
设置被动连接时服务器开启的pasv端口号范围
9、use_localtime=YES
设置登陆后使用本地时间显示
与系统用户相关:
1、guest_enable=YES|NO
设置访问模式是否开启,如果开启任何系统账号登陆都会变成guest账号。
2、guest_username=ftp
设置系统账号转换成的guest名称。3
3、local_enable=YES|NO
设置使用系统账号登陆,
4、local_max_rate=0
设置用户传输数率
5、chroot_local_user=YES
设置是否现在用户的chroot。
6、chroot_list_enable=YES
是否启用chroot写入列表功能
7、chroot_list_file=/etc/vsftpd/chroot_list
5/6/7配合使用,chroot_list里面的用户可以进入其他目录,不在chroot_list里的用户执行chroot限制。
与匿名用户相关:
1、anonymous_enabl=YES
所有匿名配置都依赖于他是否为YES。
与安全有关:
1、one_process_model=YES|NO
YES表示每个连接都拥有一个process来负责,缺点是消耗系统资源,建议NO。
2、tcp_wrappers=YES
3、xferlog_enable=YES xferlog_std_format=/var/log/xferlog
设置用户行为日志记录开启功能及存储位置。
Linux下登陆FTP服务器报错“不能改变目录” 具体语句如下:500 OOPS:cannot change directory:/home/xxx
是由于设置了selinux,可以通过getsebool -a |grep ftp来查找,并修改过ftpd_disable_trans和ftp_home_dir为on即1,setsebool ftpd_disable_trans 1
设置ftps加密传输的方法,首先需要创建证书。然后在vsftpd.conf中添加一下内容。
ftp目录的权限设置
默认情况下,ftp的根目录为/var/ftp,为了安全,这个目录默认不允许设置为777权限,否则ftp将无法访问。但是我们要匿名上传文件,需要“other”用户的写权限,正确的做法:
在/var/ftp中建立一个upload(名子自己起吧)文件夹,将个文件夹权限设置为777(视具体需要自己设),在upload这个文件夹中,匿名用户可以上传文件、创建文件夹、删除文件等。
一般至此,便实现vsftpd匿名用户的上传下载了。如果还不行,就是下面的问题。
3、selinux的配置
SELinux(Security-Enhanced Linux) 是美国国家安全局(NAS)对于强制访问控制的实现,是 Linux上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。
最简单的办法,关闭selinux
方法1:修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。
方法2:用命令setenforce 0,无需重启。(setenforce的格式:setenforce [ Enforcing | Permissive | 1 | 0 ])
方法3:在lilo或者grub的启动参数中增加:selinux=0,也可以关闭selinux。
使用getenforce查看当前selinux是否正在运行。
不关闭selinux,就要设置selinux的ftp权限。
1、使用getsebool -a | grep ftp查看ftp相关设置状态,我们要将allow_ftpd_anon_write设为on。
2、使用setsebool -P 进行设置。例:setsebool -P allow_ftpd_anon_write=on。
或使用togglesebool进行bool值取反,例如togglesebool allow_ftpd_anon_write。
本文转自 blackstome 51CTO博客,原文链接:http://blog.51cto.com/137783/1968760,如需转载请自行联系原作者