SSHサーバー(OpenSSH)のインストール
概要:CentOS6.5にOpenSSH6.6p1をソースからインストールします。
通常はOpenSSH(ssh)はデフォルトでインストールされていますし、インストールするにしてもyumコマンドで簡単にインストールできるので、ソースからインストールすることはないと思います。
chrootをSElinux下で使うためには以下の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サーバーのパッケージ作成 †
- ) ダウンロードしたファイルを展開します。
# tar zxvf openssh-6.6p1.tar.gz
- ) 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の無効化
- ) 不要な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/
- ) 既存圧縮ファイルを削除します。
# cd /tmp/work
# rm openssh-6.6p1.tar.gz
- ) 展開したファイルを再圧縮します。
# tar czvf openssh-6.6p1.tar.gz openssh-6.6p1/
- ) 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 に必要とされています
- ) 作成された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. 設定ファイルの修正 †
- ) 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でどのような理由で拒否されたか不明で問題解決に時間がかかりました。
- ) /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 ]