SSHサーバー(OpenSSH)のインストール

概要:CentOS6.5にOpenSSH6.6p1をソースからインストールします。 通常はOpenSSH(ssh)はデフォルトでインストールされていますし、インストールするにしてもyumコマンドで簡単にインストールできるので、ソースからインストールすることはないと思います。
chrootSElinux下で使うためには以下のbugzillaで報告されているようにopenssh-6.1p1以降のバージョンが必要です。
Red Hat Bugzilla - Bug 830237
そのためここではopenssh-6.1p1をインストールします。
chrootまたはSELinuxを使用しない場合はopenssh-6.1p1は不要です。別の理由でソースからインストールが必要な場合は参考にしてください。
パッケージ管理のため一旦rpmパッケージを作成してからインストールします。 以下の作業では始めに既存SSHを出来るだけ使用し、既存SSHをアンインストール中は、Console画面から作業します。
因みに既存で発生した問題の時audit.log/messagesのログの内容は以下のようなもので、transitionが拒否されます。

type=AVC msg=audit(1397926707.245:120): avc:  denied  { transition } for  pid=13324 comm="sshd" path="/bin/bash" dev=dm-0 ino=135342 scontext=unconfined_u:system_r:chroot_user_t:s0-s0:c0.c1023  context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tclass=process

1. 既存のsshの設定のバックアップ

既存のsshを削除するので、設定ファイルをバックアップしておきます。(実際は/etc/sshの場合、古いファイルと新しいファイルが混在してややこしくなるため。)。また、/etc/ssh/sshd_configをConsole画面から修正するので自分のPC等にダウンロードしておくと便利だと思います。

# cd /etc
# cp -rp ssh ssh.backup     ←ディレクトリーごとバックアップします

# cd /etc/pam.d
#cp -p sshd sshd.backup

2. パッケージ作成に必要なパッケージのインストール

OpenSSHパッケージ作成に必要な以下のこのサーバーで未インストールのパッケージをyumコマンドでインストールしました。サーバーのインストール状況によって増減があります。

# yum -y install rpm-build
# yum -y install openssl-devel
# yum -y install libedit-devel
# yum -y install tcp_wrappers-devel
# yum -y install tcp_wrappers
# yum -y install pam-devel

3. OpenSSH6.6p1のソースのダウンロード

OpenSSHのホームページから該当/最新のソースファイルをダウンロードして下さい。ここではopenssh-6.6p1をダウンロードします。

# cd /tmp/work

  Japan (Saitama)からダウンロードする場合は
# http://www.ftp.ne.jp/OpenBSD/OpenSSH/portable/openssh-6.6p1.tar.gz

  Japan (Saitama)からダウンロードする場合は
# wget http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-6.6p1.tar.gz
--2014-01-01 00:00:00--  http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-6.6p1.tar.gz
Resolving ftp.jaist.ac.jp... 150.65.7.130, 2001:df0:2ed:feed::feed
Connecting to ftp.jaist.ac.jp|150.65.7.130|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1282502 (1.2M) [application/x-gzip]
Saving to: “openssh-6.6p1.tar.gz”

100%[================================================>] 1,282,502   7.22M/s   in 0.2s

2014-01-01 00:00:00 (7.22 MB/s) - “openssh-6.6p1.tar.gz” saved [1282502/1282502]

4. OpenSSHサーバーのパッケージ作成

  1. ) ダウンロードしたファイルを展開します。
    # tar zxvf openssh-6.6p1.tar.gz
    
  2. ) redhat用のspecファイルを編集します。
    # vi openssh-6.6p1/contrib/redhat/openssh.spec
    
    使用しない機能を無効化するために以下を修正します。
    運用に合わせて内容を修正して下さい。
    # Do we want to disable building of x11-askpass? (1=yes 0=no)
    %define no_x11_askpass 0
      
    %define no_x11_askpass 1 ← x11_askpassの無効化
    
    # Do we want to disable building of gnome-askpass? (1=yes 0=no)
    %define no_gnome_askpass 0
      
    %define no_gnome_askpass 1 ← gnome_askpassの無効化
    
  3. ) 不要なredhat以外の以下のディレクトリーを削除します。
    # cd /tmp/work/openssh-6.6p1/contrib
    # rm -rf aix/
    # rm -rf cygwin/
    # rm -rf caldera/
    # rm -rf hpux/
    # rm -rf solaris/
    # rm -rf suse/
    
  4. ) 既存圧縮ファイルを削除します。
    # cd /tmp/work
    # rm openssh-6.6p1.tar.gz
    
  5. ) 展開したファイルを再圧縮します。
    # tar czvf openssh-6.6p1.tar.gz openssh-6.6p1/
    
  6. ) RPMパッケージを作成します。
    # rpmbuild -tb --clean openssh-6.6p1.tar.gz
        :
    前略
        :
    Wrote: /root/rpmbuild/RPMS/x86_64/openssh-6.6p1-1.x86_64.rpm
    Wrote: /root/rpmbuild/RPMS/x86_64/openssh-clients-6.6p1-1.x86_64.rpm
    Wrote: /root/rpmbuild/RPMS/x86_64/openssh-server-6.6p1-1.x86_64.rpm
        :
    後略
        :
    
    パッケージが完了するとメッセージの終わりごろに上記のようなパッケージの作成場所が表示されるのでメモします。
    rpmbuildで下記のようなエラーがでた場合はyumでインストールして下さい。
    エラー: ビルド依存性の失敗:
         openssl-devel は openssh-6.6p1-1.x86_64 に必要とされています
    
  7. ) 作成されたRPMパッケージの確認
    # ls -l /root/rpmbuild/RPMS/x86_64
    total 1864
    -rw-r--r--. 1 root root 637011 Jan 01 00:00 openssh-6.6p1-1.x86_64.rpm
    -rw-r--r--. 1 root root 834999 Jan 01 00:00 openssh-clients-6.6p1-1.x86_64.rpm
    -rw-r--r--. 1 root root 432438 Jan 01 00:00 openssh-server-6.6p1-1.x86_64.rpm
    

