环境:CentOS 6.7

安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复;

解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过)。

当前版本:OpenSSH_5.3p1, OpenSSL 1.0.1e-fips

当前最新版本:OpenSSH_7.3p1, OpenSSL 1.0.2h

1.查看SSH/SSL当前版本

查看SSH/SSL当前版本:
ssh -V
openssl version
```
[root@test0823 ~]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013

[root@test0823 ssh]# openssl version

OpenSSL 1.0.1e-fips 11 Feb 2013

备份ssh配置文件:
tar zcvf /etc/ssh.tar.gz /etc/ssh/

[root@test0823 ~]# tar zcvf /etc/ssh.tar.gz /etc/ssh/

ssh/

ssh/ssh_host_dsa_key.pub

ssh/ssh_host_rsa_key.pub

ssh/ssh_host_rsa_key

ssh/sshd_config

ssh/ssh_config

ssh/moduli

ssh/ssh_host_dsa_key

ssh/ssh_host_key.pub

ssh/ssh_host_key

<h1 id="2">2.下载最新的SSH/SSL</h1>
**目前最新版本:**
OpenSSH_7.3p1, OpenSSL 1.0.2h
**本次安装介质:**
链接: http://pan.baidu.com/s/1eRW3ytc 密码: 46sy
**SSH/SSL安装配置参考:**
SSL安装:
参考 http://www.linuxfromscratch.org/blfs/view/svn/postlfs/openssl.html
SSH安装:
参考 http://www.linuxfromscratch.org/blfs/view/svn/postlfs/openssh.html <h1 id="3">3.源码编译安装SSL</h1>
本次测试所有源码包均默认上传到服务器的/root目录下。
需要先安装SSL,再安装SSH
## 3.1 解压SSL源码包 ##

[root@test0823 ~]# tar -zxvf openssl-1.0.2h.tar.gz

[root@test0823 ~]# cd openssl-1.0.2h

## 3.2 配置并编译 ##
复制下面的命令执行:

./config --prefix=/usr

--openssldir=/etc/ssl

--libdir=lib

shared

zlib-dynamic &&

make depend &&

make

操作如下:

[root@test0823 openssl-1.0.2h]# ./config --prefix=/usr \

     --openssldir=/etc/ssl \
--libdir=lib \
shared \
zlib-dynamic &&

make depend &&

make

## 3.3 安装SSL ##
复制下面的命令执行:

make MANDIR=/usr/share/man MANSUFFIX=ssl install &&

install -dv -m755 /usr/share/doc/openssl-1.0.2h &&

cp -vfr doc/* /usr/share/doc/openssl-1.0.2h

操作如下:

[root@test0823 openssl-1.0.2h]# make MANDIR=/usr/share/man MANSUFFIX=ssl install &&

install -dv -m755 /usr/share/doc/openssl-1.0.2h &&

cp -vfr doc/* /usr/share/doc/openssl-1.0.2h

## 3.4 验证SSL版本 ##
openssl version 操作如下:

[root@test0823 openssl-1.0.2h]# openssl version

OpenSSL 1.0.2h 3 May 2016

[root@test0823 openssl-1.0.2h]# ssh -V

OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013

<h1 id="4">4.源码编译安装SSH</h1>
## 4.1 解压SSH源码包 ##

[root@test0823 ~]# tar -zxvf openssh-7.3p1.tar.gz

[root@test0823 ~]# cd openssh-7.3p1

## 4.2 配置 ##
### 4.2.1 配置前准备 ###
复制下面的命令执行:

install -v -m700 -d /var/lib/sshd &&

chown -v root:sys /var/lib/sshd &&

groupadd -g 50 sshd &&

useradd -c 'sshd PrivSep'

-d /var/lib/sshd

-g sshd

-s /bin/false

-u 50 sshd

操作如下:

[root@test0823 openssh-7.3p1]# install -v -m700 -d /var/lib/sshd &&

chown -v root:sys /var/lib/sshd &&

groupadd -g 50 sshd &&

useradd -c 'sshd PrivSep'

-d /var/lib/sshd

-g sshd

-s /bin/false

-u 50 sshd

### 4.2.2 配置并编译 ###
复制下面的命令执行:

./configure --prefix=/usr

--sysconfdir=/etc/ssh

--with-md5-passwords

--with-privsep-path=/var/lib/sshd &&

make

操作如下:

[root@test0823 openssh-7.3p1]# ./configure --prefix=/usr \

        --sysconfdir=/etc/ssh             \
--with-md5-passwords \
--with-privsep-path=/var/lib/sshd &&

make

## 4.3 安装SSH ##
复制下面的命令执行:

make install &&

install -v -m755 contrib/ssh-copy-id /usr/bin &&

install -v -m644 contrib/ssh-copy-id.1

/usr/share/man/man1 &&

install -v -m755 -d /usr/share/doc/openssh-7.3p1 &&

install -v -m644 INSTALL LICENCE OVERVIEW README*

/usr/share/doc/openssh-7.3p1

操作如下:

[root@test0823 openssh-7.3p1]# make install &&

install -v -m755 contrib/ssh-copy-id /usr/bin &&

install -v -m644 contrib/ssh-copy-id.1

/usr/share/man/man1 &&

install -v -m755 -d /usr/share/doc/openssh-7.3p1 &&

install -v -m644 INSTALL LICENCE OVERVIEW README*

/usr/share/doc/openssh-7.3p1

## 4.4 验证SSH版本 ##

[root@test0823 openssh-7.3p1]# ssh -V

OpenSSH_7.3p1, OpenSSL 1.0.2h 3 May 2016

## 4.5 重启sshd服务 ##
将之前的sshd重命名备份,做一个sshd的软连接:

mv /usr/sbin/sshd /usr/sbin/sshd.OFF

ln -s /root/openssh-7.3p1/sshd /usr/sbin/sshd

使用 service sshd restart 重启一下服务

[root@test0823 openssh-7.3p1]# service sshd restart

Stopping sshd: [ OK ]

Starting sshd: /etc/ssh/sshd_config line 81: Unsupported option GSSAPIAuthentication

/etc/ssh/sshd_config line 83: Unsupported option GSSAPICleanupCredentials

/etc/ssh/sshd_config line 97: Unsupported option UsePAM

[ OK ]

上面的报错并不影响sshd正常启动,为了不再显示上述提示,可以注释掉相关配置行:
vi /etc/ssh/sshd_config
注释掉 81,83,97 三行。 再次重启sshd服务就不会有那三行的提示报错。 允许root用户ssh登录(默认可能就是允许,如果不允许,可以在文件末尾追加下面的一行配置到配置文件,或者直接vi编辑修改)

echo "PermitRootLogin yes" >> /etc/ssh/sshd_config


<h1 id="5">5.删除SSL旧版本</h1>
之前没有删除旧版本的SSL,SSH是因为不了解相关联的程序,
但是最后扫描发现如果不删除旧版本的SSL,某盟的扫描依然会扫出SSL的系列漏洞。 查看rpm安装的openssl相关包:

rpm -qa|grep openssl

对旧版本的SSL(这里是openssl-1.0.1e-42.el6.x86_64)进行删除:
rpm -e openssl-1.0.1e-42.el6.x86_64
直接尝试删除会提示如下库文件的依赖:

[root@test0823 ~]# rpm -e openssl-1.0.1e-42.el6.x86_64

error: Failed dependencies:

libcrypto.so.10()(64bit) is needed by (installed) qt-1:4.6.2-28.el6_5.x86_64

libcrypto.so.10()(64bit) is needed by (installed) libarchive-2.8.3-4.el6_2.x86_64

libcrypto.so.10()(64bit) is needed by (installed) libssh2-1.4.2-1.el6_6.1.x86_64

libcrypto.so.10()(64bit) is needed by (installed) wget-1.12-5.el6_6.1.x86_64

libcrypto.so.10()(64bit) is needed by (installed) wpa_supplicant-1:0.7.3-6.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) bind-libs-32:9.8.2-0.37.rc1.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) bind-utils-32:9.8.2-0.37.rc1.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) mysql-libs-5.1.73-5.el6_6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) fipscheck-1.2.0-7.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) httpd-tools-2.2.15-45.el6.centos.x86_64

libcrypto.so.10()(64bit) is needed by (installed) cyrus-sasl-md5-2.1.23-15.el6_6.2.x86_64

libcrypto.so.10()(64bit) is needed by (installed) gnome-vfs2-2.24.2-6.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) ptlib-2.6.5-3.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) opal-3.6.6-4.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) python-libs-2.6.6-64.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) python-ldap-0:2.3.10-1.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) pyOpenSSL-0.13.1-2.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) net-snmp-libs-1:5.5-54.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) evolution-data-server-2.32.3-23.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) gstreamer-plugins-bad-free-0.10.19-3.el6_5.x86_64

libcrypto.so.10()(64bit) is needed by (installed) xorg-x11-server-Xorg-1.15.0-36.el6.centos.x86_64

libcrypto.so.10()(64bit) is needed by (installed) hplip-libs-3.14.6-3.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) ntpdate-4.2.6p5-5.el6.centos.x86_64

libcrypto.so.10()(64bit) is needed by (installed) ntp-4.2.6p5-5.el6.centos.x86_64

libcrypto.so.10()(64bit) is needed by (installed) certmonger-0.77.5-1.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) cyrus-sasl-2.1.23-15.el6_6.2.x86_64

libcrypto.so.10()(64bit) is needed by (installed) postfix-2:2.6.6-6.el6_5.x86_64

libcrypto.so.10()(64bit) is needed by (installed) hpijs-1:3.14.6-3.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) ekiga-3.2.6-4.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) gnome-vfs2-smb-2.24.2-6.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) tcpdump-14:4.0.0-5.20090921gitdf3cb4.2.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) vsftpd-2.2.2-14.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) openssh-5.3p1-111.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) openssh-server-5.3p1-111.el6.x86_64

libcrypto.so.10()(64bit) is needed by (installed) openssh-clients-5.3p1-111.el6.x86_64

libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) pyOpenSSL-0.13.1-2.el6.x86_64

libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) net-snmp-libs-1:5.5-54.el6.x86_64

libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) ntpdate-4.2.6p5-5.el6.centos.x86_64

libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) ntp-4.2.6p5-5.el6.centos.x86_64

libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) postfix-2:2.6.6-6.el6_5.x86_64

libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) openssh-5.3p1-111.el6.x86_64

libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) openssh-server-5.3p1-111.el6.x86_64

libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) openssh-clients-5.3p1-111.el6.x86_64

libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit) is needed by (installed) certmonger-0.77.5-1.el6.x86_64

libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit) is needed by (installed) postfix-2:2.6.6-6.el6_5.x86_64

libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit) is needed by (installed) openssh-5.3p1-111.el6.x86_64

libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit) is needed by (installed) openssh-server-5.3p1-111.el6.x86_64

libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit) is needed by (installed) openssh-clients-5.3p1-111.el6.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) qt-1:4.6.2-28.el6_5.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) libssh2-1.4.2-1.el6_6.1.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) wget-1.12-5.el6_6.1.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) wpa_supplicant-1:0.7.3-6.el6.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) bind-libs-32:9.8.2-0.37.rc1.el6.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) mysql-libs-5.1.73-5.el6_6.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) httpd-tools-2.2.15-45.el6.centos.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) cyrus-sasl-md5-2.1.23-15.el6_6.2.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) python-libs-2.6.6-64.el6.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) pyOpenSSL-0.13.1-2.el6.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) net-snmp-libs-1:5.5-54.el6.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) gstreamer-plugins-bad-free-0.10.19-3.el6_5.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) xorg-x11-server-Xorg-1.15.0-36.el6.centos.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) ntpdate-4.2.6p5-5.el6.centos.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) ntp-4.2.6p5-5.el6.centos.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) certmonger-0.77.5-1.el6.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) cyrus-sasl-2.1.23-15.el6_6.2.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) postfix-2:2.6.6-6.el6_5.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) tcpdump-14:4.0.0-5.20090921gitdf3cb4.2.el6.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) vsftpd-2.2.2-14.el6.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) openssh-5.3p1-111.el6.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) openssh-server-5.3p1-111.el6.x86_64

libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) openssh-clients-5.3p1-111.el6.x86_64

libssl.so.10()(64bit) is needed by (installed) qt-1:4.6.2-28.el6_5.x86_64

libssl.so.10()(64bit) is needed by (installed) libssh2-1.4.2-1.el6_6.1.x86_64

libssl.so.10()(64bit) is needed by (installed) wget-1.12-5.el6_6.1.x86_64

libssl.so.10()(64bit) is needed by (installed) wpa_supplicant-1:0.7.3-6.el6.x86_64

libssl.so.10()(64bit) is needed by (installed) mysql-libs-5.1.73-5.el6_6.x86_64

libssl.so.10()(64bit) is needed by (installed) httpd-tools-2.2.15-45.el6.centos.x86_64

libssl.so.10()(64bit) is needed by (installed) gnome-vfs2-2.24.2-6.el6.x86_64

libssl.so.10()(64bit) is needed by (installed) ptlib-2.6.5-3.el6.x86_64

libssl.so.10()(64bit) is needed by (installed) opal-3.6.6-4.el6.x86_64

libssl.so.10()(64bit) is needed by (installed) python-libs-2.6.6-64.el6.x86_64

libssl.so.10()(64bit) is needed by (installed) python-ldap-0:2.3.10-1.el6.x86_64

libssl.so.10()(64bit) is needed by (installed) pyOpenSSL-0.13.1-2.el6.x86_64

libssl.so.10()(64bit) is needed by (installed) evolution-data-server-2.32.3-23.el6.x86_64

libssl.so.10()(64bit) is needed by (installed) gstreamer-plugins-bad-free-0.10.19-3.el6_5.x86_64

libssl.so.10()(64bit) is needed by (installed) postfix-2:2.6.6-6.el6_5.x86_64

libssl.so.10()(64bit) is needed by (installed) ekiga-3.2.6-4.el6.x86_64

libssl.so.10()(64bit) is needed by (installed) gnome-vfs2-smb-2.24.2-6.el6.x86_64

libssl.so.10()(64bit) is needed by (installed) vsftpd-2.2.2-14.el6.x86_64

libssl.so.10(libssl.so.10)(64bit) is needed by (installed) qt-1:4.6.2-28.el6_5.x86_64

libssl.so.10(libssl.so.10)(64bit) is needed by (installed) wget-1.12-5.el6_6.1.x86_64

libssl.so.10(libssl.so.10)(64bit) is needed by (installed) wpa_supplicant-1:0.7.3-6.el6.x86_64

libssl.so.10(libssl.so.10)(64bit) is needed by (installed) mysql-libs-5.1.73-5.el6_6.x86_64

libssl.so.10(libssl.so.10)(64bit) is needed by (installed) httpd-tools-2.2.15-45.el6.centos.x86_64

libssl.so.10(libssl.so.10)(64bit) is needed by (installed) python-libs-2.6.6-64.el6.x86_64

libssl.so.10(libssl.so.10)(64bit) is needed by (installed) pyOpenSSL-0.13.1-2.el6.x86_64

libssl.so.10(libssl.so.10)(64bit) is needed by (installed) postfix-2:2.6.6-6.el6_5.x86_64

libssl.so.10(libssl.so.10)(64bit) is needed by (installed) vsftpd-2.2.2-14.el6.x86_64

openssl is needed by (installed) postfix-2:2.6.6-6.el6_5.x86_64

记录好依赖的这两个库文件

libcrypto.so.10

libssl.so.10

然后忽略依赖删除:

rpm -e --nodeps openssl-1.0.1e-42.el6.x86_64

做新的软连接映射:

[root@test0823 openssl-1.0.2h]# ln -s /root/openssl-1.0.2h/libssl.so.1.0.0 /usr/lib64/libssl.so.10

[root@test0823 openssl-1.0.2h]# ln -s /root/openssl-1.0.2h/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10

如果是最后删除的openssl,那么还需要注意openssl软连接的情况,如下:

[root@test0823 apps]# ln -s /root/openssl-1.0.2h/apps/openssl /usr/bin/openssl

然后再次扫描已经没有SSL相关漏洞了。

<h1 id="6">6.写在后面</h1>
我的专业不是SA,对Linux的编译安装了解也不多,所以这个加固过程中不免有所纰漏或错误,欢迎内行指出供大家一起参考学习。
另外感谢网友:游荡 早期提供给我的ssh安装说明参考。
感谢www.linuxfromscratch.org网站提供的SSH/SSL安装操作说明。

SSH/SSL 源码编译安装简易操作说明的更多相关文章

  1. Linux 从源码编译安装 OpenSSH

    https://blog.csdn.net/bytxl/article/details/46639073 Linux 从源码编译安装 OpenSSH以及各问题解决 2015年06月25日 17:37: ...

  2. 源码编译安装MySQL8.0

    源码编译安装MySQL8.0 0.前期准备条件 查看linux的版本 [root@mysql etc]# cat /etc/redhat-release CentOS Linux release 7. ...

  3. 源码编译安装mysql5.5.33

    源码编译安装mysql5.5.33 一.安装cmake编译工具 跨平台编译器 # yum install -y gcc* # yum install -y cmake 解决依赖关系 # yum ins ...

  4. zstack源码编译安装(1.7.x版本)

    图片没粘贴过来,请看本人gitbook吧https://www.gitbook.com/book/jingtyu/how-to-learn-zstack-code 运行环境 zstack的安装方式有很 ...

  5. CentOS7.6源码编译安装PHP 7.3.8

    安装步骤 PHP官网下载链接:https://www.php.net/downloads.php 1. 使用wget命令下载源码安装包 wget https://www.php.net/distrib ...

  6. 源码编译安装 ganesha

    源码编译安装 ganesha 简介 系统环境:CentOS 7.5 ceph:luminous nfs-ganesha:v2.6 stable 安装步骤 安装依赖 首先需要安装编译会用到的公共库 1 ...

  7. Httpd服务进阶知识-LAMP源码编译安装

    Httpd服务进阶知识-LAMP源码编译安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家都知道,动态资源交给fastcgi程序处理,静态资源依旧由httpd服务器处理  ...

  8. dropbear源码编译安装及AIDE软件监控

    ssh协议的另一个实现:dropbear源码编译安装:• 1.安装开发包组:yum groupinstall “Development tools”• 2.下载 -2017.75.tar.bz2    ...

  9. ambari 2.5.0源码编译安装

    参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/index.html Ambari 是什么 Ambar ...

随机推荐

  1. 例如筋斗云的效果,但不通过offset定位的flag标记

    效果:mouseenter到li上出现背景图片,mouseleave后背景图片消失,click以后该背景图片被锁定 问题:简单的mouseenter,mouseleave和click事件不能达到预期的 ...

  2. 关于IOS浏览器:document,body的click事件触发规则

    今天做了个手机页面,点击某个按钮->弹出菜单,再点击菜单以外的任意位置->关闭菜单,在其他浏览器里面没有问题,但是在IOS浏览器中并不会关闭. 网上解决这个bug的帖子很多,这篇帖子主要是 ...

  3. C# DataSet

    一.基本概念 DataSet是ADO.NET的中心概念.可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合.所谓独立,就是说,即使断开数据链路,或者关闭数据库,Dat ...

  4. 移动端手势库hammerJS 2.0.4官方文档翻译

    hammerJS是一个优秀的.轻量级的触屏设备手势库,现在已经更新到2.04版本,跟1.0版本有点天壤地别了,毕竟改写了事件名并新增了许多方法,允许同时监听多个手势.自定义识别器,也可以识别滑动方向. ...

  5. 作业二:个人编程项目——编写一个能自动生成小学四则运算题目的程序

    1. 编写一个能自动生成小学四则运算题目的程序.(10分)   基本要求: 除了整数以外,还能支持真分数的四则运算. 对实现的功能进行描述,并且对实现结果要求截图.   本题发一篇随笔,内容包括: 题 ...

  6. 如何在没有域的环境中搭建AlwaysOn(一)

    对DBA而言,不需要域就可以搭建SQL Server AlwaysOn是Windows Server 2016中最令人兴奋的功能了,它不仅可以降低搭建的成本,而且还减少了部署和运维的工作量. 该特性可 ...

  7. ASP.NET MVC学前篇之扩展方法、链式编程

    ASP.NET MVC学前篇之扩展方法.链式编程 前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的 ...

  8. 在JS中获取文件点之后的后缀字符

    var upFileName = $("#fileToUpload").val();var index1=upFileName.lastIndexOf(".") ...

  9. iOS开发-应用崩溃日志揭秘(一)

    作为一名应用开发者,你是否有过如下经历? 为确保你的应用正确无误,在将其提交到应用商店之前,你必定进行了大量的测试工作.它在你的设备上也运行得很好,但是,上了应用商店后,还是有用户抱怨会闪退 ! 如果 ...

  10. 服务器.htaccess 详解以及 .htaccess 参数说明(转载)

    htaccess文件(或者”分布式配置文件”)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户,所能使用的命令受到限 ...