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

李泽信 发布于 2022-8-9 15:07

远程访问控制与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/

李泽信 发布于 2022-8-8 22:21

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
  • 客户端访问测试


李泽信 发布于 2022-8-7 21:47

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

李泽信 发布于 2022-8-4 22:46

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

李泽信 发布于 2022-8-3 20:58

个人资料

搜索

日历

时间进度

    今日剩余 59.6%
    本周剩余 37.1%
    本月剩余 22.0%
    本年剩余 52.2%

访问统计