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でもやってみたが問題なさげ。手順は一緒。大丈夫ぢゃね!
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
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
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を使うのと現接続コネクションは張りっぱなしにしておくのと、接続できない状態になった時の回避策を考えておくのが必要
変更しといた方がよさげポイント
変更しといた方が良さげなポイントを発見した
ログは/etc/ssh/sshd_confを修正する
SyslogFacility AUTH ↓ SyslogFacility AUTHPRIV
initスクリプトのstart行を修正する
initlog -c "$SSHD $OPTIONS" && success || failure ↓ $SSHD $OPTIONS && success || failure
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