在你开始前
关于本教程
本教程专为希望通过使用Secure Shell协议的OpenSSH实现所提供的标准不安全网络服务替换标准不安全网络服务来提高运行AIX的服务器的安全性和完整性的IBM RS / 6000系统的管理员而设计。
在本教程中,将不讨论一般的网络安全性或SSH客户端软件的使用。 本教程的主要重点是详细说明从源代码编译OpenSSH所需的必要组件,步骤和配置,以及从源代码开始跨AIX系统进行部署的先决条件。
关于本教程中的示例
本教程中使用的示例系统是运行AIX 4.3.3维护级别08的RS / 6000。源软件是使用IBM C for AIX版本5.0.1编译器编译的。 请注意,给出的说明适用于4.3.x至5.x的所有当前受支持的AIX版本。
本教程使用了每个软件包的最新稳定版本。 软件的选项和行为可能会在各个发行版中发生变化,因此,有关最新信息,请始终参阅源分发中随附的文档。
什么是OpenSSH
默认网络服务有什么问题?
像大多数UNIX实现一样,AIX提供了大量网络服务,使远程用户可以交互方式登录,与服务器之间来回传输文件以及以非交互方式向服务器发出命令。 不幸的是,大多数守护程序 (在服务器上运行的程序都满足对特定服务的请求)是在考虑系统和网络流量的安全性之后才设计的(如果考虑到了)。
telnet
, rsh
和ftp
等服务背后的协议不包含对通过网络传递的流量进行加密的规定。 大多数网络协议都包含用于用户身份验证的方法,但是这些方法非常脆弱并且很容易伪造。 允许将用户ID和密码以明文形式从客户端传输到服务器的协议很常见。 此外,不能保证通过网络传输的数据没有被第三方拦截并可能被篡改。
开发了安全外壳(SSH)协议来解决由这些固有的不安全服务引起的上述问题。
安全外壳协议的开发
1995年,原始的SSH协议由芬兰赫尔辛基工业大学的研究员TatuYlönen开发。 除了开发协议之外,Ylönen还编写了UNIX系统的实现,将源作为免费软件分发,以供无限使用。 随着SSH软件在全球范围内的普及,Ylönen成立了SSH Communications Security,Ltd.公司,以进一步开发该产品(现已获得商业许可,但有可用资源)并提供支持。
随着时间的流逝,在协议的原始定义中发现了局限性和缺陷。 如果不破坏与旧版本的兼容性,就无法解决这些问题,因此定义了新协议来解决原始SSH协议的问题。 随着基于协议2的软件的各种实现的成熟和获得功能,基于旧协议1的软件的使用将逐渐消失。 但是,到目前为止,协议1和协议2的实现都在世界范围内得到广泛使用。 为了向最广泛的客户群体提供服务,服务器通过两种协议支持客户端连接非常重要。
SSH做什么?
Secure Shell协议可防止以下问题,其中大多数是SSH可以替代的各种协议的设计所固有的:
- 用户和主机认证
SSH使用多种强大的加密方法来确保客户端和服务器都是他们所说的身份。 除非服务器和客户端都同意用户和主机身份有效,否则连接将被拒绝。
- 网络流量加密
SSH客户端和SSH服务器之间通过网络传输的所有数据均使用强度不同的算法进行加密。 这样可以确保如果嗅探网络流量(未经授权的一方拦截并读取),则数据包的内容将无法读取。
- 数据传输的完整性
SSH协议确保了与服务器之间传输的所有数据的完整性。 如果第三方尝试更改数据包,则SSH会检测到此情况并向用户发出警报。
OpenSSH项目
OpenBSD项目负责创建OpenSSH(SSH协议1和2的免费实现),以提供不受限制许可限制的Secure Shell实现。 OpenSSH最初包含在OpenBSD 2.6发行版中。 产生的代码的质量和安全性非常好,并且可以很快移植到其他UNIX操作系统。
目前,OpenSSH的开发分为两个团队。 一个团队严格执行基于OpenBSD的开发,旨在产生尽可能干净,简单和安全的代码。 另一个团队则采用了干净的版本并使其可移植,因此它可以在包括AIX在内的许多不同操作系统上构建和运行。 可以通过版本号中的“ p”标识可移植的发行版(例如,OpenSSH 3.0.1p1); 没有“ p”的源代码发行版只能在OpenBSD上编译。
收集碎片
配方成分
像许多其他开源软件项目一样,OpenSSH建立在其他应用程序的工作和组件之上,以执行其任务。 这使OpenSSH的开发人员可以专注于创建稳定和安全的代码,这些代码是应用程序的核心,同时依靠其他应用程序开发人员的专业知识和能力来确保这些组件按设计执行。
不幸的是,该模型使OpenSSH的部署有点像配方:需要分别下载和编译大量组件,并且各种应用程序通常使用不同的系统来配置,编译和安装其代码。
取得先决条件
要编译和部署OpenSSH,需要以下开源软件项目。 列出的每个软件包的版本号是本教程发行时的最新稳定版本。 检查项目的网站以了解有关更新的发行版。
-
gzip
:GNU Zip压缩应用程序项目网站: http : //www.gnu.org/software/gzip/gzip.html
源代码下载: ftp : //ftp.gnu.org/gnu/gzip/gzip-1.2.4a.tar -
zlib
:zlib
压缩库项目网站: http : //www.gzip.org/zlib/
-
prngd
:伪随机数生成守护进程源代码下载: ftp : //ftp.aet.tu-cottbus.de/pub/postfix_tls/related/prngd/prngd-0.9.23.tar.gz
- OpenSSL :安全套接字层和传输层安全性工具套件
项目网站: http : //www.openssl.org/
- TCP包装器 :Internet服务器的访问控制(可选)
项目网站: ftp : //ftp.porcupine.org/pub/security/index.html l
源代码下载: ftp : //ftp.porcupine.org/pub/security/tcp_wrappers_7.6.tar.gz - OpenSSH :安全Shell协议的开源实现
项目网站: http : //www.openssh.com/
源代码下载: ftp : //ftp5.usa.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-3.0.1p1.tar.gz
编译并安装gzip
GNU Zip( gzip
)是类似于标准UNIX压缩/解压缩应用程序的开源数据压缩程序,但是不受可能影响其作为自由软件地位的专利的限制。
尽管gzip
不是构建OpenSSH的先决条件,但在解压缩本教程后面使用的源包时,必须使用gzip
。 gzip
格式最常用于在Internet上分发免费软件,因此几乎需要将它存在于AIX系统上。
幸运的是,可以使用未压缩的磁带存档( tar
)格式提供gzip
的源。 下载完压缩包并将其保存到/usr/local/src
,执行以下命令:
tar xvf gzip-1.2.4a.tar cd gzip-1.2.4a ./configure && make check
自动配置和编译完成后,将输出以下行:
gzip test OK rm -f _gztest*
现在,运行make install
命令(以root用户身份); 以下文件将安装在/usr/local
的相应子目录中:
/usr/local/man/man1/gzip.1 /usr/local/man/man1/gzexe.1 /usr/local/man/man1/zdiff.1 /usr/local/man/man1/zgrep.1 /usr/local/man/man1/zmore.1 /usr/local/man/man1/znew.1 /usr/local/man/man1/zforce.1 /usr/local/man/man1/zcat.1 /usr/local/man/man1/zcmp.1 /usr/local/man/man1/gunzip.1 /usr/local/bin/gzip /usr/local/bin/zdiff /usr/local/bin/zgrep /usr/local/bin/zmore /usr/local/bin/znew /usr/local/bin/zforce /usr/local/bin/gzexe /usr/local/bin/zcmp /usr/local/bin/gunzip /usr/local/bin/zcat /usr/local/info/gzip.info
构建并安装zlib
Zlib
是许多开源软件项目使用的无损通用压缩库。 该库使用与gzip
程序相同的压缩算法,比UNIX压缩使用的算法更有效。
下载最新版本的zlib
的源代码后,将其放在/usr/local/src
,然后运行以下命令:
gunzip -c zlib-1.1.3.tar.gz | tar xvf - cd zlib-1.1.3 vi Makefile
编辑Makefile
,在CFLAGS
行的末尾添加-qmaxmem = -1 :
CFLAGS=-O -qmaxmem=-1
运行make test
命令来编译和测试该库。 完成该过程后,屏幕上显示的最后一行将是:
*** zlib test OK ***
以root身份运行make install
将以下头文件和库make install
到正确的位置:
/usr/local/lib/libz.a /usr/local/include/zlib.h /usr/local/include/zconf.h
注意: -qmaxmem = -1是特定于IBM C for AIX编译器的选项。 它告诉编译器在编译过程中使用尽可能多的内存,以获得最佳的二进制优化。
编译并安装prngd
伪随机数生成器守护程序prngd
在不包含/dev/random
文件的平台上提供了一个熵源。 熵或随机性是任何加密过程的组成部分。 生成大量真实的随机数据对于保护密码,秘密短语和其他加密数据至关重要。 许多UNIX平台通过/dev/random
提供内核级的随机数据源。
不幸的是,AIX 4.3或5.1不包括这种随机性来源。 在AIX和其他缺少/dev/random
, prngd
应用程序可以提供OpenSSH和其他加密软件所需的熵。
将最新版本的prngd
的源下载到/usr/local/src
,运行以下命令:
gunzip -c prngd-0.9.23.tar.gz | tar xvf - cd prngd-0.9.23.tar.gz vi Makefile
在Makefile
找到AIX 4.3 w / cc部分; 取消注释,并在CFLAGS
行中添加-qmaxmem = -1标志,以使其如下所示:
# AIX 4.3 w/cc ("Joerg Petersen <j.petersen@msh.de>) # Please also check out contrib/AIX-4.3/00README.aix-src CFLAGS=-O -DAIX43 -qmaxmem=-1 # SYSLIBS=
然后可以通过发出make
命令来编译源。 prngd Makefile
不包含安装守护程序的规则。 必须通过运行以下命令手动安装它:
mkdir /usr/local/sbin ; cp prngd /usr/local/sbin/ cp contrib/prngd.conf.aix43 /etc/prngd.conf
prngd
守护进程运行的时间越长,它可以提供给其他使用熵的应用程序的随机性越好。 因此,该守护程序应该在启动时运行,并且永远不要退出。 在启动时有多种运行守护程序的方法。 本教程将介绍一个使用AIX系统资源控制器(SRC)的工具。 通过使用SRC,将提供用于启动,停止和查询子系统状态的一致接口。
要创建用于控制prngd
守护程序的子系统,请发出以下命令:
/usr/bin/mkssys -s prngd -p /usr/local/sbin/prngd -a '-f -c /etc/prngd.conf -s /var/tmp/egd-seed /dev/egd-pool' -u 0 -S -n 15 -f 9 -R -G local
现在可以通过执行startsrc -s prngd
命令来启动prngd
子系统。 要使prngd
子系统在系统引导时启动,请输入以下命令,该命令会在/etc/inittab
添加一个条目:
/usr/sbin/mkitab "prngd:2:wait:startsrc -s prngd > /dev/console 2>&1"
构建并安装OpenSSL
OpenSSL是安全套接字层(SSL)和传输层安全性(TLS)协议的开源实现。 OpenSSL随附的通用密码库被包括OpenSSH在内的许多与加密有关的应用程序所使用。
将最新版本的OpenSSL源码下载到/usr/local/src
,运行以下命令:
gunzip -c openssl-0.9.6b.tar.gz | tar xvf -cd openssl-0.9.6b ./config && make && make test
注意:OpenSSL是一个大而复杂的软件包。 编译和测试可能需要很长时间,尤其是在速度较慢的系统上。 测试套件完成后,类似于以下内容的文本将被打印到屏幕上:
OpenSSL 0.9.6b 9 Jul 2001 built on: Sat Nov 17 17:41:15 PST 2001 platform: aix43-cc options: bn(64,32) md2(int) rc4(ptr,char) des(idx,cisc,4,long) idea(int) blowfish(idx) compiler: cc -DDSO_DLFCN -DHAVE_DLFCN_H -O -DAIX -DB_ENDIAN -qmaxmem=16384 Target "test" is up to date.
现在以root身份运行make install
以安装必需的程序文件:
/usr/local/ssl/man/man1/CA.pl.1 /usr/local/ssl/man/man1/asn1parse.1 /usr/local/ssl/man/man1/ca.1 /usr/local/ssl/man/man1/ciphers.1 /usr/local/ssl/man/man1/crl.1 /usr/local/ssl/man/man1/crl2pkcs7.1 /usr/local/ssl/man/man1/dgst.1 /usr/local/ssl/man/man1/dhparam.1 ---[snip]--- many, many similar lines... /usr/local/ssl/include/openssl/ssl3.h /usr/local/ssl/include/openssl/ssl23.h /usr/local/ssl/include/openssl/tls1.h /usr/local/ssl/misc/CA.sh /usr/local/ssl/misc/CA.pl /usr/local/ssl/misc/der_chop /usr/local/ssl/misc/c_hash /usr/local/ssl/misc/c_info /usr/local/ssl/misc/c_issuer /usr/local/ssl/misc/c_name /usr/local/ssl/openssl.cnf
生成并安装TCP包装程序(可选)
TCP包装器提供了一个简单的应用程序tcpd
,该应用程序可用于基于客户端的IP地址来限制对各种网络服务的访问。 它经常被使用,并且实际上是为inetd产生的“包装”服务而设计的。 该软件包还提供了一个库libwrap.a
,该应用程序(包括OpenSSH)可以链接并获取TCP Wrappers提供的访问控制。 虽然不必部署OpenSSH,但TCP Wrappers可以增加管理员可能会喜欢的另一级访问控制和日志记录功能。
要构建TCP Wrappers,将源代码发行版下载到/usr/local/src
后,发出以下命令:
gunzip -c tcp_wrappers_7.6.tar.gz | tar xvf - cd tcp_wrappers_7.6 vi Makefile
在编译源代码之前,需要对Makefile
进行几处更改:
- 取消注释AIX的REAL_DAEMON_DIR行,使其显示为:
# SysV.4 Solaris 2.x OSF AIX REAL_DAEMON_DIR=/usr/sbin
- 取消注释以下行:
#STYLE = -DPROCESS_OPTIONS # Enable language extensions.
- 更改行:
FACILITY= LOG_MAIL # LOG_MAIL is what most sendmail daemons use
至
FACILITY= LOG_LOCAL7 # tcpd messages will be logged to facility local7
- 更改行:
TABLES = -DHOSTS_DENY=\"/etc/hosts.deny\" -DHOSTS_ALLOW=\"/etc/hosts.allow\"
至
TABLES = -DHOSTS_DENY=\"/etc/tcpd.conf\" -DHOSTS_ALLOW=\"/etc/tcpd.conf\"
- 将
-qmaxmem=-1
添加到CFLAGS块中:CFLAGS = -O -DFACILITY=$(FACILITY) $(ACCESS) $(PARANOID) $(NETGROUP) \ $(BUGS) $(SYSTYPE) $(AUTH) $(UMASK) \ -DREAL_DAEMON_DIR=\"$(REAL_DAEMON_DIR)\" $(STYLE) $(KILL_OPT) \ -DSEVERITY=$(SEVERITY) -DRFC931_TIMEOUT=$(RFC931_TIMEOUT) \ $(UCHAR) $(TABLES) $(STRINGS) $(TLI) $(EXTRA_CFLAGS) $(DOT) \ $(VSYSLOG) $(HOSTNAME) -qmaxmem=-1
将以上更改保存到Makefile
,运行make aix
命令来编译源代码。
TCP Wrappers的Makefile
不包含安装目标。 要将文件放置在正确的位置,请输入以下根命令:
cp tcpdchk safe_finger try-from tcpdmatch tcpd /usr/local/sbin/ cp libwrap.a /usr/local/lib/ cp hosts_access.3 /usr/local/man/man3/ cp hosts_access.5 hosts_options.5 /usr/local/man/man5/ cp tcpd.8 tcpdchk.8 tcpdmatch.8 /usr/local/man/man8/ mkdir -p /usr/local/share/tcpd/ cp Banners.Makefile /usr/local/share/tcpd/ mkdir /usr/local/include/ cp tcpd.h /usr/local/include/ touch /etc/tcpd.conf
本教程将不详细介绍TCP包装程序的配置。 有关用法和配置设置的说明,请参见随附的自述文件和手册页。
构建OpenSSH
构建配置选项
既然已经具备了所有前提条件,则可以编译OpenSSH源。 将最新版本的OpenSSH源下载到/usr/local/src
,使用以下命令提取内容:
gunzip -c openssh-3.0.1p1.tar.gz | tar xvf -cd openssh-3.0.1p1
在编译时必须定义许多选项,在编译过程中可以设置其默认值的其他选项很多。 有关所有编译时配置选项的列表和说明,请在源目录中键入./configure --help
命令。 就本教程而言,指定了以下选项:
./configure --sysconfdir=/etc/ssh --with-cflags="-qmaxmem=-1" --with-tcp-wrappers --with-xauth=/usr/bin/X11/xauth --with-prngd-socket=/dev/egd-pool --with-ipv4-default --with-pid-dir=/var/tmp
配置完成后,选项摘要将显示在屏幕上,类似于:
OpenSSH has been configured with the following options: User binaries: /usr/local/bin System binaries: /usr/local/sbin Configuration files: /etc/ssh Askpass program: /usr/local/libexec/ssh-askpass Manual pages: /usr/local/man/manX PID file: /var/tmp sshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin Random number collection: PRNGD/EGD (socket /dev/egd-pool) Manpage format: man PAM support: no KerberosIV support: no Smartcard support: no AFS support: no S/KEY support: no TCP Wrappers support: yes MD5 password support: no IP address in $DISPLAY hack: no Use IPv4 by default hack: yes Translate v4 in v6 hack: no Host: powerpc-ibm-aix4.3.3.0 Compiler: cc Compiler flags: -g -qmaxmem=-1 Preprocessor flags: -I/usr/local/ssl/include -I/usr/local/include Linker flags: -L/usr/local/ssl/lib -L/usr/local/lib -blibpath:/usr/lib:/lib:/usr/local/lib Libraries: -lwrap -lz -lcrypto
编译并安装组件
发出make
命令以编译源代码。 构建完成后,以root身份运行jmake install
install将各种文件安装在适当的位置。
以下文件安装在/usr/local
:
/usr/local/man/man1/ssh.1 /usr/local/man/man1/scp.1 /usr/local/man/man1/ssh-add.1 /usr/local/man/man1/ssh-agent.1 /usr/local/man/man1/ssh-keygen.1 /usr/local/man/man1/ssh-keyscan.1 /usr/local/man/man1/sftp.1 /usr/local/man/man8/sshd.8 /usr/local/man/man8/sftp-server.8 /usr/local/bin/ssh /usr/local/bin/scp /usr/local/bin/ssh-add /usr/local/bin/ssh-agent /usr/local/bin/ssh-keygen /usr/local/bin/ssh-keyscan /usr/local/bin/sftp /usr/local/sbin/sshd /usr/local/share/Ssh.bin /usr/local/libexec/sftp-server
还创建了配置目录/ etc / ssh。 它包含以下文件:
/etc/ssh/ssh_config /etc/ssh/sshd_config /etc/ssh/ssh_prng_cmds /etc/ssh/moduli /etc/ssh/ssh_host_key /etc/ssh/ssh_host_key.pub /etc/ssh/ssh_host_dsa_key /etc/ssh/ssh_host_dsa_key.pub /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key.pub
配置和用法
主机密钥
在安装过程中,将生成主机密钥并将其放置在/etc/ssh
。 主机密钥有以下三种类型。 每个主机密钥由两个文件(一个密钥对 )组成:一个秘密部分(其内容除root用户外不可由其他用户访问)和一个公共部分,其每次启动连接时均将其内容传输到客户端系统。
在与服务器的每个新连接开始时,客户端会将服务器的主机密钥的公共部分与先前连接中的一个进行比较,并保存在用户主目录中的文件中。 如果当前版本和先前版本不相同,则客户端会向用户发出警告,警告该服务器连接可能已被欺骗或破坏,并且不应被信任。 因此,备份服务器密钥并确保在OpenSSH软件升级期间不替换这些文件非常重要。
密钥对的三种类型是:
-
ssh_host_key
和ssh_host_key.pub
这对文件包含当客户端使用Secure Shell协议的版本1连接到服务器时将使用的主机密钥。 该密钥对使用Rivest-Shamir-Adleman(RSA)算法进行加密。
-
ssh_host_dsa_key
和ssh_host_dsa_key.pub
该密钥对包含用于通过Secure Shell协议版本2连接的客户端的主机密钥。 它使用数字签名算法(DSA)公钥算法进行加密。
-
ssh_host_rsa_key
和ssh_host_rsa_key.pub
该密钥对与连接了Secure Shell协议版本2的客户端一起使用。 它还使用RSA算法进行加密,最常用于从协议1版本转换为协议2的密钥对。
如果包含密钥对的公用部分的文件已损坏,则可以使用ssh-keygen
实用程序从机密部分轻松地重新生成该文件。 如果专用部分因安全漏洞而损坏或受损,则整个密钥对将无用,必须重新生成。 如果发生这种情况,必须告知系统所有用户新的主机密钥,并且他们将不得不从其~/.ssh/known_hosts
或known_hosts2
文件中删除旧服务器密钥的公共部分。 如果没有,他们每次连接到服务器时都会收到一条警告消息,或者,根据他们的本地配置,他们将完全无法连接。
设置配置选项
安全Shell服务器( sshd
)选项在/etc/ssh/sshd_config
文件中定义。 在安装过程中,会将默认文件放置在该位置。 有关所有可能选项的列表和说明,请参见sshd(8)
手册页。 一些较常见的选项及其推荐设置为:
-
DenyGroups
该关键字后可以跟多个组名,以空格分隔。 主要组或补充组列表与其中一种模式匹配的用户不允许登录。“ *”和“?” 可以用作模式中的通配符。 仅组名有效; 无法识别数字组ID。 默认情况下,无论组列表如何,都允许登录。
-
DenyUsers
该关键字后可以跟多个用户名,用空格分隔。 不允许使用与其中一种模式匹配的用户名登录。 “ *”和“?” 可以用作模式中的通配符。 只有用户名有效; 无法识别数字用户ID。 默认情况下,无论用户名如何,都允许登录。
-
HostbasedAuthentication
指定是否允许
rhosts
或/etc/hosts.equiv
身份验证以及成功的公钥客户端主机身份验证(基于主机的身份验证)。 此选项类似于RhostsRSAAuthentication
,仅适用于协议版本2。 默认为“否”。 -
IgnoreRhosts
指定
.rhosts
和.shosts
文件将不在RhostsAuthentication
,RhostsRSAAuthentication
或HostbasedAuthentication
。/etc/hosts.equiv
和/etc/shosts.equiv
仍在使用。 默认值为“是”。 -
LogLevel
给出从
sshd
记录消息时使用的详细程度。 可能的值为:QUIET,FATAL,ERROR,INFO,VERBOSE和DEBUG。 默认值为INFO。 使用DEBUG级别的日志记录侵犯了用户的隐私,因此不建议这样做。 -
PermitRootLogin
指定root是否可以使用
ssh(1)
登录。 参数必须为“是”,“无密码”,“仅强制命令”或“否”。 默认值为“是”。 如果将此选项设置为“无密码”,则root用户的密码身份验证被禁用。 如果将此选项设置为“仅强制命令”,则将允许使用公共密钥身份验证的root用户登录,但是仅在指定了command选项的情况下(即使通常不允许root用户登录,这对于进行远程备份也很有用。 )。 root禁用所有其他身份验证方法。 如果此选项设置为“ no”,则不允许root用户登录。 -
Protocol
指定
sshd
应该支持的协议版本。 可能的值为“ 1”和“ 2”。 多个版本必须用逗号分隔。 默认值为“ 2,1”。 -
RhostsAuthentication
指定使用
rhosts
或/etc/hosts.equiv
文件进行身份验证是否足够。 通常,由于此方法不安全,因此不应使用。 应该改用RhostsRSAAuthentication
,因为它除了执行普通的rhosts
或/etc/hosts.equiv
身份验证外,还执行基于RSA的主机身份验证。 默认为“否”。 此选项仅适用于协议版本1。 -
RhostsRSAAuthentication
指定是否允许
rhosts
或/etc/hosts.equiv
身份验证以及成功的RSA主机身份验证。 默认为“否”。 此选项仅适用于协议版本1。 -
StrictModes
指定
sshd
在接受登录之前是否应检查文件模式以及用户文件和主目录的所有权。 这通常是可取的,因为新手有时会不小心将其目录或文件写在世界范围内。 默认值为“是”。 -
Subsystem
配置外部子系统(例如,文件传输守护程序)。 参数应为子系统名称,以及应子系统请求执行的命令。
sftp-server(8)
命令实现“ sftp”文件传输子系统。 默认情况下,未定义任何子系统。 请注意,此选项仅适用于协议版本2。 -
SyslogFacility
提供从
sshd
记录消息时使用的工具代码。 可能的值为:DAEMON,USER,AUTH,LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5,LOCAL6,LOCAL7。 默认值为AUTH。 -
X11Forwarding
指定是否允许X11转发。 默认为“否”。 请注意,禁用X11转发不会以任何方式提高安全性,因为用户始终可以安装自己的转发器。 如果启用了
UseLogin
则会自动禁用X11转发。
保持配置默认值
即使设置为默认值,设置选项也很有用,因为默认值可能会在版本之间更改。 使用前面板上讨论的选项设置, /etc/ssh/sshd_config
配置文件如下所示:
############################################################# # # /etc/ssh/sshd_config # # configuration file for the OpenSSH ssh daemon # ############################################################ # deny connections from members of these groups: DenyGroups uucp, mail, nobody, nogroup # deny connections from these users: DenyUsers daemon, bin, sys, adm, uucp, guest, nobody, lpd # allow host-based authentication (.rhosts and /etc/hosts.equiv) # if the host key exchange was successful. I realize that this # is reducing the security of my server. [ protocol 2 only] HostbasedAuthentication yes # permit the use of user .rhosts and .shosts files. Again, I # release that I am reducing the security of my server in favor # of functionality for clients: IgnoreRhosts no # messages logged to syslog from sshd will be at priority INFO: LogLevel INFO # root will not be permitted to log in interactively, but can # run commands remotely ... PermitRootLogin forced-commands-only # accept protocol 2 connections first, then fall back to protocol 1 Protocol 2,1 # straight .rhosts authentication will not be permitted, as this is # exactly the same as "rsh/rcp" ... RhostsAuthentication no # however, .rhosts authentication with successful RSA host # authentication will be permitted [protocol 1 only]: RhostsRSAAuthentication yes # ensure that the permissions on a user's ssh-related files are # set properly; deny connections if they are not: StrictModes yes # define the subsystem "sftp" to enable the secure replacement for # the ftp protocol: Subsystem sftp /usr/local/libexec/sftp-server # have syslogd dispatch sshd messages to the AUTH facility ... SyslogFacility AUTH # permit the forwarding of X11 connections. This doesn't decrease # security at all ... X11Forwarding yes ############################################################
在系统启动时运行SSH守护程序
AIX提供了许多方法,可以在系统重新引导时自动启动程序或服务。 本教程介绍了使用AIX的系统资源控制器(SRC)功能的一种可能性。 使用SRC提供了一种与AIX系统上存在的其他子系统一致的控制守护程序的方法。
要创建将控制sshd
守护程序的子系统,请以root身份发出以下命令:
/usr/bin/mkssys -s sshd -p /usr/local/sbin/sshd -a '-D' -u 0 -S -n 15 -f 9 -R -G local
这将创建一个名为“ sshd”的新子系统。 由该子系统启动的程序是/usr/local/sbin/sshd
带有“ -D”参数。 该程序将以root用户身份运行,并将使用信号与SRC进行通信。 当请求停止时,向守护程序发送TERM信号,如果失败,则发送KILL信号。 如果子系统异常停止,它将重新启动,并将其包含在名为“ local”的SRC组中。
要使子系统在系统引导时启动,请运行以下命令以在prngd
条目之后将条目添加到/etc/inittab
:
/usr/sbin/mkitab -i prngd "sshd:2:wait:startsrc -s sshd > /dev/console 2>&1"
更换不安全的网络服务
更换telnet
服务
用更安全的ssh
协议替换不安全的telnet
协议很简单。 用户将不得不使用ssh
客户端代替其telnet
客户端。 通过telnet
连接时,用户输入$ telnet earth
。
然后提示他们输入用户名和密码:
Trying 123.456.789.012 ... Connected to earth.galaxy.com Escape character is '^] AIX Version 4 (C) Copyrights by IBM and by others 1982, 1996. login: user user's Password: ******
如果用户帐户和密码正确,则对用户进行身份验证并提供对系统的访问权限。 要使用ssh
执行相同的操作,用户键入:
$ ssh earth user@earth's password: ******
与telnet
,如果指定的用户帐户和密码有效,则该用户将登录。 但是,区别在于,客户端和服务器之间的所有网络流量(包括用户名和密码)都经过加密,从而使它们不受数据包嗅探攻击的影响。 SSH客户端在连接到远程系统时通常使用在客户端系统上登录的用户名。 如果最终用户希望使用其他用户帐户,则需要在主机名之前添加该帐户名,并带有“ @”符号。 例如:
$ ssh user@earth
通过删除或注释掉/etc/inetd.conf
的telnet
条目,应该在服务器上禁用telnet
服务。
更换“ r
”服务
r
服务是那些仅使用用户主目录中的/etc/hosts.equiv
文件和~/.rhosts
文件执行身份验证的服务。 这些服务包括rsh
, rlogin
和rcp
。 所有这些服务都可以用OpenSSH代替,从而以指数方式提高了服务器的整体安全性。 取决于服务器管理员在/etc/ssh/sshd_config
文件中设置的选项,可以对这些服务的使用施加几层“安全性”。
OpenSSH发行版包括替换不安全的r
命令所需的客户端程序和服务器程序。 对于下表中显示的示例,假定:
- 客户端系统的标准域名在名为Earth的服务器上的
/etc/hosts.equiv
文件中或在用户的主目录中的.rhosts
文件中列出。 - 如果客户端是UNIX系统,则
ssh
程序是set-UID根目录,并且在/etc/ssh_config
配置文件中具有UsePriveligedPort yes
选项。 - 服务器地球上的
/etc/sshd_config
文件包含以下选项:HostbasedAuthentication yes
,IgnoreRhosts no
和RhostsRSAAuthentication yes
- 客户端系统的公共密钥位于服务器的全局已知主机文件中,或者位于用户的已知主机文件中。
不安全的命令 | 安全等效 | 动作已执行 | 安全优势 |
---|---|---|---|
rsh earthrlogin earth | ssh earthslogin earth | 为用户提供了一个名为Earth的服务器上的交互式登录会话,而无需输入密码。 | 对照服务器的已知主机文件检查客户机系统的主机密钥。 如果它们不匹配,则拒绝连接。 服务器与客户端之间的所有通信均已加密。 |
rsh earth uptime | ssh earth uptime | 在名为Earth的服务器上执行uptime命令,而无需输入密码。 | |
rcp earth:/etc/passwd /tmp/earth-passwd | scp earth:/etc/passwd /tmp/earth-passwd | 从名为Earth的服务器复制/etc/passwd 文件,并将其保存为/tmp/earth-passwd 在本地系统/tmp/earth-passwd ,而无需用户输入密码。 |
rexec
命令虽然命名类似,但使用了一种不同的方法,但是又不安全,该方法授权远程用户在服务器上运行命令而无需输入密码。 客户端系统上用户主目录中的.netrc
文件而不是.rhosts
文件,而是包含用户名和密码。 该数据以及通过网络传输的所有其他数据均以明文形式发送。 通过使用ssh
客户端执行命令的能力,可以避免使用rexec
服务,并且可以在服务器上禁用提供此服务的守护程序。
为了利用由OpenSSH替代提供的增强的安全性,应该将login
, shell
和exec
服务注释掉或从服务器的/etc/inetd.conf
删除。
替换ftp
服务
对于那些需要提供交互式文件传输服务的系统, sftp-server
包含在OpenSSH发行版中。 使用与ssh
相同的身份验证和加密方法,用户可以使用sftp
客户端程序连接到远程服务器或从远程服务器传输文件。 尽管sftp-server
程序缺少ftpd
守护程序的某些“花哨”功能,但sftp
程序的操作类似于标准的FTP客户端。
如果sftpd-server
程序提供的功能满足FTP服务的要求,则应通过注释掉或删除/etc/inetd.conf
的ftp
条目来禁用标准ftpd
守护程序。
摘要
摘要
Secure Shell协议是一种灵活而强大的工具。 本教程仅涉及其功能的表面。 SSH可以以多种不同方式使用,包括但不限于:保护远程X11会话,为未设计这种保护的服务提供加密,使用公钥提供无缝登录以及特定命令的安全执行等。 。
OpenSSH可以扩展为包括Kerberos身份验证,AFS令牌传递,智能卡支持以及许多其他相关技术。 有关在OpenSSH中使用这些功能和其他功能的更多信息,请参考下一面板的参考和资源部分中列出的项目。
翻译自: https://www.ibm.com/developerworks/aix/tutorials/aix_ssh/index.html