がらくたネット


opensshのこと

opensshのこと

Match設定

v4.4でMatchブロックが実装された

PermitRootLoginがMatchブロックに記述可能になったのは4.9から

     Match   Introduces a conditional block.  If all of the criteria on the
             Match line are satisfied, the keywords on the following lines
             override those set in the global section of the config file,
             until either another Match line or the end of the file.

             The arguments to Match are one or more criteria-pattern pairs.
             The available criteria are User, Group, Host, and Address.  The
             match patterns may consist of single entries or comma-separated
             lists and may use the wildcard and negation operators described
             in the PATTERNS section of ssh_config(5).

             The patterns in an Address criteria may additionally contain
             addresses to match in CIDR address/masklen format, e.g.
             ``192.0.2.0/24'' or ``3ffe:ffff::/32''.  Note that the mask
             length provided must be consistent with the address - it is an
             error to specify a mask length that is too long for the address
             or one with bits set in this host portion of the address.  For
             example, ``192.0.2.0/33'' and ``192.0.2.0/8'' respectively.

             Only a subset of keywords may be used on the lines following a
             Match keyword.  Available keywords are AllowAgentForwarding,
             AllowTcpForwarding, AuthorizedKeysFile, AuthorizedPrincipalsFile,
             Banner, ChrootDirectory, ForceCommand, GatewayPorts,
             GSSAPIAuthentication, HostbasedAuthentication,
             HostbasedUsesNameFromPacketOnly, KbdInteractiveAuthentication,
             KerberosAuthentication, MaxAuthTries, MaxSessions,
             PasswordAuthentication, PermitEmptyPasswords, PermitOpen,
             PermitRootLogin, PermitTunnel, PubkeyAuthentication,
             RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset,
             X11Forwarding and X11UseLocalHost.

パッケージ作成

Matchブロックを使いたいと思うとopensshのバージョンアップが必要。RPMで管理したいよねー。という事でやってみた。 とりあえず4.x系の最新版で試してみよう。CentOS5.5は4.3なのでね。そして全ての作業はとりあえずrootでやった。

2010.10.21追記:v5.6p1でもやってみたが問題なさげ。手順は一緒。大丈夫ぢゃね!

  1. tarballを準備
    wget http://ftp.kddlabs.co.jp/OpenBSD/OpenSSH/portable/openssh-4.9p1.tar.gz
    cp openssh-4.9p1.tar.gz /usr/src/redhat/SOURCES<code>
      - 解凍してspecファイルを取得<code>
    tar zxf openssh-4.9p1.tar.gz
    cd openssh-4.9p1/contrib/redhat/
    cp openssh.spec /usr/src/redhat/SPECS
  2. x11-ssh-askpass-1.2.4.1.tar.gzを準備。rpmbuildする際に要求されるのだよx11-ssh-askpass-1.2.4.1.tar.gz.gz
    wget http://ftp.yz.yamagata-u.ac.jp/pub/linux/momonga/2/SOURCES/x11-ssh-askpass-1.2.4.1.tar.gz
    mv x11-ssh-askpass-1.2.4.1.tar.gz /usr/src/redhat/SOURCES
  3. ビルドする
    cd /usr/src/redhat/SPECS
    rpmbuild -ba openssh.spec

/usr/src/redhat/RPMS/i386にRPM群が作成されるのでインストールする

cd /usr/src/redhat/RPMS/i386
rpm --test -Uhv openssh-4.9p1-1.i386.rpm openssh-server-4.9p1-1.i386.rpm openssh-clients-4.9p1-1.i386.rpm
OKであれば
rpm -Uhv openssh-4.9p1-1.i386.rpm openssh-server-4.9p1-1.i386.rpm openssh-clients-4.9p1-1.i386.rpm

/etc/ssh/sshd_config.rpmnewとして新しいsshd設定ファイルがコピーされるので内容を確認しながら設定変更を施す その後、sshdの再起動となる。sshdの再起動に失敗したら接続できないので超注意深く!とcondresetartを使うのと現接続コネクションは張りっぱなしにしておくのと、接続できない状態になった時の回避策を考えておくのが必要

変更しといた方がよさげポイント
変更しといた方が良さげなポイントを発見した

  • リモートセッションがログ(/var/log/secure)に記録されない。messagesに記録される。
  • initスクリプト実行時にWARNING: initlog is deprecated and will be removed in a future releaseが発生

ログは/etc/ssh/sshd_confを修正する

SyslogFacility AUTH
 ↓
SyslogFacility AUTHPRIV

initスクリプトのstart行を修正する

initlog -c "$SSHD $OPTIONS" && success || failure
 ↓
