• 基于源码编译安装openssh


       最近的,openssl/openssh等相继漏洞的暴露,让暴露在公网的linux.沦陷为肉鸡的正营。。。

    没办法,还是升级版本。。。

    00、openssh简介

      OpenSSH 是一组安全远程的连接工具,主要包括了几个部份:ssh、sshd、scp、sftp、ssh-keygen、ssh-agent、ssh-add等

    ssh(SSH 客户端,用于登录建立连接,是 rlogin 与 Telnet的安全替代方案)
    sshd (SSH 服务端,典型的独立守护进程)
    scp、sftp (文件安全传输工具,rcp、ftp 安全的替代方案)
    ssh-keygen (用于产生 RSA 或 DSA 密钥)
    ssh-agent、ssh-add(帮助用户不需要每次都要输入金钥密码的工具)

    01、编译前的准备工作

    下载openssh:

      https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/

    A: 已经安装了openssl(新版本的,编译安装的)

    B:或者基于本机的openssl(yum install -y openssl-devel

    openssl version -a   #查看当前版本的openssl

    ssh  -V                     #当前openssh编译的版本

    yum install -y zlib-devel  #如果编译参数压缩的需要安装

    02、编译安装 OpenSSH

    ./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh2  --with-ssl-dir=/usr/local/openssl #如果openssl已经基于源码升级需要加此参数,但基于本机openssl的不需要添加
    make -j4 && make install

    解释:
    --prefix 安装目录
    --sysconfdir 配置文件目录  #当前的/etc/ssh   目的不覆盖,也可以基于本机直接覆盖安装
    --with-ssl-dir 指定 OpenSSL 的安装目录(基于源码安装的)

    03、备份OpenSSH 旧配置文件

    mv  /etc/init.d/sshd   /etc/init.d/sshd.bak

    04、修改ssh启动脚本

    openssh-7.4p1contrib edhatsshd.init sshd就是根据sshd,init修改的针对redhat发行版本

    根据实际情况修正的sshd脚本  /etc/init.d/sshd

    #!/bin/bash
    #
    # Init file for OpenSSH server daemon
    #
    # chkconfig: 2345 55 25
    # description: OpenSSH server daemon
    #
    # processname: sshd
    # config: /etc/ssh/ssh_host_key
    # config: /etc/ssh/ssh_host_key.pub
    # config: /etc/ssh/ssh_random_seed
    # config: /etc/ssh/sshd_config
    # pidfile: /var/run/sshd.pid
    
    # source function library
    . /etc/rc.d/init.d/functions
    
    # pull in sysconfig settings
    [ -f /etc/sysconfig/sshd ] && . /etc/sysconfig/sshd
    
    RETVAL=0
    prog="sshd"
    
    # Some functions to make the below more readable
    SSHD=/usr/local/openssh/sbin/sshd  #按实际情况调整
    PID_FILE=/var/run/sshd.pid
    
    do_restart_sanity_check()
    {
        $SSHD -t
        RETVAL=$?
        if [ $RETVAL -ne 0 ]; then
            failure $"Configuration file or keys are invalid"
            echo
        fi
    }
    
    start()
    {
        # Create keys if necessary
        /usr/local/openssh/bin/ssh-keygen -A  #按实际情况调整
        if [ -x /sbin/restorecon ]; then
            /sbin/restorecon /etc/ssh2/ssh_host_key.pub
            /sbin/restorecon /etc/ssh2/ssh_host_rsa_key.pub
            /sbin/restorecon /etc/ssh2/ssh_host_dsa_key.pub
            /sbin/restorecon /etc/ssh2/ssh_host_ecdsa_key.pub
        fi
    
        echo -n $"Starting $prog:"
        $SSHD $OPTIONS && success || failure
        RETVAL=$?
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/sshd
        echo
    }
    
    stop()
    {
        echo -n $"Stopping $prog:"
        killproc $SSHD -TERM
        RETVAL=$?
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sshd
        echo
    }
    
    reload()
    {
        echo -n $"Reloading $prog:"
        killproc $SSHD -HUP
        RETVAL=$?
        echo
    }
    
    case "$1" in
        start)
            start
            ;;
        stop)
            stop
            ;;
        restart)
            stop
            start
            ;;
        reload)
            reload
            ;;
        condrestart)
            if [ -f /var/lock/subsys/sshd ] ; then
                do_restart_sanity_check
                if [ $RETVAL -eq 0 ] ; then
                    stop
                    # avoid race
                    sleep 3
                    start
                fi
            fi
            ;;
        status)
            status $SSHD
            RETVAL=$?
            ;;
        *)
            echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}"
            RETVAL=1
    esac
    exit $RETVAL

    chmod +x /etc/init.d/sshd  

    添加允许root远程登录
    /etc/ssh2/sshd_config
    PermitRootLogin yes

    05、设置环境变量

    vim /etc/profile
    export PATH=/usr/local/openssh/bin:$PATH

    source /etc/profile

    06、开机自启动 sshd

    service sshd restart

    chkconfig sshd on

    07、openssh编译参数

    [root@rhel openssh-7.4p1]# ./configure --help
    `configure' configures OpenSSH Portable to adapt to many kinds of systems.

    Usage: ./configure [OPTION]... [VAR=VALUE]...

    To assign environment variables (e.g., CC, CFLAGS...), specify them as
    VAR=VALUE. See below for descriptions of some of the useful variables.

    Defaults for the options are specified in brackets.

    Configuration:
    -h, --help display this help and exit
    --help=short display options specific to this package
    --help=recursive display the short help of all the included packages
    -V, --version display version information and exit
    -q, --quiet, --silent do not print `checking ...' messages
    --cache-file=FILE cache test results in FILE [disabled]
    -C, --config-cache alias for `--cache-file=config.cache'
    -n, --no-create do not create output files
    --srcdir=DIR find the sources in DIR [configure dir or `..']

    Installation directories:
    --prefix=PREFIX install architecture-independent files in PREFIX
    [/usr/local]
    --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
    [PREFIX]

    By default, `make install' will install all the files in
    `/usr/local/bin', `/usr/local/lib' etc. You can specify
    an installation prefix other than `/usr/local' using `--prefix',
    for instance `--prefix=$HOME'.

    For better control, use the options below.

    Fine tuning of the installation directories:
    --bindir=DIR user executables [EPREFIX/bin]
    --sbindir=DIR system admin executables [EPREFIX/sbin]
    --libexecdir=DIR program executables [EPREFIX/libexec]
    --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
    --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
    --localstatedir=DIR modifiable single-machine data [PREFIX/var]
    --libdir=DIR object code libraries [EPREFIX/lib]
    --includedir=DIR C header files [PREFIX/include]
    --oldincludedir=DIR C header files for non-gcc [/usr/include]
    --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
    --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
    --infodir=DIR info documentation [DATAROOTDIR/info]
    --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
    --mandir=DIR man documentation [DATAROOTDIR/man]
    --docdir=DIR documentation root [DATAROOTDIR/doc/openssh]
    --htmldir=DIR html documentation [DOCDIR]
    --dvidir=DIR dvi documentation [DOCDIR]
    --pdfdir=DIR pdf documentation [DOCDIR]
    --psdir=DIR ps documentation [DOCDIR]

    System types:
    --build=BUILD configure for building on BUILD [guessed]
    --host=HOST cross-compile to build programs to run on HOST [BUILD]

    Optional Features:
    --disable-option-checking ignore unrecognized --enable/--with options
    --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
    --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
    --disable-largefile omit support for large files
    --disable-pkcs11 disable PKCS#11 support code [no]
    --disable-strip Disable calling strip(1) on install
    --disable-etc-default-login Disable using PATH from /etc/default/login no
    --disable-lastlog disable use of lastlog even if detected no
    --disable-utmp disable use of utmp even if detected no
    --disable-utmpx disable use of utmpx even if detected no
    --disable-wtmp disable use of wtmp even if detected no
    --disable-wtmpx disable use of wtmpx even if detected no
    --disable-libutil disable use of libutil (login() etc.) no
    --disable-pututline disable use of pututline() etc. (uwtmp) no
    --disable-pututxline disable use of pututxline() etc. (uwtmpx) no

    Optional Packages:
    --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
    --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
    --without-openssl Disable use of OpenSSL; use only limited internal crypto **EXPERIMENTAL**
    --with-ssh1 Enable support for SSH protocol 1
    --without-stackprotect Don't use compiler's stack protection
    --without-hardening Don't use toolchain hardening flags
    --without-rpath Disable auto-added -R linker paths
    --with-cflags Specify additional flags to pass to compiler
    --with-cppflags Specify additional flags to pass to preprocessor
    --with-ldflags Specify additional flags to pass to linker
    --with-libs Specify additional libraries to link with
    --with-Werror Build main code with -Werror
    --with-solaris-contracts Enable Solaris process contracts (experimental)
    --with-solaris-projects Enable Solaris projects (experimental)
    --with-solaris-privs Enable Solaris/Illumos privileges (experimental)
    --with-osfsia Enable Digital Unix SIA
    --with-zlib=PATH Use zlib in PATH
    --without-zlib-version-check Disable zlib version check
    --with-skey[=PATH] Enable S/Key support (optionally in PATH)
    --with-ldns[=PATH] Use ldns for DNSSEC support (optionally in PATH)
    --with-libedit[=PATH] Enable libedit support for sftp
    --with-audit=module Enable audit support (modules=debug,bsm,linux)
    --with-pie Build Position Independent Executables if possible
    --with-ssl-dir=PATH Specify path to OpenSSL installation   #源码编译openssl需要指定
    --without-openssl-header-check Disable OpenSSL version consistency check
    --with-ssl-engine Enable OpenSSL (hardware) ENGINE support
    --with-prngd-port=PORT read entropy from PRNGD/EGD TCP localhost:PORT
    --with-prngd-socket=FILE read entropy from PRNGD/EGD socket FILE (default=/var/run/egd-pool)
    --with-pam Enable PAM support
    --with-pam-service=name Specify PAM service name
    --with-privsep-user=user Specify non-privileged user for privilege separation
    --with-sandbox=style Specify privilege separation sandbox (no, capsicum, darwin, rlimit, seccomp_filter, systrace, pledge)
    --with-selinux Enable SELinux support
    --with-kerberos5=PATH Enable Kerberos 5 support
    --with-privsep-path=xxx Path for privilege separation chroot (default=/var/empty)
    --with-xauth=PATH Specify path to xauth program
    --with-maildir=/path/to/mail Specify your system mail directory
    --with-mantype=man|cat|doc Set man page type
    --with-md5-passwords Enable use of MD5 passwords
    --without-shadow Disable shadow password support
    --with-ipaddr-display Use ip address instead of hostname in $DISPLAY
    --with-default-path= Specify default $PATH environment for server
    --with-superuser-path= Specify different path for super-user
    --with-4in6 Check for and convert IPv4 in IPv6 mapped addresses
    --with-bsd-auth Enable BSD auth support
    --with-pid-dir=PATH Specify location of ssh.pid file
    --with-lastlog=FILE|DIR specify lastlog location common locations

    Some influential environment variables:
    CC C compiler command
    CFLAGS C compiler flags
    LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
    nonstandard directory <lib dir>
    LIBS libraries to pass to the linker, e.g. -l<library>
    CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
    you have headers in a nonstandard directory <include dir>
    CPP C preprocessor

    Use these variables to override the choices made by `configure' or to help
    it to find libraries and programs with nonstandard names/locations.

    OpenSSH has been configured with the following options:
    User binaries: /usr/local/openssh/bin
    System binaries: /usr/local/openssh/sbin
    Configuration files: /etc/ssh2
    Askpass program: /usr/local/openssh/libexec/ssh-askpass
    Manual pages: /usr/local/openssh/share/man/manX
    PID file: /var/run
    Privilege separation chroot path: /var/empty
    sshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/openssh/bin
    Manpage format: doc
    PAM support: no
    OSF SIA support: no
    KerberosV support: no
    SELinux support: no
    Smartcard support:
    S/KEY support: no
    MD5 password support: no
    libedit support: no
    Solaris process contract support: no
    Solaris project support: no
    Solaris privilege support: no
    IP address in $DISPLAY hack: no
    Translate v4 in v6 hack: yes
    BSD Auth support: no
    Random number source: OpenSSL internal ONLY
    Privsep sandbox style: rlimit

    Host: x86_64-pc-linux-gnu
    Compiler: gcc
    Compiler flags: -g -O2 -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security
    -Wno-pointer-sign -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset -fstack-protector-all -fPIE Preprocessor flags: -I/usr/local/openssl/include
    Linker flags: -L/usr/local/openssl/lib -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -fstack-
    protector-all -pie Libraries: -lcrypto -lrt -ldl -lutil -lz -lcrypt -lresolv

  • 相关阅读:
    字符串练习题
    算法题
    readLine()
    grep家族
    java_IO
    集合框架
    常用类
    异常
    Mysql 图形工具 Navicat
    Mysql内置功能《一》流程控制
  • 原文地址:https://www.cnblogs.com/xiaochina/p/7486073.html
Copyright © 2020-2023  润新知