OpenSSH-4.7p1 安装指南

发布于 2021-07-13 13:22:12 字数 6613 浏览 1422 评论 0

系统需求

你必须在系统上安装有 Zlib(1.2.1.2 以上)和 OpenSSL(0.9.6 以上),这两个是必须的。如果你的操作系统提供了 /dev/random ,那么应该将 OpenSSL 配置为使用此文件作为随机数源。

下面这些软件包是可选的:PRNGD,EGD,PAM,GNOME,TCP Wrappers,S/Key Libraries,LibEdit,Autoconf,Basic Security Module (BSM) ;仅在你确实需要使用到的时候才需要。

特权分离(Privilege Separation)

所谓特权分离(Privilege Separation)实际上是一种OpenSSH的安全机制,类似于chroot能够提供的安全性。这个特性是默认开启的,配置文件中的 UsePrivilegeSeparation 指令可以开启或关闭这个特性。

使用此特性的关键之处在于设置一个空目录,并将此目录的权限设置为"000",宿主设置为"root"。然后还需要设置一个用于特权分离的非特权用户,比如sshd,并将此用户的家目录设置为这个空目录。比如可以使用下面这样的命令:

  # mkdir -p  /var/empty
  # chown 0:0 /var/empty
  # chmod 000 /var/empty
  # groupadd sshd
  # useradd -g sshd -c 'sshd privsep' -d /var/empty -s /bin/false sshd

然后在运行配置脚本的时候,使用

  --with-privsep-path=/var/empty
  --with-privsep-user=sshd

来指定目录和用户。

配置和编译

将下载回来的压缩包解压,进入解压后的目录,即可使用 configure 脚本进行配置。下面是 configure 选项的说明:

--prefix=PREFIX
安装目录[/usr/local]
--sbindir=DIR
系统管理员使用的可执行程序目录[EPREFIX/sbin]
--sysconfdir=DIR
配置文件目录[PREFIX/etc]
--disable-largefile
禁用大文件(>2G)支持
--disable-strip
禁止在安装时调用strip来剥除不需要的调试符号
--disable-etc-default-login
不使用/etc/default/login文件中提供的PATH环境变量,推荐使用此选项
--disable-lastlog
禁止使用lastlog文件(记录每个用户最后登录成功的信息)
--disable-utmp
禁止使用utmp文件(记录着现在登录的用户)
--disable-utmpx
禁止使用utmpx文件(utmp的扩展)
--disable-wtmp
禁止使用wtmp文件(记录用户登录和退出事件)
--disable-wtmpx
禁止使用wtmpx文件(wtmp的扩展)
--disable-libutil
禁止使用libutil库(包含了很多"标准"函数,比如login()等等)
--disable-pututline
禁止使用pututline()函数(用来记录utmp文件)
--disable-pututxline
禁止使用pututxline()函数(用来记录utmpx文件)
--without-rpath
不在二进制文件中硬编码库文件的路径,也就是禁止添加 -R 连接器选项
--with-cflags
指定额外的编译器选项
--with-cppflags
指定额外的预处理器选项
--with-ldflags
指定额外的连接器选项
--with-libs
指定需要额外连接的库
--with-Werror
使用 -Werror 编译器选项编译代码。也就是将所有警告都当作错误。
--with-solaris-contracts
启用实验性的 Solaris process contracts
--with-osfsia
启用OSF1机器上的SIA(Security Integration Architecture)
--with-zlib=DIR
指定zlib库的安装目录
--without-zlib-version-check
禁止检查zlib的版本是否合适
--with-skey[=PATH]
启用 S/Key 支持。S/Key是一个在密码认证时使用一次性密码的系统。
--with-tcp-wrappers[=DIR]
启用TCP-wrappers支持(/etc/hosts.allow|deny),还可以指定wrapper库的安装目录。TCP-wrappers可以根据源地址执行访问控制。
--with-libedit[=PATH]
在 sftp 中使用libedit支持
--with-audit=debug|bsm
启用实验性的审计支持,目前只有debug(通过syslog记录额外的信息)和bsm(Sun的Basic Security Module)两种模式可选。
--with-ssl-dir=DIR
指定 OpenSSL 的安装目录
--without-openssl-header-check
禁止对OpenSSL的版本一致性进行检查
--with-ssl-engine
启用OpenSSL的ENGINE支持
--with-pam
启用PAM(Pluggable Authentication Modules)支持,使用此选项后还必须在sshd_config中开启UsePAM指令。
--with-random=FILE
指定操作系统提供的随机源文件(通常是/dev/random或/dev/urandom)
--with-rand-helper
仅在操作系统没有提供随机源的时候才需要使用这个选项来使用一个额外的ssh-rand-helper辅助程序来生成随机数。
--with-prngd-port=PORT
如果操作系统没有提供随机源并且还安装了EGD/PRNGD包,那么可以使用这个选项指定从PRNGD/EGD TCP localhost:PORT读取熵,而不使用内置的熵收集器。
--with-prngd-socket=FILE
如果操作系统没有提供随机源并且还安装了EGD/PRNGD包,那么可以使用这个选项指定从PRNGD/EGD socket FILE(默认为/var/run/egd-pool)读取熵,而不使用内置的熵收集器。
--with-entropy-timeout=N
指定熵收集命令的超时时间(毫秒)
--with-privsep-user=USER
指定运行非特权子进程的用户名
--with-privsep-path=xxx
指定非特权用户的chroot目录(默认为:/var/empty)
--with-sectok
使用libsectok以提供对智能卡的支持
--with-opensc[=PFX]
使用OpenSC以提供对智能卡的支持
--with-selinux
启用SELinux支持
--with-kerberos5=DIR
启用 Kerberos 5 支持
--with-xauth=FILE
指定 xauth 程序的绝对路径
--with-mantype=man|cat|doc
指定man page的类型
--with-md5-passwords
支持读取/etc/passwd或/etc/shadow中经过MD5加密的口令
--without-shadow
表明操作系统未使用影子密码(无需读取/etc/shadow而是直接读取/etc/passwd即可)
--with-ipaddr-display
在X转发时,在$DISPLAY中使用ip地址而不是主机名。这样可以解决和一些有缺陷的X库一起工作时遇到的麻烦。
--with-default-path=PATH
指定服务器运行时默认的 PATH 环境变量的值(冒号分隔的路径列表)
--with-superuser-path=PATH
指定服务器运行时默认的root用户的 PATH 环境变量的值(冒号分隔的路径列表)
--with-4in6
OpenSSH默认尽可能使用IPv6,除非明确给出了"-4"命令行选项。这个选项表示对IPv4地址进行检查,并且将其转换成IPv6的映射地址
--with-bsd-auth
启用BSD认证支持
--with-pid-dir=DIR
指定保存当前服务器主进程进程号的 ssh.pid 文件的存放目录[/var/run/sshd.pid]
--with-lastlog=FILE|DIR
指定 lastlog 文件的位置