5. 既存SSHサーバーアンインストール

既存の設定のバックアップをしていない場合は、上記のバックアップをしてください。
以下からはConsole画面からの操作します。

# service sshd stop ← SSHサーバー停止
stopping sshd:                                              [  OK  ]

# yum -y remove openssh ← openssh関連パッケージアンインストール
# rm -rf /etc/ssh ← 新しい設定が/etc/sshに上書きされ既存の設定がsshd_conf.rpmsaveのようにリネームしてバックアップされますがややこしいので削除します。(バックアップは既に取ってます)

6. SSHサーバーインストール

# rpm -ivh /root/rpmbuild/RPMS/x86_64/openssh-6.6p1-1.x86_64.rpm
 ← 作成したopensshのRPMパッケージをインストール
Preparing...                ########################################### [100%]
   1:openssh                ########################################### [100%]

# rpm -ivh /root/rpmbuild/RPMS/x86_64/openssh-clients-6.6p1-1.x86_64.rpm
 ← 作成したopenssh-clientsのRPMパッケージをインストール
# rpm -ivh /root/rpmbuild/RPMS/x86_64/openssh-server-6.6p1-1.x86_64.rpm
 ← 作成したopenssh-serverのRPMパッケージをインストール

作成したRPMは不要なので削除します。

# rm -f /root/rpmbuild/RPMS/x86_64/openssh-*

7. 設定ファイルの修正

  1. ) sshd_configファイルの修正
    バックアップしておいたsshd_configファイルを元に新しいsshd_configファイルを修正します。
    無修正のまま起動して私が受けた問題は、SELinuxをPermissiveにするとログインできるのにEnforceにするとログインできないという問題で、/var/log/messagesに以下のようなログがありました。
    Jan 01 00:00:00 localhost sshd[10757]: error: Could not get shadow information for root
    Jan 01 00:00:00 localhost  sshd[10757]: Failed password for root from 192.168.100.1 port 2205 ssh2
    
    原因は以下の設定が以下のようにデフォルトのままだとnoなのでyesに修正する必要があります。
    #UsePAM no
      
    UsePAM yes
    
    また、SELinuxには 「There is a rule in SELinux that say's "if sshd tries to access /etc/shadow"; then silently deny it."」という規則があり、このような拒否の場合はログに書かれないそうです。そのためSELinuxでどのような理由で拒否されたか不明で問題解決に時間がかかりました。
  2. ) /etc/pam.d/sshdファイルの修正
    バックアップしておいたファイルに戻します。
    # mv /etc/pam.d/sshd /etc/pam.d/sshd.6.6p1
    # mv /etc/pam.d/sshd.backup /etc/pam.d/sshd
    
    新しいままの設定で私が受けた問題は、SELinuxをPermissiveでもログインできないという問題で(上記問題の前に発覚)/var/log/secureに以下のようなログがありました。
    Jan 01 00:00:00 localhost sshd[10950]: PAM unable to dlopen(/lib/security/pam_stack.so): /lib/security/pam_stack.so: cannot open shared object file: No such file or directory
    Jan 01 00:00:00 localhost sshd[10950]: PAM adding faulty module: /lib/security/pam_stack.so
    
    これはバージョンの違いにより新しい/etc/pam.d/sshdの設定ではopenssh-6.1p1は存在しない/lib/security/pam_stack.soをロードしようとするためのようで、上記のように/etc/pam.d/sshdを古いものに戻すと解決しました。
    既存のファイルの内容
    #%PAM-1.0
    auth       required     pam_sepermit.so
    auth       include      password-auth
    account    required     pam_nologin.so
    account    include      password-auth
    password   include      password-auth
    # pam_selinux.so close should be the first session rule
    session    required     pam_selinux.so close
    session    required     pam_loginuid.so
    # pam_selinux.so open should only be followed by sessions to be executed in the user context
    session    required     pam_selinux.so open env_params
    session    optional     pam_keyinit.so force revoke
    session    include      password-auth
    
    OpenSSH6.6p1のファイルの内容
    #%PAM-1.0
    auth       required     pam_stack.so service=system-auth
    account    required     pam_nologin.so
    account    required     pam_stack.so service=system-auth
    password   required     pam_stack.so service=system-auth
    session    required     pam_stack.so service=system-auth
    

8. SSHサーバー起動

# service sshd start
sshd を起動中:                                             [  OK  ]

最終更新のRSS
Last-modified: 2014-05-04 (日) 01:03:29 (3642d)