一:OpenSSH服务与Telnet服务
(必须掌握)css
(一)服务进程的类型介绍(了解)
服务进程有两种类型
(二)telnet命令(必须掌握)
CentOS 6上 telnet服务介绍
[root@dns2 ~]# telnet 192.168.23.4
Trying 192.168.23.4...
Connected to 192.168.23.4.
Escape character is '^]'.
CentOS release 6.6 (Final)
Kernel 2.6.32-504.el6.x86_64 on an x86_64
login: yhy
Password:
Last login: Sun Aug 20 02:40:41 from 192.168.23.11
[yhy@6 ~]$
CentOS 7上 telnet服务介绍
/usr/lib/systemd/system/telnet.socket 说明监听的只是一个端口
/usr/lib/systemd/system/telnet@.service
/usr/sbin/in.telnetd
/usr/share/man/man5/issue.net.5.gz
/usr/share/man/man8/in.telnetd.8.gz
/usr/share/man/man8/telnetd.8.gz
tcp6 0 0 :::23 :::* LISTEN 1/systemd
显示是systemd 帮助netstat监听的23端口注意:在客户端经过telnet登入远程的服务端不能使用root的帐号和密码登入,只能经过普通用户进行登入
telnet 192.168.23.12:23 指定某个端口登入,默认就是23号端口
(三)OpenSSH:Secure Shell
:安全的shell,ssh是一种协议,OpenSSH是ssh协议的实现 公钥加密
(数字签名和密钥交换)的方式进行的,确保服务器端的身份识别,经过对称密钥
确保传输的数据不被窃取 OpenSSH:ssh协议的开源实现
sshd
:服务端程序,ssh的daemon守护进程 ssh
:客户端程序 scp
:客户端程序sftp
:客户端程序(1)ssh客户端的使用
(必须掌握) ssh [选项] [用户名@]host [命令]
例如:ssh root@192.168.23.12 ifconfig
例如:ssh -l root 192.168.23.12 ifconfig 切换到root用户执行ifconfig命令
~/.ssh/id_dsa, ~/.ssh/id_ecdsa,
~/.ssh/id_ed25519 and ~/.ssh/id_rsa
为了不第一次登入其余主机的时候输入yes,修改StrictHostKeyChecking no便可
基于密钥
例如:ssh-keygen -t rsa -P ""
(很重要)将生成的密钥对中的公钥复制到远程主机的用户的家目录下的authorization_keys文件中
ssh-copy-id [-n] [-i [identity_file]] [-p port] [user@]hostname
例如:ssh-copy-id -i .ssh/id_rsa.pub root@192.168.23.12
ssh root@192.168.23.12
2:scp工具:secure copy 跨主机进行安全文件传输的工具(必须掌握)
PUSH : scp [options] 源文件路径 [user@]Hostname:目标文件路径
例如:scp /etc/fstab root@192.168.23.12:/root
PULL:scp [options] [user@]Hostname:Derection_file Source_file
例如:scp root@192.168.23.12:/root/fstab /root/fstab
3:ftp子系统:OpenSSH服务自带(须要会使用)
sftp root@192.168.23.10
登入192.168.23.10主机 get anaconda-ks.cfg
:表示从目标主机下载一个文件到当前主机sshd(服务器端)
UseDNS no
:禁止使用DNS分解主机名,须要修改成no(很是重要)限制可登入的用户
(1)不要使用默认的端口;修改方式
port 2222
(2)不要支持使用初版协议
protocal 2
(3)限制能够登入的用户
AllowUsers, AllowGroups
(4)设定空闲会话超时时长
(6)仅仅监听于指定的IP地址
ListenAddress
(7)基于口令认证时,使用强密码策略
openssl rand -base64 30
(8)最好基于密钥的认证
(9)禁止使用空密码
(10)禁止管理员直接登入
(11)限制ssh的访问频道和并发在线
(12)作好日志分析
二:FTP协议与vsftpd服务
(必须掌握)html
(一)FTP协议详解
21/tcp(监听链接请求) 20/tcp(传输数据)
linux
:ftp客户端 , lftp 客户端 用户名为:anonymous,密码为空便可
用户名为:yhy,密码为:123456
windows
:cuteftp, Filezilla,flashfxp(了解)注意:数据链接必然是经过某个命令链接发起的
用户分类
(必须掌握) ftp用户
或者 vsftp用户
,请求的资源应该在/var/ftp目录下,登入的时候不须要用户名和密码
系统用户和普通用户,登入的时候须要用户名和密码
不是系统/etc/passwd里面的用户,而是文件系统上某个目录的某个文件中指定的用户,或者是一些存储系统上的某个用户(也是映射到某个本地用户)
Openldap服务
(很是适合存储帐号和密码)注意:资源位于ftp服务器某个用户的家目录下,那么其实咱们访问资源就是访问某个用户家目录下的资源
vsftpd:很是安全的ftp服务端程序
(必须掌握) CentOS 6
CentOS 7
配置过程详解
匿名用户
是否容许匿名用户登入
是否容许匿名用户上传文件, 同时须要开启write_enable=yes
若是匿名用户要上传,必须是write_enable=YES,这是一个全局配置
使得匿名用户可以在有目录中有写权限的基础上可以建立目录
匿名用户的删除和重命名权限
本地用户
开放本地用户登入,而且全部的非匿名用户登入必须开启这个指令才能登入
指定本地用户上传权限的掩码
用户第一次进入目录时,.massage文件里面的信息会显示给用户,可使用message_file指定文件的路径,而不使用默认的.message,可是lftp程序没法看到消息提示,ftp程序能够
数据传输日志的相关日志
数据传输模式
修改匿名用户上传文件的属主
设定会话的超时时长
命令链接的监听端口
当匿名用户链接到ftp服务端是否显示banner信息,只有ftp客户端能够,lftp不行
设置链接及传输速率
禁锢本地用户
注意:要求用户不可以对家目录有写权限,若是具备写权限的话,那么本地用户登入ftp的时候就会链接拒绝了
(禁锢全部的本地用户和禁锢白名单不能同时开启)/etc/vsftpd/ftpusers
:指定哪些本地用户没法登入 userlist_enable
:是否开启本地用户登入认证 虚拟用户
(先给你们入门一下mysql数据库服务)mysql
基于db文件
基于mysql服务
linux
./configure --with-mysql=/usr --with-openssl=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
为了演示pam认证,将之前的/etc/vsftpd/vsftpd.conf还原ios
在mysql数据库上的操做写以下nginx
1:将mariadb的配置文件中加入
skip_name_resolve=on
innodb_file_per_table=on
2:先执行mysql_secure_installation命令,给root用户初始化,在启动mariadb
mysql_secure_installation
systemctl start mariadb.service
3:登入Mariadb,先建立一个vsftpd数据库,在建立一个vsftpd用户,
create database vsftpd;
use vsftpd;
grant all on *.* to vsftpd@'192.168.23.%' identified by '123456';
4:在vsftpd数据库中建立一张users表,用户虚拟用户的认证
create table users (id int auto_increment not null primary key, name varchar(30), password char(48)binary);
5:给表先插入值
insert into users(name,password) values ('tom', password('123456'));
insert into users(name,password) values ('yhy', password('123456'));
6:查看表
select * from users;
pam_service_name=vsftpd
,从新指定一个新的认证文件pam_service_name=vsftpd.mysql # 表示vsftpd的虚拟用户默认就是使用vsftpd.mysql文件进行的认证
# 第一行auth表示使用mysql进行虚拟用户的认证
auth required pam_mysql.so user=vsftpd passwd=123456 host=192.168.23.12 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
# 第二行使用account表示认证用户存在
account required pam_mysql.so user=vsftpd passwd=123456 host=192.168.23.12 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
# 使用/ftp/data做为虚拟用户的家目录,虚拟用户映射的系统用户为vuser
mkdir /ftp
useradd -s /sbin/nologin -d /ftp/data vuser
chmod go+rx /ftp/data
# 默认虚拟用户是被禁锢在家目录下的,所以不能对家目录有写权限
chmod -w /ftp/data
pam_service_name=vsftpd.mysql
指令上面添加# 实现虚拟用户到系统用户的映射关系
guest_enable=YES
guest_username=vuser
systemctl restart vsftpd.service
ftp> [root@nds1 ~]# ftp 192.168.23.12
Connected to 192.168.23.12 (192.168.23.12).
220 (vsFTPd 3.0.2)
Name (192.168.23.12:root): tom
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
# 使虚拟用户映射的vuser对upload具备写权限
mkdir /ftp/data/upload
chown vuser /ftp/data/upload
# 开启匿名用户上传功能, 编辑/etc/vsftpd/vsftpd.conf
anon_upload_enable=YES
使用ftp客户端进行测试:测试成功web
客户端使用lftp测试登入用户
算法
1:安装vsftpd
yum install -y vsftpd
2:客户端安装lftp
yum install -y lftp
3:在服务端建立一个用户yhy,密码为123456
useradd yhy
echo "123456" | passwd --stdin yhy
4:使用lftp登入
lftp -u yhy,123456 192.168.23.12
1:在服务端开启
anonymous_enable=yes
anon_upload_enable=yes
write_enable=yes
2: 在服务端修改/var/ftp目录的属主为ftp用户,使得匿名用户在此目录下有写权限
chmod ftp /var/ftp
在服务端开启
anon_mkdir_write_enable=YES
anon_other_write_enable=yes
三:NFS网络文件系统
(必须掌握)sql
yum install -y nfs-utils
启动NFS服务shell
service rpcbind start
service nfs start
systemctl start nfs.service
网络文件系统的机制
应用层对内核发起系统调用,内核的接口接受到系统调用的时候,并不在本地执行系统调用的代码,而是将这段代码经过网络发送给监听在另外一台主机上的套接字程序,使得这段代码在另外一台主机中的内核执行,并访问另外一台主机上的块设备,以后再将结果原路返回给发起网络请求的主机。
(1)服务端安装nfs-utils,服务端的程序名就叫nfs
(2)编辑/etc/exports文件,指定容许挂载共享文件系统的主机
通常每一行的格式为:共享目录 给哪一个网段共享(选项1 , 选项2)
/data 192.168.0.0/16(rw)
将本地的/data目录共享给192.168网段的主机挂载,而且有读写权限从新导出文件系统,让内核重读/etc/exports文件,不须要重启nfs服务
exportfs -r
(从新导出export list)showmount -e 192.168.10.202
mount -t nfs 192.168.10.202:/data /web/html
df -h
或 mount
setfacl -m u:archlinux:rwx /data
(若是archlinux的uid为2000)实战做业:
(1)nfs-server中导出/web/html ,客户端以此目录为其httpd服务的虚拟主机的根文档目录,并部署wordpress作测试
(2)nfs-server中导出/data目录,客户端以此目录为Mariadb的数据库目
四:rsync 远程同步工具
(必须掌握)
对比rsync命令与scp命令的优劣性
rsync有六种不一样的工做模式介绍
rsync grub.conf /data/
rsync -avz grub.conf root@192.168.23.12:/data
rsync -avz root@192.168.23.12:/data/grub.conf /tmp/
/usr/bin/rsync -avz --delete nfs@192.168.23.26::data /data/ --password-file=/etc/rsync.password
/usr/bin/rsync -avz --delete /data/ nfs@192.168.23.26::data --password-file=/etc/rsync.password
rsync命令格式
(一) Local: rsync [OPTION...] SRC... [DEST]
例如: rsync -avz /root/ /tmp/ # 将/root目录下的全部文件拷贝到/tmp目录下,默认是增量拷贝
例如: rsync -avz --delete /root/ /tmp/ # 增长--delete选项,指明在增量拷贝的基础上全量拷贝,也就是说/root目录下有的文件,/tmp目录下要有,/root目录下没有的文件,/tmp目录下要将文件删除。最后表现为/tmp目录的文件与/root目录的文件同样
(二)Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
例如:rsync -avz --delete -e "ssh -p 22" /tmp/ 192.168.23.26:/tmp # 经过ssh加密,使得192.168.23.26主机上的/tmp目录下的全部文件与本机的/tmp目录下的文件同样
说明: 如何是本地拉取的话,如命令格式所示,源地址与目标地址须要调换一下位置
(三)Access via rsync daemon:
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 -avz --delete /tmp/ rsync_backup@192.168.23.26::backup --password-file=/etc/rsync.password # 在daemon模式下,客户端将本地的/tmp目录下的全部文件推送到192.168.23.26主机的backup模块指定的目录中去
例如:rsync -avz --delete rsync_backup@192.168.23.26::backup --password-file=/etc/rsync.password /tmp/ # 这就是将远端的拉倒本地的/tmp目录下
重要选项介绍
-a: --archive 归档模式,表示以递归方式传输文件,并保持全部文件属性
-v: --verbose 详细模式输出
-r: --recursive 对子目录以递归模式处理
-z: --compress 对备份的文件在传输时进行压缩处理
--delete :无差别拷贝
--exclude=somefile 指定排除不须要传输的文件模式
rsync的启动方式分
1:以守护进程的方式启动
/usr/bin/rsync --daemon
2:托管给xinetd服务,由xinetd代为管理
编辑 /etc/xinetd.d/rsync文件
将disable = no改成disable = yes
重启xinetd服务
此时能够看到xinetd服务监听在873端口上
rsync服务端配置
(必须掌握)0:建立一个/data目录,用来指定接受rsync客户端推送的文件
mkdir /data
1:编辑/etc/rsyncd.conf主配置文件
# 指定访问本地共享目录的属主和属组,当客户端链接到服务端,那么进程就以这里指定的uid和gid运行
uid = rsync
gid = rsync
# 不由锢
use chroot = no
# 指定服务端最大并发链接数量
max connections = 2000
# 指定超时时长
timeout = 900
# 指定程序的pid路径
pid file = /var/run/rsyncd.pid
# 指定日志路径
log file = /var/log/rsyncd.log
# 指定文件系统锁路径
lock file = /var/run/rsyncd.lock
# 指定推送时出现错误忽略
ignore errors
# 指定客户端能够向服务端推送数据,所以必须是可读写
read only = false
# 关闭远程列表
list = false
# 指定容许链接rsync服务端的网络地址
hosts allow = 192.168.23.0/24
hosts deny = 0.0.0.0/32
# 启用虚拟用户(无需是系统用户),虚拟用户的意义在于用户名和密码认证
auth users = hello
# 指定用户名和密码的文件,这个文件里面的用户名就是auth users指定的用户名,而后给个密码就好
secrets file = /etc/rsync.password
#transfer logging = yes
#ignore nonreadable = yes
#dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# 指定一个模块,用来指定接受客户端推送的文件
[data]
path = /data
comment = shared remoted NFS directory /data
2:建立一个rsync, 设置/data目录的属主为rsync,建立虚拟用户和密码
useradd rsync -s /sbin/nologin -M # 在rsync服务端一个rsync用户,不能登入,不建立家目录
chown -R rsync /data # 修改/data目录的属主为rsync,这样rsyncd进程就可以向目录里面写数据
echo "hello:123456" > /etc/rsync.password # 因为在/etc/rsyncd.conf主配置文件中指定了客户端登入的用户名以及密钥文件路径,那么根据路径建立用户密码便可
chmod 600 /etc/rsync.password # 修改密码文件的权限,注意,这里的客户端和服务端的/etc/rsync.password文件的权限都须要修改,且文件的属主和属组都是root,由于没有禁锢root。
3:配置rsync服务配置进程文件/etc/sysconfig/rsyncd
OPTIONS="--address=192.168.23.12" # 将rsync服务监听到固定的IP地址上
rsync客户端配置
(必须掌握)1:建立同步时候使用的密钥文件
echo "123456" > /etc/rsync.password
2:修改密钥文件的权限为600
chmod 600 /etc/rsync.password
2:手动同步本地的/data/目录的全部文件到rsync服务端
/usr/bin/rsync -avz --delete /data/ hello@192.168.23.12::data --password-file=/etc/rsync.password
五:inotify 工具
(必须掌握)
Inotify是一种强大的、细粒度的、异步文件系统监控机制,它知足各类各样的文件监控须要,能够监控文件系统的访问属性、读写属性、权限属性、删除建立、移动等操做,也就是能够监控文件发生的一切变化。
inotifywait命令能够用来收集有关文件访问信息,Linux发行版通常没有包括这个命令,须要安装inotify-tools,这个命令还须要将inotify支持编译入Linux内核,好在大多数Linux发行版都在内核中启用了inotify。
inotifywait+rsync实现监控某目录于文件系统级别的任何变化
yum install -y inotify-tools
[root@dns3 ~]# rpm -ql inotify-tools
/usr/bin/inotifywait
/usr/bin/inotifywatch
/usr/lib64/libinotifytools.so.0
/usr/lib64/libinotifytools.so.0.4.1
/usr/share/doc/inotify-tools-3.14
/usr/share/doc/inotify-tools-3.14/AUTHORS
/usr/share/doc/inotify-tools-3.14/COPYING
/usr/share/doc/inotify-tools-3.14/ChangeLog
/usr/share/doc/inotify-tools-3.14/NEWS
/usr/share/doc/inotify-tools-3.14/README
/usr/share/man/man1/inotifywait.1.gz
/usr/share/man/man1/inotifywatch.1.gz
示例:
inotifywait -mrq --timefmt '%d/%m/%y/%H:%M' --format '%T %w %f' -e modify,delete,create,attrib /data
选项:
-m:表示持续监视变化。
-r:表示使用递归形式监视目录。
-q:表示减小冗余信息,只打印出须要的信息。
-e:表示指定要监视的事件列表。
--timefmt是指定时间的输出格式。
--format指定文件变化的详细信息。其中 %w:表示监听的目录,%f表示触发事件的文件
事件:
access 访问,读取文件。
modify 修改,文件内容被修改。
attrib 属性,文件元数据被修改。
move 移动,对文件进行移动操做。
create 建立,生成新文件
open 打开,对文件进行打开操做。
close 关闭,对文件进行关闭操做。
delete 删除,文件被删除。
写一个脚本
(1)在rsync的服务端有一个/data/用做rsync客户端的备份目录
(2)rsync客户端也存在一个/data/目录,且目录中有大量的数据库文件。使用inotifywait工具监听/data目录的变化,一旦/data/目录发生变化,当即调用rsync客户端工具实现/data/目录的无差别同步
(3)手动在rsync客户端的/data/目录中建立文件,看看rsync的客户端和服务端的/data/目录是否实时同步
(4)全部的搭建步骤使用脚本一键完成
六:Samba
(必须掌握)
为了实现Windows主机与Linux服务器之间的资源共享,Linux操做系统提供了Samba服务,Samba服务为两种不一样的操做系统架起了一座桥梁,使Linux系统和Windows系统之间可以实现文件系统通讯共享
Server Message Block 它能被用于Web链接和客户端与服务器之间的信息沟通
Common Internet File System 它使程序能够访问远程Internet计算机上的文件并要求此计算机提供服务,CIFS能够看作是应用程序协议如文件传输协议和超文本传输协议的一个实现
yum install -y samba
smbd:实现文件系统服务,若是是给windows主机提供共享服务,那么nmbd和smbd都须要启动,若是只给linux提供服务,那么只须要启动smbd就行
1:service smb start
2:service nmb start
1:systemctl start smb.service
2:systemctl start nmb.service
mount -t cifs 远端IP地址:/data /mnt
能够直接提供挂载,所以就不须要交互式工具smbclient了/etc/samba/smb.conf
全局配置
保留默认配置无需修改 共享配置
[共享名称]:此名称即为共享服务名称
comment:注释信息
path:共享的文件系统的路径
browseable:是否可以被全部用户看到
writable:是否可写 指明全部的用户都用写权限
read only:是否为只读
public:是不是公开的服务
guest ok:是否容许来宾帐号访问
writelist:可写用户或组列表 仅仅只有指定的用户或组内的用户有写权限,不能和writable同时使用。例如:
writelist=用户名
writelist=@组
可用的宏列表
(能够写在comment里面,做为变量替换) [data]
comment = data %H
path = /data
guest ok = Yes
write list = @uplooking
read only = no
# 客户端查看的时候,能够查看到宏替换的yhy的家目录
smbclient -L 192.168.23.12/data -U yhy
Samba提供一个ftp匿名用户能够访问共享目录
1:编辑/etc/samba/samba.conf配置文件
[ftp]
comment = ftp share
path = /var/ftp
guest ok = Yes
2:语法检查
testparm /etc/samba/smb.conf
3:从新启动Samba服务
systemctl reload smb.service
访问Samba共享
# 不要输入密码,输入密码就错误了
smbclient //192.168.23.12/ftp
将系统用户添加Samba密码,成为samba用户
useradd gentoo
smbpasswd -a gentoo
交互式访问共享目录方式
查看共享目录
smbclient -L 192.168.23.12 -U yhy
登入共享目录
smbclient //192.168.23.12/mysqldata -U yhy
客户端的挂载访问方式
mount -t cifs -o username=yhy,password=123456 //192.168.23.12/mysqldata /mydata/data
其中:cifs为文件系统的类型、-o表示挂载选项、yhy为本地用户,密码为123456, mysqldata为Samba服务端的共享目录、/mydata/data为客户端的挂载点注意服务端的mysqldata共享目录的对应于服务端的文件系统的路径再samba.conf文件中定义了
将系统用户添加为Samba用户
smbpasswd [选项] 用户名
访问Samba共享
pdbedit命令
(了解)
pdbedit -L
:查看samba已经添加的用户pdbedit -L -v
:查看samba已经添加的用户的详细信息pdbedit -a -u hadoop
:将hadoop添加为samba用户smbstatus命令(了解)
实战演练1
(必须掌握)
需求:在Samba服务端建立一个/ftp/data共享目录,且让centos和geetoo用户可读可写。在Samba客户端挂载这个共享目录,挂载点为也为/ftp/data。挂载完毕后,在挂载点测试建立文件和删除文件
(一):在samba的服务端设置
(1)先在本地文件系统上建立目录
mkdir -pv /ftp/data
(2)编辑samba的主配置文件/etc/samba/smb.conf 添加共享目录data
[data]
comment = ftp data
path = /ftp/data
write list = centos,gentoo
public = no
(3)建立本地登入用户centos 和 gentoo
useradd centos
useradd geetoo
(4)将centos用户和gentoo用户设置samba密码
smbpasswd -a centos
smbpasswd -a geetoo
(5)给共享目录映射的文件系统设置读写权限
setfacl -m u:centos:wrx /ftp/data/
setfacl -m u:gentoo:wrx /ftp/data/
(6)检查主配置文件语法,并查看配置信息
testparm
(二)在samba的客户端设置(192.168.23.11)
(1)查看共享目录
smbclient -L 192.168.23.12 -U centos
(2)访问共享目录
smbclient //192.168.23.12/data -U centos 看看用户是否有读写权限
(3)建立本地文件系统的挂载点
mkdir /ftp/data -pv
(4)挂载samba服务端的共享目录
mount -t cifs -o username=centos,password=123456 //192.168.23.12/data /ftp/data
实战演练2
(必须掌握) 建立一个/data目录,使得/data目录被Samba共享,且建立一个系统组为uplooking组,让uplooking组在/data目录具备可写权限,再建立一个普通用户yhy,yhy属于uplooking组,且被添加到Samba用户中
1: 建立组和用户,将yhy用户添加到Samba用户里
useradd yhy
groupadd uplooking
usermod -aG uplooking yhy
smbpasswd -a yhy
2:建立共享目录,编辑/etc/samba/smb.conf文件添加
[data]
comment = data share
path = /data
guest ok = Yes
read only = No
write list = @uplooking
3:建立共享目录,设置yhy具备写权限
mkdir /data
setfacl -m user:yhy:rwx /data
4:使用yhy用户登入
smbclient //192.168.23.12/data -U yhy
# 上传
put yhy100
# 下载
get yhy100
实战练习