第八周LINUX学习笔记
vsftpd丶nfs丶samba
nfs基于rpc
samba基于cifs(smb)
drbd:
ftp:file transfer protocol 文件传输协议
两个连接:
tcp:命令连接
tcp:数据连接 在被动模式下数据传输端口是随机的除非自己指定
主动模式:服务器端通过20端口主动连接客户端,
被动模式:客户端使用自己与服务器端建立连接。
默认情况下ftp协议使用tcp端口中的 20和21这两个端口其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与ftp使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
防火墙上连接追踪
数据要流式化
文本:文件流
二进制
c/s
server:
wu-ftpd(华盛顿大学的fdtp)
proftpd
pureftp
vsftpd very secure ftpd
iis
servu
client:
gui
windows
flashfxp
cuteftp
filezilla(开源)
linux
gftp
cli
ftp
lftp
wget
lftpget
用户认证:
系统用户
虚拟用户
hash file
mysql
匿名用户
数据传输安全
sftp:ssh提供的基于ssh协议的ftp
ftps:基于ssl的ftp
相应码:
1xx:信息码
2xx:成功状态码
3xx: 进一步提示补全信息的状态码
4xx:客户端错误,临时错误
5xx: 服务器端错误,永久性错误
安装vsftpd
/etc/pam.d/vsftpd:认证文件
pam:plugable authentication module 插件式认证模块
nsswith:名称解析框架
模块化:/lib64/linbnss*,/usr/lib64/libnss*
配置文件:/etc/nsswitch.com
pam:认证框架
模块化:/lib64/security/pam*.so
配置文件:/etc/pam.conf和/etc/pam.d/*
服务脚本:/etc/rc.d/init.d/vsftpd
配置文件:/etc/vsftp/vsftpd.conf
主程序文件:/usr/sbn/vsftpd
数据文件:/var/ftp
空闲顶格写:
等号前后没有空格
anonymous或ftp
对于ftp访问ftp服务器时应该对其chroot
禁锢用户与其家目录中
chroot_local_user={yes|no} 禁锢用户,默认为no
需要禁锢开启为yes,安全
chroot_list_enable={yes|no}
chroot_list_file=/etc/vsftp/chroot
不禁锢全部用户,将禁锢的用户保存在/etc/vsftp/chroot
每行一个用户
两项不能同时使用
local_enable={yes|no}是否需要本地用户登录
匿名用户的配置
anonymous_enable=yes,启动虚拟用户登录
anon_upload_enable=yes 允许虚拟用户有写权限
anon_other_write_enable=yes 允许虚拟用户有删除权限
anon_mkdir_write_enable=yes 允许虚拟用户创建文件夹权限
注意:启用写入功能时,ftp用户对相应的本地文件系统也有相应的写入权限;
生效的权限取决于文件系统权限和服务权限的交集
实现用户的欢迎信息login banners
ftpd_banner=
banner_file=banner文件
切换目录式的欢迎信息
dirmessage_enable=yes
在目录中创建.messages
vsftp控制登陆系统用户的机制
/etc/vsftpd/ftpusers中的用户不允许使用ftp服务器,这是在/etc/pam.d/vsftpd中定义的
user_list配置文件有两种用法
黑名单: 里面的无法登陆,不写在里面的可以登陆
userlist_enable=yes
uselist_deny=yes
白名单:里面的可以登陆,不写在里面的无法登陆
userlist_enable=yes
uselist_deny=no
连接限制
max_clients:最大并发连接数
max_per_ip:每ip可同时发起并发请求
传输速率:
anon_max_rete: 匿名用户的传输速率,单位为“字节/秒”
local_max_rate:本地用户传输速率,单位为“字节/秒”
上传文件的umask:
anno_umask:匿名用户上传文件的umask;
local_umask:
修改匿名用户上传文件的属主和属主
chown_uploads=yes
chown_username=用户名
实现虚拟用户:使用虚拟用户的原因是因为使用系统用户不安全,增删重要文件之类的。
所有的虚拟用户会映射成一个系统用户,访问时的文件目录是为此系统用户的家目录
虚拟用户
hash编码的文件:
奇数行为用户名,偶数行为密码
关系型数据库:
pam-mysql(第三方模块)实现认证
虚拟用户的权限
user_config_dir=文件夹
在文件夹中创建虚拟用户同名的的文件
在虚拟用户的文件中写入权限
总结:
ftp:命令和数据
ftp数据传输:文本和二进制
数据连接的工作模式:主动和被动
/etc/vsftpd
匿名用户的权限
本地用户的访问权限
本地用户禁锢于家目录
本地用户黑白名单
欢迎信息
上传的umask
上传文件的速率
上传文件的属主
最大并发连接数
虚拟用户
日志
nfs:network file system
v1
v2
v3
v4
为nfs提供监听的
2049/tcp
2049/udp
nis:nerwork infomction service
nis+
不完全兼容
kerberos
ldap
rpc:portmapper
监听
111/tcp
111/udp
各基于rpc提供的进程,在启动时要向rpc注册监听在某端口上,rpc会从各未使用的端口中挑选一个端口给此进程监听,即半随机
nfs:
安装配置:
nfs-utils
三个关键进程
moutnd 挂载守护进程,负责客户端来源认证进程
nfsd:文件读写
idmapd:id映射进程
/etc/exports,建议直接导出一个分区(即给nfs文件系统一个单独的分区会更好)
文件系统 客户端1(文件系统导出属性) 客户端2(文件系统导出属性)
文件系统
客户端:
ip:172.16.100.7
hostname: *.magedu.com
ip networks: 长短格式都可以
文件系统导出属性:
rw:读写
async:异步
sync:同步
root_squash:压缩root用户,基于imapd,将root通过网络访问时转换为nfsnobody用户
no_root_squash:不压缩用户
all_squash:压缩所有用户
anonuid,anongid:指定
showmount
-a 全部 在nfs服务器端显示所有的挂载会话
-d 文件 在服务器端执行,显示那个导出的文件系统被那些客户端挂载过
-e 共享,在客户端执行,探查某主机所导出的nfs文件系统,使用格式为showmount -e server_ip
exportfs导出nfs文件(可以不用重启服务,避免了如果重启服务正在传输一些文件的丢失)
-a:操作所有文件系统
-ra:重新导出所有文件系统
-ua:取消导出的所有文件系统
-v:显示详细信息
如果客户端要启用开机自动挂载nfs,挂载的设备为服务器端ip:/nfs文件系统名 ,但是如果服务器端需要导出nfs文件系统,那么就得再挂载选项里加入defaults,_netdev
保证其不会一直请求挂载。
nfs的辅助进程mountd等监听在固定端口上,可以通过在编辑/etc/sysconfig/nfs等参数来实现
samba:
smb:service message block smbd tcp:445
netbios:本地名称解析 nmbd udp:137 138 tcp:139
winbindd:window的绑定进程
注意:samba服务器的启动时 nmb 名称解析,和smb协议 都应该启动
ad(ldap)
active directory
dc
unc: \\server\shared
所谓的samba是因为windos间只支持smb协议之间进行进程调用,而linux间只支持rpc下的nfs所以为了两者能够通信,所以在linux上有人开发了samba支持两者之间的进程调用。
samba的用户:
1.系统用户
2,密码是独立的,非为/etc/shadow中的密码
使用smbpasswd -a 用户名 设置访问smb的密码
密码文件被加密后存在在一个特殊路径下,ls -a 也无法查看、
默认访问的是用户的家目录。 那么如何配置一个公共的共享目录提供访问。
smbclient:
检查服务器上的共享:
sambclient -l server -u username
以交互式模式连入服务器的某共享
smbclient //server/shared -u username
vim /etc/smb.comf
新建一个共享文件
[shared name] 共享名
comment= 鼠标悬停在文件夹上线显示的机械能系
path 共享文件夹路径
read only =
writeable =
browaeable =
public =
guset ok = 是否允许来宾账号访问。
write list = 可写用户列表
用户名:hadoop
用户组:@groupname,+groupname
测试配置文件语法错误,并显示最终生效的配置
testparm
挂载cifs文件系统
mount -t cifs //ip/shared /path/to/mount_point -o username=smbuser
iptables
iptables:基于软件的形式实现的一种防火墙的软件程序
firewall:工作在主机或网络边缘,对进出的报文按事先定义的规则进行检查,并且由匹配到的规则进行处理的一组硬件或软件,甚至可能是两者的组合
主机防火墙:工作于主机边缘,只能对一台主机起到保护作用
网络防火墙:工作于网络边缘,对多台主机起到保护作用
一般来讲网络防火墙对多台主机起保护作用,那么符合不同主机的不同功能的报文都会放行,而当到达某个主机的时候 就应该用主机防火墙来进一步隔离。因此 很多时候都是主机防火墙和网络防火墙配合工作的。
网络层:网络防火墙
应用层:网关
ids:入侵检测
hids:ossec 主机型入侵检测
nids:snort 网络型入侵检测
filesystem:tireware 文件系统级别的入侵检测
ips:入侵防御系统+firewall 与防火墙联动
honeypot:蜜罐 做诱补工作
系统评估安全工具:
nessus,nmap
btlinux
rootkit
乌云平台
iptables/netfilter:基于网络层的防火墙,连接追踪(状态检测)
ipfw ipchains iptables
iptables:防火墙规则编写工具
netfiter:网络过滤器,是一个框架
hook_function
prerrouting 路由前 主要做目标地址转换
input
output
forward
postrouting 路由后 主要做源地址转换
这里稍微解释一下:一个报文进来 发现目标地址并不是本机,那么通过路由 指向forward
这时候不应该做转换。因为还没有指向哪个地址 例如有多块网卡的情况下。所以说forward是用来判断指向哪块网卡的,当到达postrouting时才进行源地址转换,将源地址转换为网关的地址,转发到目标地址的主机上去。然后当响应报文进来的时候,目标地址肯定是本机,但是实际上是要将报文响应给用户的。 于是prerrouting就发挥作用了,将目标地址进行转换,转换为用户机。
filter:过滤:做报文筛选 私有地址发送的报文 是不会被送回来的,就像游览网站时,发送过去的报文是不会被返回的。除非做代理和地址转换。
nat:network address transltion 将报文中的源地址和目标地址 转换为另外的地址
dnat
snat
mangle:对报文进行修改,不实现过滤也不实现地址转换,只对报文中的一些信息进行修改,然后重新封装。因此在任何位置都能有这个功能
raw:
forward:
filter
mangle
input
filter
mangle
out
filter
mangle
nat
prerouting
mangle
nat
postouting
mangle
nat
将控制强的放在前面,应用访问频繁的也要放在前面
四表:
fileter,net,mangle,raw
五链
prerouting(路由前) input foreard output postrouting(路由后)
表和链的对应关系
filer:input,forward.output
nat:prerouting output postrouting
magle:prerouting forward postrouting input output
规则:检查条件,处理机制,如果规则太多了,可能又将规则串为一条自定义的链,并在检查时将报文送给自定义的链检查后再送回原先的链继续检查
通:白名单,默认为堵,只对能识别的进行放行
堵:黑名单,默认为通,只对能识别的进行阻截
检查条件:
ip:sip,dip
tcp:sport,dport,flags
udp:sport,dport
icmp:icmp-type
扩展机制:
time string state(connection-tracking)连接追踪
处理机制:
drop(丢弃),
reject(拒绝,并返回)
accept(允许)
snat
dnat
return(返回)
redirect(端口转发)
log(只记录日志)
mangle:做防火墙标记
自己在网上找的关于tcp连接时3次握手和断开时四次握手的必要性https://www.cnblogs.com/qiaoconglovelife/p/5733056.html(连接时的一些数值(+ -号可能没标明)
如何写规则
-t 表 -l 列出 -n 以数值方式显示
iptables [-t table] -n chain
创建一条自定义的空规则链
iptables [-t table] -x chain
产出一条自定义的空规则链
iptables [-t table] -e old-chin-name new-chain-name
为链修改名
iptables [-t table] -p chain—name target
为链指定默认策略,修改默认的属性
iptables [-t table] {-f|-l|-z} [chain [rulenum]] [options...]
注意当省略"-t表名"时,默认表示操作filter表
-f 清空链中的规则 可以指定哪个链,或者哪个链中的哪些规则
规则由编号,在链中自上而下,从1开始
-l list 列出表中的所有规则
-n:数字格式显示ip和port
-v:显示信息,
pkts:packets,被本规则所有匹配到的报文的个数
baytes:被本规则所匹配到的所有报文的大小子和,单位是字节,会执行单位换算
target:目标,即处理机制
port:协议一般为(tcp|udp|icmp)
opt:可选项
in:数据包的流入端口
out:数据包的流出接口
scource:源地址
destination:目标地址
-vv:
-vvv:更加详细
-x:exactly:精确值,不执行单位换
--line-nambers:显示各规则的行号
-z:zero,清零:
把规则的计数器清零
-p 设置指定链的默认策略
iptables -p input drop
iptables [-t table] {-a|-d} chain rule-specification
-a:append,附加一条规则
rule-specification
匹配条件 -j 处理机制
匹配条件:
通用匹配
-s 匹配原地址,可以ip,也可以网络地址:可以使用!操作符取反,!172.168.0.0/16 相当于 --src,或 --source
-d 匹配目标地址,可以ip,也可以网络地址:可以使用!操作符取反,!172.168.0.0/16
-p 匹配协议,通常只能使用{tcp|udp|icmp}三者之一
-i 数据报文流入的接口,通常只用于input,forward和prerouting
-o 数据报文流出的接口,通常只用output,forward和postrouting
保存规则:
service iptables save
规则会被保存至/etc/sysconfig/iptables文件中:
默认,start时也会读取次文件中的内容篇日志规则
iptables-save > /path/to/some_rulefile 保存iptables至别的位置
iptables-restore < /path/to/some_rulefile 从自定义的位置读取并使之生效
规则命令:
-a:添加
-d:删除
iptables [-t table] -d chain rulenum(规则所在行数)
当一条被删除,后续的条目会被补上
插入规则
iptables [-t table] -i chain [rulenum] rule-specification
不带规则行数 默认为第一行
替换规则(覆盖指定规则)
iptables [-t table] -r chain rulenum rule-specification
显示指定链上的规则添加命令
iptables [-t table] -s [chain [rulenum]]
扩展匹配
隐含扩展:使用-p {tcp|udp|icmp}指定某特定协议后,自动能够对协议进行的扩展
-p tcp
--dport m[-n],匹配的目标端口,可以是连续的多个端口
--sport:m[-n],匹配的源端口,可以是连续的多个端口
--tcp-flags
urg psh pst syn ack fin
例如后面加上 rst,syn,ack,fin syn
那么这个意思就是 必须syn为1 其他的必须为0 另外还能写成all,none
-p udp
--dport m[-n],匹配的目标端口,可以是连续的多个端口
--sport:m[-n],匹配的源端口,可以是连续的多个端口
-p icmp
--icmp-type 8是ping请求 0是ping响应
例子:放行ping其他主机
iptables -a input -d 192.168.48.128 -p icmp --icmp-type 0 -j accept
iptables -a output -s 192.168.48.128 -icmp --icmp-type 8 -j accept
显式扩展:必须要明确指定的扩展模块
-m 扩展模块名称 --专用选项1 --专用选项2
multiport:多端口匹配,一次指定多个离散端口
--source-ports --sports ports{port1 port2}
--destination-ports, --dports
例子iptables -a input -d 192.168.48.128 -p tcp -m multiport --dports 21,80 -a accept
iprange:ip地址服务
[!] --src-range from [-to]
[!] --dst-range from [-to]
例子:
iptables -a input -d 192.168.48.128 -p tcp --dport 23 -m --src-range from 192.168.48.129-192.168.48.130 -j accept
iptables -a output -s 192.168.48.128 -p tcp --dport 23 -m iprange --dst-range from 192.168.48.129-192.168.48.130 -j accept
time 指定时间范围
--datestart yyyy[-mm[-dd[thh[:mm[:ss]]]]]
--datestop yyyy[-mm[-dd[thh[:mm[:ss]]]]]
--timestart hh:mm[:ss]
--timestart hh:mm[:ss]
[!] --weekdays day[,day....]
例子iptables -a input -d 192.168.48.128 -p tcp -dport 80 -m time --weekdays 1,2,3,4,5 --timestart 8:00 --timestop 21:00 -j accept
string 字符串匹配
--alog {bm|kmp} :字符匹配查找时使用的算法 必要选项
--string “string” :要查找的字符串 必要选项
--hex-string "hex-string" 要查找的字符,先编码成16进制格式
例子iptables -i output -s 192.168.48.128 -p tcp -sport 80 -m string --alog bm --string "hello" -j drop
例如对游览器访问限制含有字符串“hello"不能通行
另外很重要的一点是 这里选择了插入的方式,并且没有选定插入的行数。说明插入的是第一行。因为这里相比于其他阻截方式更为严格,即含有字符的限制。所以说如果你有对http请求的一些普通限制,
connlimit:每ip对指定服务的最大并发连接数
[!] --connlimit-above
limit:报文速率控制
--limit number[/second|/minute|/hour|/day]
--limit-burst # number 峰值
hping3:安装此包,做测试
state:状态追踪
ip_conntrack,nf_conntrack 通过这些模块实现对整个连接的追踪。内部有个表记录各个连接的各种信息。
!注意:内部用来存储记录的空间是有限的,例如只能存储1000个记录连接,那么下一个连接进来的时候就不会被记录进来。这并不是没有记录信息那么简单,这造成了整个服务器的拒绝连接请求。所以要将这部分内存空间加大。
netfilter:会话
这其中有个自己进行控制的连接状态记时器,只要新连接进来成为new,在连接状态计时器倒计时为0前,一直处于established状态,这种可以使用与任何协议(与tcp三次握手的established有区别)
--state
new 新的连接
established 连接中
related 即一些连接之间是有依赖关系的(特别适用于被动模式下的ftp服务)
invalid 无效连接
状态匹配的简单介绍:例如我们对http的input的链做了限制,但是output链是无法做限制的。因为我们http的回复是面向全体的。于是 一些木马程序攻破了input链,通过控制了新的程序端口并从output出去并控制了主机。所以这时候基于状态追踪就能很好的防护,input链 只能够接受new和established 这两种状态的连接。而output链只接受established 状态的连接 。这样就起到了很好的防护作用
调整连接追踪功能所能容纳的最大连接数
cat /proc/sys/net/nf_conntrack_max
定义了连接追踪的最大值,因此,建议按需调大此值
cat /proc/net/nf_conntrack
记录了当前追踪的所有连接
cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
超时时间 这个超时时间比较难定义 定义少了在用户访问时间挺长时就会给你自动断开,定义长了,有大量用户访问的网站将出现一些用户无法访问的迹象
因此state 是一把双刃剑,他能够对安全起更好的作用,但是对一些大流量的网站来说需要谨慎开启
法则:
1.对于进入状态为established都应该放行 ,即将状态为established的规则放置在input规则链中的第一个,只要是established的连接都可以直接放行,而后续规则则严格检查new状态的。但是后续的一些更严格的规则比如速率控制的规则将无法生效。所以应该对规则进行优化。
2.对于返回状态为established都应该放行
3.严格检查进入的状态为new的链接
4.所有状态为invalid都应该拒绝
规则优化的一些原则:以下原则有等级
1.将有更加严格要求的规则放在最前面
2.将一些频繁需要检查的规则合并,但同时最好也要修改一下prot即协议类型(如对input链established状态应该全部放行)
3.同一些协议的普通的 没有严格要求的协议应该合并
-j target
return:返回调用链
例如我自定义了一个链 iptables -t filter -n clean_in
在写好这个链的一些规则后,如 iptables -a clean_in -d 192.168.48.128 -p tcp --tcp-flags all all -j drop
对自定义的链进行返回 iptables -a clean_in -d 192.168.48.128 -j return
主链对自定义的链进行调用 iptables -a input -d 192.168.48.128 -j clean_in
如何放行工作与被动模式的ftp服务(因为ftp被动模式下的数据传输端口是随机的,除非自己特殊指定)
1、确保iptables加载ftp协议支持的模块,ip_nat_ftp,ip_conntrack_ftp
编辑/etc/syconfig/iftables-config文件,定义如下参数:
iptables_midules="ip_nat_ftp ip_conntrack_ftp"
2。放行请求报文的related和established状态,放行响应报文的established状态
iptables的nat
-m state:追踪连接状态
模板:内存中会维持一个空间
new
established
related
invalid
在前段的服务器中尽量不要开启追踪连接
iptables子命令
规则:-a,-i,-d,-r
链:-n,-x,-f,-z,-e,-p -s
通:默认 drop
堵:默认accept
显示:-l -s
-l
-n -v -x --line-numbers
规则定义:iptables -t table -a|-i|-r chain 匹配条件 -j target
匹配条件
通用匹配:-s -d -i -o -p
扩展匹配
隐含扩展
-p tcp
--sport --dport --tcp-flags
--syn
-p udp
--sport --dport
-p icmp
--icmp-type
echo-request 8
echo-reply 0
显示扩展:
-m state
--statr
-m multiport
--sprots --dports --ports
-m iprange
--src-range --dst-range
-m string
-algo {bm|kmp} --string --hex-string
-m connlimit
! --connlimit-above
-m limit
--limit n(/second|/minute|/hour|/day), --limit-burst
-m time
--datestart --datestop
--timestart -- timestop
--weekdays
-j
accept,drop,reject,log,redirect,snat,dnst,masquerade,mark,return,自定义
四表:raw mangle nat filte
五链:prerouting input foeward output postouting
iptables-save iptables-restore
主机防火墙:input output
网络防火墙:forward
路由:
地址属于内核,地址当前属于主机的都给予响应
路由:对linux主机而言,设定/proc/sys/net/ipv4/ip_forward的值为1,即为开启路由
iptables -a forward -s 172.16.0.0/16 -d 192.168.20.0/24 -p tcp --dport 22 -j accept
iptables -a forward -s 192.168.20.0/24 -d 172.16.0.0/16 -p tcp --dport 22 -j accept
iptables -a forward -m state --state established -j accept
iptables -a forward -d 192.168.20.12 -p tcp -m multiport 22,80 -m --state new -j accept
路由表的生成
静态:手动添加
动态:基于路由协议学习,rip2 ospf
nat:网络地址转换
a:10
b:172.16-172.31
iptables -a forward -s 172.16.0.0/16 -d 192.168.20.0/24 -p tcp --dport 22 -j accept
iptables -a forward -s 192.168.20.0/24 -d 172.16.0.0/16 -p tcp --dport 22 -j accept
iptables -a forward -m state --state established -j accept
iptables -a forward -d 192.168.20.12 -p tcp -m multiport 22,80 -m --state new -j accept
c:192.168.0-192.168.255
nat: 要注意nat技术和路由的区别 。nat技术是用于内网和外网的访问的,而路由主要实现的是地址转向
过载技术
basic nat:静态nat
napt:动态nat,网络地址端口转换
源地址转换:snat 用于内网主机访问互联网
目标地址转换:dnat
让互联网上主机访问本地内网上的某服务器上的服务
iptables基于snat和dnat这两个目标实现地址转换技术
-j snat --to-source sip
规则添加:postrouting链
iptables -t nat -a postrouting -s 192.168.0.0/16 -j snat --to-souer 192.168.48.128
-j masqueraade 动态获取 适用于主机的ip是动态分配的。缺点是性能降低
-j dnat --to-destination dip{:port}
支持端口映射
iptables -t nat -a prerouting -d 172.16.100.7 -p tcp --dport 80 -j dnat --to-destination 192.168.48.128
这边强调一下端口,端口意义是指向的某种服务。那么比如一个用户想要去访问本地内网上的某服务器上的http服务。这边假设用户主机为a 作为路由以及nat地址转换的主机为b 提供服务的主机为c。 我们应该访问主机b的ip地址加上不应该为80端口号的地址,因为若为80端口,那么意思将会是访问b主机的http服务,然后将ip转换时变为 c主机的ip号加80端口号。因此在b主机上应该将提供http服务的80端口和提供转向的端口22022做好区分
具体例子
iptables -t nat -a prerouting -d 192.168.48.128 -dport 22022 -j dnat --to-destination 192.168.48.129:22
所以:forward仅仅是做一个对地址路由过滤的作用,而nat是对地址进行转换的作用 对网络进行过滤的话应该在forward上就进行了
基于net表
prerouting
postroting
output
proxy(代理):
rsync
rsync:remote sync
cp scp(rsync不具备加密) rsync对文件夹之间会逐一比较是否有不同,若有不同或缺失则替换新文件。没有不同的文件则不理会。所以比较快速
rsync命令的工作模式
第一种:shell模式,也称作本地模式
第二种:远程shell模式,此时可以利用ssh协议承载其数据传输过程
第三种:列表模式,其工作方式与ls相似,仅列出源的内容:-nv
第四种:服务器模式,此时,rsync可以工作在守护进程,能够接收客户端的数据请求;在使用时,可以在客户端使用rsync命令把文件发送到守护进程,也可以像服务器请求获取文件
rsync有许多选项:
-n:测试,在不确定命令是否能按照意愿执行时,务必要实现测试
-v:详细输出模式,--verbose
-q:--quiet,静默模式
-c:--checksum,开启校验功能,强行对文件传输进行校验
-r:--recursive,递归复制
-a: --archives.归档,保留文件的原有属性
-p:--perms 保留文件的权限
-t: --times 保留文件的时间戳
-l:--links 保留文件的符号链接
-g:--group保留文件的属组
-o:--owner 保留文件的属主
-d:--devices 保留设备文件
-e ssh:表示使用ssh协议作为继承
-z:对文件压缩后传输
--progress:显示进度
注意:rsync命令使用中,如果源参数的末尾有斜线,只会复制指定目录的内容,而不复制目录本身,没有斜线,则会复制目录本身。包括目录
rsync -r /mydata/data /bachups/ 会把目录data直接同步至/bakups目录中
rsync -r /mydata/data/ /backups/:会把目录data/中的内容至/backups目录中
例子基于ssh协议将本地目录同步到目标主机: rsync -e ssh -r /etc root@192.168.48.129:/tmp/
同时也可以将目标主机的同步到本地rsync -e ssh -r root@192.168.48.129:/etc /tmp/
本地cp
rsync 源目录 目标地址
查看帮助 man rsyncd.conf
配置rsync以daemon的方式运行
1.设定rsync服务器端:
1)安装超级守护进程 xinetd
yum -y install xinetd
2)为rsync提供配置文件 具体的配置还得看官方文档
配置文件为/etc/rsync.conf
定义一个全局配置和多个rsync共享配置
#global settings
uid = nobody 以哪个用户去运行进程
gid = nobody
use chroot = no(是否禁锢用户家目录)
max connections = 10(最大连接数)
strict modes = yes(是否完全检查)
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
#directory to be synced
[synced_name]
path = /path/to/some_dir
ignore errors = yes(是否忽略错误)
read only = no(只读)
write only = no(只写)
hosts allow = white_list_ip/net 白名单
hosts deny = black_list_ip/net 黑名单
说明:
1.默认规则为允许访问,二者都不出现时
2.只出现hosts allow:定义白名单;但没有被匹配到的由默认规则处理,即为允许
3,只出现hosts deny:定义黑名单;出现在名单中的都被拒绝
4二者同时出现,先检查hosts allow,如果匹配就allow,否则,检查hosts deny 如果匹配则拒绝,如二者均无匹配,则使用默认的,即允许
list = false 是否允许列出名单
uid = root(以哪个用户去操作文件)
gid = root
auth users = username (允许的用户)
secrets file = /etc/rsync.passwd 用户密码的存放位置
3)配置密码文件/etc/rsync.passwd
username:password
文件权限要设置为600
4)配置服务能够启动
chkconfig rsync on
service xinetd start
监听与873/tcp
2.在客户端做测试
pull: rsync [option...] [user@]host::src... [dest]
rsync [option...] rsync://[user@]host[:port]/src... [dest]
push: rsync [option...] src... [user@]host::dest
rsync [option...] src... rsync://[user@]host[:port]/dest
rsync --password-file=/etc/rsyncd.passwd install.log myuser@172.16.100.7::mydata 将本地文件发送到服务端
rsync myuser@172.16.100.7::mydata/* /etc 但是将服务端文件同步到本机需要将服务端目录加个*
如果客户端本地提供了密码文件那么就不需要去输密码,而没有提供的话则每次都需要输相应的密码。
如果需要做周期性操作,定义crontab
nfs基于rpc
samba基于cifs(smb)
drbd:
ftp:file transfer protocol 文件传输协议
两个连接:
tcp:命令连接
tcp:数据连接 在被动模式下数据传输端口是随机的除非自己指定
主动模式:服务器端通过20端口主动连接客户端,
被动模式:客户端使用自己与服务器端建立连接。
默认情况下ftp协议使用tcp端口中的 20和21这两个端口其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与ftp使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
防火墙上连接追踪
数据要流式化
文本:文件流
二进制
c/s
server:
wu-ftpd(华盛顿大学的fdtp)
proftpd
pureftp
vsftpd very secure ftpd
iis
servu
client:
gui
windows
flashfxp
cuteftp
filezilla(开源)
linux
gftp
cli
ftp
lftp
wget
lftpget
用户认证:
系统用户
虚拟用户
hash file
mysql
匿名用户
数据传输安全
sftp:ssh提供的基于ssh协议的ftp
ftps:基于ssl的ftp
相应码:
1xx:信息码
2xx:成功状态码
3xx: 进一步提示补全信息的状态码
4xx:客户端错误,临时错误
5xx: 服务器端错误,永久性错误
安装vsftpd
/etc/pam.d/vsftpd:认证文件
pam:plugable authentication module 插件式认证模块
nsswith:名称解析框架
模块化:/lib64/linbnss*,/usr/lib64/libnss*
配置文件:/etc/nsswitch.com
pam:认证框架
模块化:/lib64/security/pam*.so
配置文件:/etc/pam.conf和/etc/pam.d/*
服务脚本:/etc/rc.d/init.d/vsftpd
配置文件:/etc/vsftp/vsftpd.conf
主程序文件:/usr/sbn/vsftpd
数据文件:/var/ftp
空闲顶格写:
等号前后没有空格
anonymous或ftp
对于ftp访问ftp服务器时应该对其chroot
禁锢用户与其家目录中
chroot_local_user={yes|no} 禁锢用户,默认为no
需要禁锢开启为yes,安全
chroot_list_enable={yes|no}
chroot_list_file=/etc/vsftp/chroot
不禁锢全部用户,将禁锢的用户保存在/etc/vsftp/chroot
每行一个用户
两项不能同时使用
local_enable={yes|no}是否需要本地用户登录
匿名用户的配置
anonymous_enable=yes,启动虚拟用户登录
anon_upload_enable=yes 允许虚拟用户有写权限
anon_other_write_enable=yes 允许虚拟用户有删除权限
anon_mkdir_write_enable=yes 允许虚拟用户创建文件夹权限
注意:启用写入功能时,ftp用户对相应的本地文件系统也有相应的写入权限;
生效的权限取决于文件系统权限和服务权限的交集
实现用户的欢迎信息login banners
ftpd_banner=
banner_file=banner文件
切换目录式的欢迎信息
dirmessage_enable=yes
在目录中创建.messages
vsftp控制登陆系统用户的机制
/etc/vsftpd/ftpusers中的用户不允许使用ftp服务器,这是在/etc/pam.d/vsftpd中定义的
user_list配置文件有两种用法
黑名单: 里面的无法登陆,不写在里面的可以登陆
userlist_enable=yes
uselist_deny=yes
白名单:里面的可以登陆,不写在里面的无法登陆
userlist_enable=yes
uselist_deny=no
连接限制
max_clients:最大并发连接数
max_per_ip:每ip可同时发起并发请求
传输速率:
anon_max_rete: 匿名用户的传输速率,单位为“字节/秒”
local_max_rate:本地用户传输速率,单位为“字节/秒”
上传文件的umask:
anno_umask:匿名用户上传文件的umask;
local_umask:
修改匿名用户上传文件的属主和属主
chown_uploads=yes
chown_username=用户名
实现虚拟用户:使用虚拟用户的原因是因为使用系统用户不安全,增删重要文件之类的。
所有的虚拟用户会映射成一个系统用户,访问时的文件目录是为此系统用户的家目录
虚拟用户
hash编码的文件:
奇数行为用户名,偶数行为密码
关系型数据库:
pam-mysql(第三方模块)实现认证
虚拟用户的权限
user_config_dir=文件夹
在文件夹中创建虚拟用户同名的的文件
在虚拟用户的文件中写入权限
总结:
ftp:命令和数据
ftp数据传输:文本和二进制
数据连接的工作模式:主动和被动
/etc/vsftpd
匿名用户的权限
本地用户的访问权限
本地用户禁锢于家目录
本地用户黑白名单
欢迎信息
上传的umask
上传文件的速率
上传文件的属主
最大并发连接数
虚拟用户
日志
nfs:network file system
v1
v2
v3
v4
为nfs提供监听的
2049/tcp
2049/udp
nis:nerwork infomction service
nis+
不完全兼容
kerberos
ldap
rpc:portmapper
监听
111/tcp
111/udp
各基于rpc提供的进程,在启动时要向rpc注册监听在某端口上,rpc会从各未使用的端口中挑选一个端口给此进程监听,即半随机
nfs:
安装配置:
nfs-utils
三个关键进程
moutnd 挂载守护进程,负责客户端来源认证进程
nfsd:文件读写
idmapd:id映射进程
/etc/exports,建议直接导出一个分区(即给nfs文件系统一个单独的分区会更好)
文件系统 客户端1(文件系统导出属性) 客户端2(文件系统导出属性)
文件系统
客户端:
ip:172.16.100.7
hostname: *.magedu.com
ip networks: 长短格式都可以
文件系统导出属性:
rw:读写
async:异步
sync:同步
root_squash:压缩root用户,基于imapd,将root通过网络访问时转换为nfsnobody用户
no_root_squash:不压缩用户
all_squash:压缩所有用户
anonuid,anongid:指定
showmount
-a 全部 在nfs服务器端显示所有的挂载会话
-d 文件 在服务器端执行,显示那个导出的文件系统被那些客户端挂载过
-e 共享,在客户端执行,探查某主机所导出的nfs文件系统,使用格式为showmount -e server_ip
exportfs导出nfs文件(可以不用重启服务,避免了如果重启服务正在传输一些文件的丢失)
-a:操作所有文件系统
-ra:重新导出所有文件系统
-ua:取消导出的所有文件系统
-v:显示详细信息
如果客户端要启用开机自动挂载nfs,挂载的设备为服务器端ip:/nfs文件系统名 ,但是如果服务器端需要导出nfs文件系统,那么就得再挂载选项里加入defaults,_netdev
保证其不会一直请求挂载。
nfs的辅助进程mountd等监听在固定端口上,可以通过在编辑/etc/sysconfig/nfs等参数来实现
samba:
smb:service message block smbd tcp:445
netbios:本地名称解析 nmbd udp:137 138 tcp:139
winbindd:window的绑定进程
注意:samba服务器的启动时 nmb 名称解析,和smb协议 都应该启动
ad(ldap)
active directory
dc
unc: \\server\shared
所谓的samba是因为windos间只支持smb协议之间进行进程调用,而linux间只支持rpc下的nfs所以为了两者能够通信,所以在linux上有人开发了samba支持两者之间的进程调用。
samba的用户:
1.系统用户
2,密码是独立的,非为/etc/shadow中的密码
使用smbpasswd -a 用户名 设置访问smb的密码
密码文件被加密后存在在一个特殊路径下,ls -a 也无法查看、
默认访问的是用户的家目录。 那么如何配置一个公共的共享目录提供访问。
smbclient:
检查服务器上的共享:
sambclient -l server -u username
以交互式模式连入服务器的某共享
smbclient //server/shared -u username
vim /etc/smb.comf
新建一个共享文件
[shared name] 共享名
comment= 鼠标悬停在文件夹上线显示的机械能系
path 共享文件夹路径
read only =
writeable =
browaeable =
public =
guset ok = 是否允许来宾账号访问。
write list = 可写用户列表
用户名:hadoop
用户组:@groupname,+groupname
测试配置文件语法错误,并显示最终生效的配置
testparm
挂载cifs文件系统
mount -t cifs //ip/shared /path/to/mount_point -o username=smbuser
推荐阅读
-
Linux学习笔记(十四)磁盘管理(二):格式化、挂载以及Swap分区
-
Linux计划任务Crontab学习笔记(5):常见错误使用案例
-
Linux计划任务Crontab学习笔记(3):配置文件
-
Linux学习笔记(十一)shell基础:管道符、通配符和其他特殊符号
-
Linux学习笔记(十)shell基础:历史命令、命令补全、输出重定向、输出重定向
-
Linux计划任务Crontab学习笔记(2):基本组成与配置
-
Linux计划任务Crontab学习笔记(4):crontab 的日志
-
linux NFS 学习笔记
-
Linux学习笔记01
-
Linux内核学习笔记(4)-- wait、waitpid、wait3 和 wait4