$SSHD $OPTIONS && success || failure

opensshに添付されているsftp-serverでのロギング

sftp-serverは以下の引数をとる -f Facilityの設定

  DAEMON, USER, AUTH, LOCAL0, LOCAL1, LOCAL2, LOCAL3,LOCAL4, LOCAL5, LOCAL6, LOCAL7
  デフォルトは AUTH

-l ログレベルの設定

  QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3
  INFO および VERBOSEはクライアント操作をログ

openssh 4.4まではsshd_config内のSubsystemオプションで コマンド引数処理ができないらしい。 opensshのバージョンをあげると引数が有効になるそうだ。

引数処理が出来ない場合、Subsystemのコマンド行に引数を付与すると 以下のエラーとなる。

 # service sshd start
 sshd を起動中: /etc/ssh/sshd_config line 119: garbage at end of line; "-l".
ということなので、sshdとsftp-serverのバージョンアップを敢行

INITスクリプトのsshdサービスでsshd関連の実行パスを修正

sshd_configのSubsystem定義部分の実行パスを修正し引数を追加

sshd_configはソースでインストールしたので/usr/local/etc/sshd_configとなる

sftp-serverでfacility設定を行った場合は、syslog.confの設定も 適宜修正する必要がある

準備

openssl-devel、zlib-develを追加インストールした
openssl-develは関連するその他モジュールもインストールしてた

opensshの最新版をダウンロード
http://www.openssh.com
展開
 ./configure
 make
 make install

CentOSなどは/usr/libexec/openssh/sftp-serverにインストールされているが デフォルト./configureで実施した場合は/usr/local/libexec/にインストールされる sshdもOSデフォルトでは/usr/sbin/sshdだが、ソースは/usr/local/sbin/sshdとなる この配置を標準に変えたい場合は、./configureオプションで指定すればよい

とりあえず今回はsftpのログを残すことが主目的なので配置ディレクトリには目をつむる インストールされるファイルは以下

 /usr/bin/install -c -m 0755 -s ssh /usr/local/bin/ssh
 /usr/bin/install -c -m 0755 -s scp /usr/local/bin/scp
 /usr/bin/install -c -m 0755 -s ssh-add /usr/local/bin/ssh-add
 /usr/bin/install -c -m 0755 -s ssh-agent /usr/local/bin/ssh-agent
 /usr/bin/install -c -m 0755 -s ssh-keygen /usr/local/bin/ssh-keygen
 /usr/bin/install -c -m 0755 -s ssh-keyscan /usr/local/bin/ssh-keyscan
 /usr/bin/install -c -m 0755 -s sshd /usr/local/sbin/sshd
 /usr/bin/install -c -m 0755 -s ssh-rand-helper /usr/local/libexec/ssh-rand-helper
 /usr/bin/install -c -m 4711 -s ssh-keysign /usr/local/libexec/ssh-keysign
 /usr/bin/install -c -m 0755 -s sftp /usr/local/bin/sftp
 /usr/bin/install -c -m 0755 -s sftp-server /usr/local/libexec/sftp-server
 /usr/bin/install -c -m 644 ssh.1.out /usr/local/share/man/man1/ssh.1
 /usr/bin/install -c -m 644 scp.1.out /usr/local/share/man/man1/scp.1
 /usr/bin/install -c -m 644 ssh-add.1.out /usr/local/share/man/man1/ssh-add.1
 /usr/bin/install -c -m 644 ssh-agent.1.out /usr/local/share/man/man1/ssh-agent.1
 /usr/bin/install -c -m 644 ssh-keygen.1.out /usr/local/share/man/man1/ssh-keygen.1
 /usr/bin/install -c -m 644 ssh-keyscan.1.out /usr/local/share/man/man1/ssh-keyscan.1
 /usr/bin/install -c -m 644 sshd_config.5.out /usr/local/share/man/man5/sshd_config.5
 /usr/bin/install -c -m 644 ssh_config.5.out /usr/local/share/man/man5/ssh_config.5
 /usr/bin/install -c -m 644 sshd.8.out /usr/local/share/man/man8/sshd.8
 /usr/bin/install -c -m 644 ssh-rand-helper.8.out /usr/local/share/man/man8/ssh-rand-helper.8
 /usr/bin/install -c -m 644 sftp.1.out /usr/local/share/man/man1/sftp.1
 /usr/bin/install -c -m 644 sftp-server.8.out /usr/local/share/man/man8/sftp-server.8
 /usr/bin/install -c -m 644 ssh-keysign.8.out /usr/local/share/man/man8/ssh-keysign.8