openssh rpm软件包制作
openssh rpm软件包制作
#备份
[root@localhost ~]# cp /etc/pam.d/sshd /etc/pam.d/sshd-bak
[root@localhost ~]# cp -r /etc/pam.d/system-auth /etc/pam.d/system-auth-bak
[root@localhost ~]# cp -r /etc/ssh/sshd_config /etc/ssh/sshd_config-bak
[root@localhost ~]# cp -r /etc/ssh/ssh_config /etc/ssh/ssh_config-bak
#创建制作路径
[root@localhost ~]# mkdir -p /root/rpmbuild/{SOURCES,SPECS}
[root@localhost ~]# cd /root/rpmbuild/SOURCES
#下载制作包
[root@localhost SOURCES]# wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f7eaa8543a2440454637f3c3/x11-ssh-askpass-1.2.4.1.tar.gz
[root@localhost SOURCES]# wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz
#安装所需依赖
[root@localhost ~]# yum install rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel xmkmf libXt-devel gtk2-devel make -y
#解压,指定解压出文件
[root@localhost SOURCES]# tar xf openssh-9.0p1.tar.gz openssh-9.0p1/contrib/redhat/openssh.spec
#复制官方提供的spec文件,rpm-build需要根据这个文件来制作rpm包
[root@localhost SOURCES]# cp openssh-9.0p1/contrib/redhat/openssh.spec ../SPECS/
#备份文件
[root@localhost SOURCES]# cp /root/rpmbuild/SPECS/openssh.spec /root/rpmbuild/SPECS/openssh.spec_bak
#关掉no_gnome_askpass no_x11_askpass这两个参数
[root@localhost SOURCES]# sed -i -e "s/%define no_gnome_askpass 0/%define no_gnome_askpass 1/g" /root/rpmbuild/SPECS/openssh.spec
[root@localhost SOURCES]# sed -i -e "s/%define no_x11_askpass 0/%define no_x11_askpass 1/g" /root/rpmbuild/SPECS/openssh.spec
#避免制作过程遇见以下错误,建议先注释
[root@localhost SOURCES]# cd /root/rpmbuild/SPECS/
[root@localhost SPECS]# vim openssh.spec
#BuildRequires: openssl-devel < 1.1 #大约在103行左右,将这行注释
#开始制作
[root@localhost SPECS]# rpmbuild -ba openssh.spec
...
检查未打包文件:/usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/openssh-9.0p1-1.el7.centos.x86_64
写道:/root/rpmbuild/SRPMS/openssh-9.0p1-1.el7.centos.src.rpm
写道:/root/rpmbuild/RPMS/x86_64/openssh-9.0p1-1.el7.centos.x86_64.rpm
写道:/root/rpmbuild/RPMS/x86_64/openssh-clients-9.0p1-1.el7.centos.x86_64.rpm
写道:/root/rpmbuild/RPMS/x86_64/openssh-server-9.0p1-1.el7.centos.x86_64.rpm
写道:/root/rpmbuild/RPMS/x86_64/openssh-askpass-9.0p1-1.el7.centos.x86_64.rpm
写道:/root/rpmbuild/RPMS/x86_64/openssh-askpass-gnome-9.0p1-1.el7.centos.x86_64.rpm
写道:/root/rpmbuild/RPMS/x86_64/openssh-debuginfo-9.0p1-1.el7.centos.x86_64.rpm
执行(%clean): /bin/sh -e /var/tmp/rpm-tmp.n0ooAt
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd openssh-9.0p1
+ rm -rf /root/rpmbuild/BUILDROOT/openssh-9.0p1-1.el7.centos.x86_64
+ exit 0
[root@localhost x86_64]# pwd
/root/rpmbuild/RPMS/x86_64
[root@localhost x86_64]# ll
总用量 5004
-rw-r--r-- 1 root root 665932 8月 9 14:44 openssh-9.0p1-1.el7.centos.x86_64.rpm
-rw-r--r-- 1 root root 44492 8月 9 14:44 openssh-askpass-9.0p1-1.el7.centos.x86_64.rpm
-rw-r--r-- 1 root root 25760 8月 9 14:44 openssh-askpass-gnome-9.0p1-1.el7.centos.x86_64.rpm
-rw-r--r-- 1 root root 655372 8月 9 14:44 openssh-clients-9.0p1-1.el7.centos.x86_64.rpm
-rw-r--r-- 1 root root 3252592 8月 9 14:44 openssh-debuginfo-9.0p1-1.el7.centos.x86_64.rpm
-rw-r--r-- 1 root root 465284 8月 9 14:44 openssh-server-9.0p1-1.el7.centos.x86_64.rpm
#拿出需要的
openssh-9.0p1-1.el7.centos.x86_64.rpm
openssh-clients-9.0p1-1.el7.centos.x86_64.rpm
openssh-server-9.0p1-1.el7.centos.x86_64.rpm
安装后需要修改
#删除/etc/ssh/ssh*key,或者直接重启生成这些文件,或者手动生成
[root@localhost ~]# rm -f /etc/ssh/ssh*key
[root@localhost ~]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
[root@localhost ~]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
[root@localhost ~]# ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
[root@localhost ~]# ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
#允许root直接登录
[root@localhost ~]# echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
[root@localhost ~]# systemctl restart sshd
- 遇见问题
1.如果重启后发现账号密码都对但是就是无法登录的请还原/etc/pam.d/sshd文件
[root@localhost ~]# mv /etc/pam.d/sshd /etc/pam.d/sshd-bak2
[root@localhost ~]# mv /etc/pam.d/sshd-bak /etc/pam.d/sshd
2.重启失败
#更新key秘钥对权限
[root@localhost ~]# chmod 400 ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key
[root@localhost ~]# systemctl restart sshd
远程访问控制与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
openssh升级
1.安装步骤
- 安装pam-devel依赖包
- 系统/etc/ssh/sshd_config 这个文件提前放到了/servyou/install/ssh_update下,把之前的换掉
- mkdir -p /servyou/install/ssh_update
- chmod 777 /servyou/install/ssh_update/*
2.先升级openssl
#!/bin/sh
install_path=/servyou/install/ssh_update
#限定启动用户为root
if [ `whoami` != 'root' ]; then
echo -e '\033[32m启动用户错误,请确认。\033[0m'
exit 9
fi
#限定服务器类型为linux6/7 64位
if [[ ! `uname -r` =~ .*x86_64 ]]; then
echo -e '\033[32m您当前的操作系统内核不是7.x86_64,此安装文件仅适用linux6/7 64位系统。\033[0m'
exit 9
fi
#判断当前ssl版本是否需要升级
if [[ `openssl version` =~ 1.1.1l ]]; then
echo -e '\033[32m您当前的ssl版本为已进行过升级,不需要再进行升级。\033[0m'
exit 9
fi
#检查gcc环境
yum -y install gcc* gcc-c++*
if [[ `rpm -qa|grep gcc|wc -l` = '0' ]]; then
echo -e '\033[31m您的环境缺少gcc依赖包,请确认yum源正常并进行安装。\033[0m'
exit 9
fi
#检查zlib环境
yum -y install zlib-devel
if [[ `rpm -qa|grep zlib-devel|wc -l` = '0' ]]; then
echo -e '\033[31m您的环境缺少zlib-devel依赖包,请确认yum源正常并进行安装。\033[0m'
exit 9
fi
#限定已经安装并开启了telnet-server作为ssh安装失败的备用方案
yum -y install zlib
if [ `rpm -qa |grep xinetd |wc -l` -eq 0 ];then
yum -y install xinetd*
fi
if [ `rpm -qa |grep telnet-server |wc -l` -eq 0 ];then
yum -y install telnet-server*
fi
if [ `rpm -qa |grep telnet |grep -v telnet-server |wc -l` -eq 0 ];then
yum -y install telnet*
fi
sed -i 's/disable.*/disable = no/g' /etc/xinetd.d/telnet
sed -i 's/^.*pam_securetty.so/#&/g' /etc/pam.d/login
sed -i 's/^.*pam_securetty.so/#&/g' /etc/pam.d/remote
if [[ `uname -r` =~ el6.*x86_64 ]]; then
service xinetd restart
chkconfig xinetd on
elif [[ `uname -r` =~ el7.*x86_64 ]]; then
systemctl enable xinetd.service
systemctl enable telnet.socket
systemctl start telnet.socket
systemctl start xinetd
else
echo -e '\033[32m您当前的操作系统内核不是x86_64,此安装文件仅适用linux6/7 64位系统。\033[0m'
fi
#判断telnet-server是否启动成功
if [ `ps -ef |grep xinetd |grep -v grep |wc -l` -eq 0 ];then
echo -e '\033[32mtelnet-server安装启动失败,请检查!\033[0m'
exit 9
fi
#开始安装ssl
if [ ! -f $install_path/openssl*.tar.gz ];then
echo -e "\033[31m请确认目录下$install_path下安装包正常。\033[0m"
exit 9
fi
cd $install_path
tar -zxvf openssl*.tar.gz
cd openssl*
./config shared zlib --prefix=/usr/local/openssl && make && make install|tee openssl_install.log
./config -t|tee -a openssl_install.log
make depend|tee -a openssl_install.log
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
mv /usr/local/bin/openssl /usr/local/bin/openssl.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
rm -rf /usr/lib64/libssl.so
ln -s /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so
rm -rf /usr/lib64/libcrypto.so
ln -s /usr/local/openssl/lib/libcrypto.so /usr/lib64/libcrypto.so
ln -sf /usr/local/openssl/lib/libcrypto.so.1.0.0 /lib64/libcrypto.so.6
\cp -ra /usr/bin/openssl /usr/local/bin/
echo "/usr/local/openssl/lib" >>/etc/ld.so.conf
ldconfig -v|tee -a openssl_install.log
ldd /usr/local/openssl/bin/openssl|tee -a openssl_install.log
which openssl|tee -a openssl_install.log
openssl version|tee -a openssl_install.log
#安装成功与否判断
if [[ `openssl version` =~ 1.1.1q ]]; then
echo -e '\033[32m您当前的ssl版本已完成升级。\033[0m'
else
echo -e '\033[31m您当前的ssl版本升级失败,请检查。\033[0m'
exit 9
fi
3.升级openssh
#!/bin/sh
#限定启动用户为root
install_path=/servyou/install/ssh_update
echo $install_path
if [ `whoami` != 'root' ]; then
echo -e '\033[32m启动用户错误,请确认。\033[0m'
exit 9
fi
#限定服务器类型为linux6/7 64位
if [[ ! `uname -r` =~ .*x86_64 ]]; then
echo -e '\033[32m您当前的操作系统内核不是.x86_64,此安装文件仅适用linux6/7 64位系统。\033[0m'
exit 9
fi
#判断当前ssh版本是否需要升级
if [[ `strings /usr/bin/ssh | grep OpenSSH` =~ OpenSSH_8.8 ]]; then
echo -e '\033[32m您当前的ssh版本为8.6p1,不需要进行升级。\033[0m'
exit 9
fi
#判断当前ssl版本是否适合安装
if [[ ! `openssl version` =~ 1.1.1l ]]; then
echo -e '\033[32m您当前的openssl未进行升级,建议升级后继续升级ssh。\033[0m'
exit 9
fi
#判断ssl动态链接库是否正常
if [ ! -e /usr/lib64/libssl.so ];then
echo "/usr/lib64/libssl.so失效,请检查!"
exit 9
fi
if [ ! -e /usr/lib64/libssl.so.10 ];then
echo "/usr/lib64/libssl.so.10 失效,请检查!"
exit 9
fi
if [ ! -e /usr/lib64/libcrypto.so ];then
echo "/usr/lib64/libcrypto.so 失效,请检查!"
exit 9
fi
if [ ! -e /usr/lib64/libcrypto.so.10 ];then
echo "/usr/lib64/libcrypto.so.10 失效,请检查!"
exit 9
fi
#限定已经安装并开启了telnet-server作为ssh安装失败的备用方案
yum -y install zlib
if [ `rpm -qa |grep xinetd |wc -l` -eq 0 ];then
yum -y install xinetd*
fi
if [ `rpm -qa |grep telnet-server |wc -l` -eq 0 ];then
yum -y install telnet-server*
fi
if [ `rpm -qa |grep telnet |grep -v telnet-server |wc -l` -eq 0 ];then
yum -y install telnet*
fi
sed -i 's/disable.*/disable = no/g' /etc/xinetd.d/telnet
sed -i 's/^.*pam_securetty.so/#&/g' /etc/pam.d/login
sed -i 's/^.*pam_securetty.so/#&/g' /etc/pam.d/remote
if [[ `uname -r` =~ el6.*x86_64 ]]; then
service xinetd restart
chkconfig xinetd on
elif [[ `uname -r` =~ el7.*x86_64 ]]; then
systemctl enable xinetd.service
systemctl enable telnet.socket
systemctl start telnet.socket
systemctl start xinetd
else
echo -e '\033[32m您当前的操作系统内核不是x86_64,此安装文件仅适用linux6/7 64位系统。\033[0m'
fi
#echo "pts/0" >> /etc/securetty
#echo "pts/1" >> /etc/securetty
#判断telnet-server是否启动成功
if [ `ps -ef |grep xinetd |grep -v grep |wc -l` -eq 0 ];then
echo -e '\033[32mtelnet-server安装启动失败,请检查!\033[0m'
exit 9
fi
#进行ssh升级安装:
cd $install_path
pwd
tar -xzvf openssh*.tar.gz
cd openssh*
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-tcp-wrappers --with-ssl-dir=$install_path/openssl-1.1.1l --without-hardening |tee install_ssh.log
if [[ `uname -r` =~ el6.*x86_64 ]]; then
service sshd stop
elif [[ `uname -r` =~ el7.*x86_64 ]]; then
systemctl stop sshd
else
echo -e '\033[32m您当前的操作系统内核不是x86_64,此安装文件仅适用linux6/7 64位系统。\033[0m'
fi
mv /etc/ssh /etc/ssh.bak
rpm -qa|grep openssh|xargs rpm -e --nodeps
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords--with-pam --with-tcp-wrappers --with-ssl-dir=$install_path/openssl-1.1.1l --without-hardening
make && make install|tee -a install_ssh.log
\cp ./contrib/redhat/sshd.init /etc/init.d/sshd
chmod u+x /etc/init.d/sshd
chmod 755 /usr/local/openssl -R
#安装成功判断,成功则关闭telnet-server服务
chkconfig --add sshd
chkconfig sshd on
#sed -i 's/^Subsystem.*$/Subsystem sftp internal-sftp/g' /etc/ssh/sshd_config
#echo 'Protocol 2'>>/etc/ssh/sshd_config
#echo 'UseLogin yes'>>/etc/ssh/sshd_config
#echo 'PermitRootLogin yes'>>/etc/ssh/sshd_config
#echo 'IgnoreRhosts yes'>>/etc/ssh/sshd_config
#echo 'X11Forwarding yes'>>/etc/ssh/sshd_config
\cp -ra /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
\cp -ra $install_path/sshd_config /etc/ssh/sshd_config
ssh -V
#service sshd restart
if [[ `uname -r` =~ el6.*x86_64 ]]; then
/etc/init.d/sshd restart >/dev/null 2>&1 &
elif [[ `uname -r` =~ el7.*x86_64 ]]; then
systemctl restart sshd
else
echo -e '\033[32m您当前的操作系统内核不是x86_64,此安装文件仅适用linux6/7 64位系统。\033[0m'
fi
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