远程访问控制与rsync
一、ssh远程登录
-
SSH原理
C/S架构,监听端口tcp协议22号端口,所有数据加密传输,登录时认证方式有密码和秘钥对,它是telnet的替代软件。 -
linux系统中的openssh软件提供ssh的服务,支持ssh协议(远程登录),sftp(安全ftp),scp(远程拷贝数据)
-
ssh在linux系统一般默认已经安装,可直接使用:
-
linux的ssh客户端程序用法
- 远程登录:ssh 用户@服务端ip地址
- 远程拷贝:
scp 用户@服务端ip地址:目标目录/文件 本地目录
scp 本地文件 用户@服务端ip地址:目标目录/文件 - 远程ftp:
sftp 用户@服务端ip地址
-
注:若服务端更改了ssh协议的默认端口号,那么则使用ssh、scp命令式需要指定-p服务端的端口号
-
-
windows的客户端
- xmanager:收费的ssh远程管理套件,提供xftp、ssh、远程linux桌面功能
- CRT:提供远程ssh的管理
- putty:远程登录工具
- winscp:远程拷贝,linux和windows之间数据传输
-
优化ssh的服务端配置
vi /etc/ssh/sshd_config
Port 22 ##指明端口号
ListenAddress 192.168.100.101 ##指定监听的ip地址
PermitRootLogin no ##禁用root登陆
GSSAPIAuthentication no ##禁用GSSAPI的认证,使用密钥或密码认证,加快登陆速度
GSSAPICleanupCredentials no ##同上
UsePAM no ##禁用PAM认证,增加速度
UseDNS no ##禁止将IP逆向解析为主机名,加快解析速度
ClientAliveCountMax 3 ##探测3次客户端是否为空闲会话,↓3*10分钟后断开连接
ClientAliveInterval 10 ##空闲会话时长,每10分钟探测一次
AllowUsers admin ##明确指定登陆用户,多个用户用空格隔开
PubkeyAuthentication yes ##使用公钥认证,推荐使用安全高效!
PermitEmptyPasswords no ##不允许空密码登录,这个太危险啦。
PrintLastLog no ##不打印最后登陆信息,减少恶意登陆者获取的信息量,防止被恶意利用。
TCPKeepAlive yes ##保持长连接,加快连接速度,优化性能
-
ssh的秘钥对方式验证登录
- 秘钥对必须在客户端上生成,拷贝共要到服务端对应的目录下。注:客户端用户必须要有私钥,服务端用户必须要有公钥。
- 配置
ssh-keygen-t rsa #客户端创建秘钥对,一路回车,秘钥对存放在~/.ssh目录中,id_rsa为私钥,id_rsa.pub为公钥 ssh-copy-id root@ip地址 #上传公钥到目标主机中(必须使用22号端口),且导入到目标主机的用户家目录中,~/.ssh/authorized_keys文件中,如若上传失败,使用scp进行拷贝并导入:scp .ssh/id_rsa.pub 用户@目标主机ip地址 ssh root@ip地址 #验证不需要密码可直接进行登录 注:同一台客户端实现无密码登录服务器的多个用户时,只需将公钥上传至服务端的多个用户的家目录下即可;
二、Tcpwrapper访问控制
- 原理
通过libwrapper.so或者tcpd程序来实现对一些缺乏自身安全机制的服务进行保护,通过/etc/hosts.deny或/etc/hosts.allow两个文件来进行控制; - 匹配流程
先hosts.allow允许,后hosts.deny拒绝,如果没有明确拒绝,则允许; - 查看服务是否支持tcpwrapper
ldd $(which 服务主程序)|grep wrap #若有输出则代表支持,无输出则不支持
- 配置tcpwrapper
/etc/hosts.deny或/etc/hosts.allow的语法规则(允许优先)
程序: 客户端地址[选项]
程序:必须是支持tcpwrapper的程序,如sshd、vsftpd、telnet等,也可以使用ALL表示所有支持tcpwrapper的程序,多个服务以逗号隔开;
客户端地址:可以为ip、FQDN、域名、网段(192.168.)、ALL表示所有客户端地址,多个ip以逗号隔开、LOCAL代表本机地址;
常用的选项:spawn(调用其他命令);
- 实例
vi /etc/hosts.deny
sshd:192.168.100.1
vsftpd:ALL : spawn echo "1" >> /var/log/telnet.log
vi /etc/hosts.allow
vsftpd:all EXCEPT 192.168.100.102/255.255.255.0:deny
三、rsync远程同步
-
rsync(rsync快速异地备份工具)的功能
支持增量备份:可在不同主机之间同步数据;同步过程可以保持权限,连接且压缩传输,适合做镜像服务器; -
rsync的角色;
- 发起端:使用rsync的主机;
- 备份源:响应发起端的主机;
-
rsync同步方向:
- 上行同步
上传,数据在发起端,备份源提供目录,远程用户必须对备份源目录拥有写入权限,发起端登录的用户必须要对数据用户读取权限; - 下行同步
下载,数据灾备份院上,发起端提供目录,发起端登陆的用户必须对目录用户写入权限,远程用户必须对备份源的数据有读取权限;
- 上行同步
-
语法
rsync 选项 原始位置 目标位置
常用选项:-a 归档模式、保留文件权限、时间、链接、归属、特殊文件
-v 输出详细信息
-z 压缩传输
-H 保持硬链接
-r 递归模式,递归子文件及子文件夹
--delete 删除目标目录有,原始位置没有的文件
常用选项组合:-av -avzH --delete
-
本地复制文件语法:rsync -av /源文件 /目标目录/
注:当源文件为例/tmp时,那么将复制tmp整个目录及目录下的文件;
当源文件为例/tmp/时,那么将复制tmp目录下的所有文件,不包含tmp目录本身;
可同时复制多个文件,中间用空格隔开; -
清空本地目录语法
rsync -av --delete /空目录/ /目标目录/
注:删除目标目录有,空目录中没有的目标目录中的文件,空目录可以自己创建,则此就达到了删除的目的;
- 远程复制文件语法
上行同步:rsync -avzH 本地数据 用户@备份源ip地址:备份目录
下行同步:rsync -avzH 用户@备份源ip地址:备份目录 本地备份目录
四、rsync和inotify实时同步
- inotify作用:内核模块,监控文件和目录的变化,通过inotify-tools工具提供inotify-wait(持续监控)和inotify-watch(短期监控)两个模块进行监控;
- 优化内核参数:
max_queued_events #最大的时间列队
max_user_instances #最大的实例
max_user_watchs #最大的监控文件数量 -
案例:上行同步
- 安装inotify-tools,发起端192.168.100.101
[root@localhost ~]# tar zxvf inotify-tools-*.tar.gz -C /usr/src/ [root@localhost ~]# cd /usr/src/inotify-tools-*/ [root@localhost ~]# ./configure &&make &&make install [root@localhost ~]# ls /usr/local/bin/inotify*
- inotify的使用:发起端192.168.100.101
[root@localhost ~]# vi /etc/sysctl.conf fs.inotify.max_queued_events = 16384 ##监控事件队列数 fs.inotify.max_user_instances = 1024 ##监控实例数 fs.inotify.max_user_watches = 1048576 ##监控的文件数量 [root@localhost ~]# sysctl -p
- 测试inotify命令;发起端192.168.100.101
[root@localhost ~]# mkdir /root/data [root@localhost ~]# inotifywait -mrq -e modify,create,attrib,move,delete /root/data 选项注解:-m持续监控,r递归目录,q简化输出,-e指定监控事件:modify修改、create创建、attrib权限修改、move移动、delete删除;在其他终端操作文件,查看变化
- 编写脚本:发起端192.168.100.101
[root@localhost ~]# vi /root/rsync_inotify.sh ##实时同步脚本 #!/bin/bash RSYNC="rsync -avzH /root/data/ root@192.168.100.102:/tmp/ --delete" INT_CMD="inotifywait -mrq -e modify,create,move,delete,attrib /root/data/" $INT_CMD |while read DIRECOTRY EVENT FILE;do $RSYNC done [root@localhost ~]# chmod +x rsync_inotify.sh [root@localhost ~]# /root/rsync_inotify.sh & ##启动脚本
- 生成密钥对;发起端192.168.100.101
[root@localhost ~]# ssh-keygen -t rsa [root@localhost ~]# ssh-copy-id root@192.168.100.102
- 测试验证,发起端创建测试文件。发起端192.168.100.101
[root@localhost ~]# cd /root/data [root@localhost ~]# touch 1.txt
- 备份源验证文件是否同步;备份端192.168.100.102
[root@localhost ~]# ls /tmp/
vsftpd文件传输
一、ftp协议及原理
- ftp文件传输协议:是C/S结构应用,监听的控制端口是tcp协议的20、21号端口。
-
ftp的连接模式(传输模式):ftp连接的过程:先建立控制连接 --- 传输连接--- 传输数据
- 主动模式:服务端21号端口主动发起控制连接,客户端使用大于1023号端口响应,建立连接后,使用20号端口传输数据,适用于客户端未开启防火墙的环境。
- 被动模式:服务端21号端口被动等待数据连接,客户端使用大于1023号端口进行请求,建立连接后,使用服务器提供被动模式的非20号端口大于1023号端口进行传输数据,适用于客户端开启防火墙的环境。比较常用的模式。
-
ftp的传输方式:ftp客户端自动选择的,无需设置。
- 文本模式:ASCII,没过信息交换标准码,用于文本传输。
- 二进制模式:binary,传输效率高,常用来传输非文本文件,比较常用。
-
ftp的用户类型
- 匿名用户:(anonymous/密码空、ftp/ftp);
- 本地用户:本机的系统用户账号,除匿名用户外;
- 虚拟用户:位于独立文件中的FTP用户账号,用过这种虚拟用户,未提供安全的服务,将ftp服务于linux系统的关联将至最低;
- ftp服务端软件:IIS/Ser-U/vsftpd;
二、vsftpd的配置文件
- 用户列表文件
/etc/vsftpd/ftpusers(禁止登录ftp的用户、黑名单);
/etc/vsftpd/user_list(如果主配置文件中设置了userlist_enable=YES,那么此文件方可生效,若userlist_deny=YES,则仅禁止此列表中用户登录;若userlist_dengy=NO,那么表示仅允许文件中的用户登录ftp) - 主配置文件:/etc/vsftpd/vsftpd.conf
配置项:使用命令man 5 vsftpd.conf查看配置项帮助。
三、配置匿名ftp
系统类型 | IP地址 | 主机名 | 所需软件 |
---|---|---|---|
Centos7.8 | 192.168.100.101 | localhost | vsftpd |
- 安装vsftpd软件程序
[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
listen=YES #开启监听
listen_ipv6=NO #禁用ipv6监听
[root@localhost ~]# systemctl start vsftpd.service
[root@localhost ~]# netstat -utpln |grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1384/vsftpd
配置文件中不要加注释,容易报错起不来服务
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
:%g/^#/d #删除多余注释行
anonymous_enable=YES #允许匿名访问
local_enable=NO #不允许本地系统用户访问
write_enable=YES #允许写入权限
local_umask=022 #本地用户上传文件的默认权限掩码
anon_umask=022 #匿名用户上传文件的默认权限掩码
#新添加
anon_upload_enable=YES #允许匿名用户上传文件
anon_mkdir_write_enable=YES #允许匿名用户创建或上传目录
anon_other_write_enable=YES #允许匿名用户有其他写入权限,比如重命名、删除、覆盖等
dirmessage_enable=YES #允许显示用户切换目录时显示.message文件(如果存在的话)
xferlog_enable=YES #启用xferlog日志,默认记录到/var/log/xferlog
connect_from_port_20=YES #允许服务器主动模式
xferlog_std_format=YES #允许标准xferlog日志模式
listen=YES #允许独立运行的ipv4方式监听服务
listen_ipv6=NO #拒绝独立运行的ipv6方式监听服务
pam_service_name=vsftpd #设置用于用户认证的PAM文件位置,在/etc/pam.d目录中对应的文件名
userlist_enable=NO #禁用user_list用户列表文件
tcp_wrappers=YES #启用tcpwrapper主机访问控制
[root@localhost ~]# systemctl restart vsftpd.service
[root@localhost ~]# ls -ld /var/ftp/ #匿名认证的根目录权限不可以更改,必须为755
drwxr-xr-x 3 root root 17 8月 7 22:05 /var/ftp/
[root@localhost ~]# ls -ld /var/ftp/pub/
drwxr-xr-x 2 root root 6 8月 3 2017 /var/ftp/pub/
[root@localhost ~]# chmod 777 /var/ftp/pub/
[root@localhost ~]# mkdir /var/ftp/linux
[root@localhost ~]# chmod 777 /var/ftp/linu
[root@localhost ~]# grep 022 /etc/vsftpd/vsftpd.conf
anon_umask=022
- 调整ftp服务器配置,实现本地用户认证共享;
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES #开启本地认证
write_enable=YES
local_umask=077 #本地用户上传文件反掩码
local_root=/opt/www #本地认证的根目录
chroot_local_user=YES #将本地用户禁锢在根目录中
anon_umask=077
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES #开启user_list文件
userlist_deny=YES #指定user_list文件为黑名单,NO为白名单
one_process_model=NO #关闭一个连接对应一个进程,减少服务器资源
tcp_wrappers=YES
- 创建本地用户认证的ftp根目录;
[root@localhost ~]# mkdir /opt/www
[root@localhost ~]# chmod 777 /opt/www
[root@localhost ~]# touch /opt/www/test.txt
- 创建本地用户u01和u02;
[root@localhost ~]# useradd u01
[root@localhost ~]# useradd u02
[root@localhost ~]# passwd u01
[root@localhost ~]# passwd u02
samba文件共享服务
1.了解samba服务
- 概念
实现windows和linux系统之间smb协议的一款开源软件,是c/s架构。 - SMB(服务消息块协议):是一种在局域网上共享文件和打印机的通信协议,提供不同系统之间共享文件或打印机。
- NetBios(网络基本输入输出系统协议):负责数据传输过程中的主机解析。
- CIFS(通用网络文件系统):CIFS是针对Microsoft Windows操作系统的本地网络文件系统。Linux系统可以挂在和访问CIFS文件共享,如同常见的网络文件系统一样。
- samba的作用:共享文件和打印机,支持linux加入到windows的AD中;是想linux和windows之间的访问。
- 实现原理:samba服务功能强大,这与其通信基于SMB协议有关。SMB不仅提供目录和打印机共享,还支持认证、权限设置。在早起,SMB运行于NBT协议(NetBIOS overTCP/IP)上,使用UDP协议的137、138及TCP 的445端口,后期SMB经过开发,可以直接运行于TCP/IP协议上,没有额外的NBT层,使用TCP的协议445端口。
2. smaba软件包的组成
-
samba软件组成:
- samba-common(公共组件)
- samba-client(客户端)
- samba(主程序)
- samba-winbind(允许unix系统利用windowAD的用户信息)
-
samba服务的程序组件
- smb:提供共享访问,管理文件传输,端口tcp139号(smb协议)、tcp445号(cifs协议)
- nmb:负责NetBIOS协议(负责跨平台实现共享)解析,端口UDP137、138
- 理解samba的主配置文件/etc/samba/smb.conf
主配置文件的格式:-
表示注释
- ;表示配置的样例
- [global]全局设置
- [homes]家目录共享设置
- [printers]打印机共享设置
-
3.搭建samba的匿名和认证的共享
- 安装samba:推荐使用yum安装
- 修改配置文件smb.conf主配置文件,根据需求进行修改;smbusers共享账号的别名文件;一个用户可以映射多个名称;
- 管理samba用户:
pdbedit -a -u 用户 #添加系统用户到smb用户
pdbedit -x -u 用户 #删除系统用户在smb用户
pdbedit -L #查看系统用户在smb用户
- 启动服务
systemctl start smb.service #启动共享
systemctl start nmb.service #启动NetBIOS服务
4.samba服务的访问
- smbclient:
yum -y install samba-client #安装软件包
smbclient -L ip地址 -U 用户 #列出共享
smbclient -U 用户 //ip地址/共享名 #访问匿名共享时,不需要指定-U
- mount
yum -y install cifs-utiles #安装cifs工具
mount -o username=用户名 //ip/共享名 /挂载点 #访问认证共享
mount -o username=* //ip/共享名 /挂载点 #访问匿名共享
-
windows客户端共享的原理
net share ##管理本地共享
net use ##管理共享映射
net use 共享路径 /delete ##删除共享缓存
inetcpl.cpl ##打开inet选项,删除访问记录
5.搭建samba文件共享服务
smb共享实现linux和windows间共享
- 安装samba软件
[root@localhost ~]# yum -y install samba
[root@localhost ~]#
[root@localhost ~]# vi /etc/samba/smb.conf ##删除注释:%g /^#/d 删除空行:%g/^$/d 删除样例行:%g /^;/d 删除多余空行;修改如下:
[global]
workgroup = MYGROUP ##指定服务器所在的工作组
server string = Samba Server Version %v ##服务器的描述
log file = /var/log/samba/log.%m ##日志文件
max log size = 50 ##最大日志大小
security = user ##用户认证的共享,将share改为user
passdb backend = tdbsam ##服务用户后台类型
load printers = yes ##是否共享打印机
cups options = raw ##设置共享打印机类型
[public]
comment = Public Stuff ##描述
path = /opt/share ##设置共享的路径
public = no ##共享非公开
writable = no ##默认不可以写
valid users = u01, u02 ##允许访问的用户
write list = u01 ##有写入权限的用户
[root@localhost ~]# testparm ##测试配置是否有误
创建用户
[root@localhost ~]# useradd u01
[root@localhost ~]# useradd u02
[root@localhost ~]# pdbedit -a u01
new password: #设置密码
[root@localhost ~]# pdbedit -a u02
[root@localhost ~]# pdbedit -L #查看smb用户
u01:1000:
u02:1001:
window主机测试
\ \192.168.100.101
登陆用户名密码测试读取写入权限
cmd中net use 查看保存的链接信息
net use * /del 删除保存的连接信息
再次访问\ \192.168.100.150测试另外用户
linux:客户机必须配置ip,能够与samba服务器处于同一网络
[root@localhost ~]#mount -o username=u01 //192.168.100.101/public /mnt
[root@localhost ~]#cd /mnt
[root@localhost ~]#touch b.file
[root@localhost ~]#ls
第二种方式:
[root@localhost ~]#smbclient -U u02 //192.168.100.101/public
基础网络管理
一、查看基本网络参数
- 查看网卡的IP地址、掩码地址、MAC地址及启用禁用网卡:
ifconfig #查看主机中已经启动的网卡信息
ip a #查看主机中所有的网卡信息
ifup 网卡名 #开启此网卡
ifdown 网卡名 #禁用此网卡
- 查看主机的dns地址,作用:将域名和ip地址进行互相解析
cat /etc/resolv.conf
cat /etc/hosts
- 测试网络
ping -c 4 ip地址 ##允许主机ping此地址4个包
traceroute ip地址 ##查看此数据包经过了哪些网络节点
nslookup 域名或ip地址 ##解析域名或地址
netstat -utpln ##查看主机端口使用状态
netstat -utplna ##查看主机所有的连接信息
lsof ##查看主机打开的所有文件信息
lsof -i tcp ##查看主机的所有的tcp连接信息
lsof -i tcp:22 ##查看主机的所有的ssh服务相关连接信息
lsof -u root ##查看该用户的所有进程
lsof -p 进程号 ##查看该进程所打开的文件信息