configure 运行完毕后就可以使用 make 命令进行编译了,你可以在命令行上使用 CFLAGS 和 LDFLAGS 来指定进行编译优化。

测试

如果编译过程一切正常,那么接下来就可以使用 make tests 进行测试了。

OpenSSH的测试套件包含两个部分,第一部分是由Makefile驱动的基于文件的测试;第二部分是由regress/test-exec.sh脚本(会被Makefile多次调用)驱动的基于网络(network)或代理命令(proxycommand)的测试。第一部分测试失败将导致Makefile返回一个错误(make程序会退出),第二部分测试失败将会打印"FATAL"信息并继续执行。

下面是几个与测试相关的环境变量:

SUDO
sudo 命令的路径。需要注意的是,有些系统(特别是使用了PAM的系统)要求必须使用 sudo 来执行某些测试。
TEST_SSH_TRACE
设为"yes"以输出详细且罗嗦的测试信息
TEST_SSH_QUIET
设为"yes"以抑制测试成功的输出信息(仅输出失败信息)
TEST_SSH_x
测试中使用的各个命令的路径,其中的 x=SSH,SSHD,SSHAGENT,SSHADD,SSHKEYGEN,SSHKEYSCAN,SFTP,SFTPSERVER
TEST_SHELL
用于运行测试脚本的shell
TEST_SSH_PORT
用于监听测试的TCP端口
TEST_SSH_SSH_CONFOTPS
在运行每个测试前添加到ssh_config中的配置指令
TEST_SSH_SSHD_CONFOTPS
在运行每个测试前添加到sshd_config中的配置指令

已知的几个问题:

  • 如果你的编译过程依赖于ssh-rand-helper,那么除非预先安装ssh-rand-helper,否则测试将失败。
  • 类似的,如果你的$PATH环境变量中不包含"scp",那么multiplex scp测试将会失败。
  • 由于新版本的GNU coreutils反对使用"head -[n]"语法,这将导致yes-head测试失败,解决的办法是在测试前设置_POSIX2_VERSION=199209环境变量。
  • 笔者发现测试套件要求 /bin 目录下至少有两个"l"打头的文件,否则 sftp-badcmds 等测试会失败,这应当是一个bug 。

安装和配置

如果测试也通过了,那么接下来就是安装和配置了。安装很简单,一条 make install 命令即可,此命令会同时生成密钥对并安装默认的配置文件。

但是大多数情况下,我们会自己动手,重新生成密钥对,同时也会重新编辑配置文件。具体的细节可以参考 ssh-keygen(1)sshd_config(5) 手册页。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

烙印

文章 0 评论 0

singlesman

文章 0 评论 0

独孤求败

文章 0 评论 0

晨钟暮鼓

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文