openssh(リモートアクセスのために)

出先から、
ちょっと鯖の状況を確認したり、
ふと思いついた修正を加えたり、
ちょっとしたファイルをダウンロードしたり、
ダウンロードに時間がかかるものを玄箱にやらせておいたり、
玄箱にアクセスして操作したくなることがあります。

LAN内からだったら、標準でついているtelnetとかftpを使えばいいんだけど、
流石に、telnetとかftpを外部に公開する勇気はないですので、
安全に玄箱を操作できるようにする方法としてsshを利用しましょう。
「外部に公開する勇気はない」
まぁ、telnetもftpも玄箱標準のサービスですから、
そもそも、外部に公開するようにはできていません(セキュリティを考慮していないです)
これを公開するということは、、、
「この玄箱、自由に使ってください」といっているようなものかも?

だって、rootで直接ログインできるんだもん。

やること一覧
	・事前準備起動方法の選択インストールsshd_config.0各種設定変更

関連ページ
	・openssl(あまりにも古いので)tcp_wrappers(アクセスコントロールのために)xinetd(アクセスコントロールのために)



事前準備

opensshの導入には以下のソフトが必要になります。

opensslの導入には以下のソフトが必要になります。
導入していない場合にはインストールしてください。
「依存関係」
このように、あるソフトを入れるには別のソフトが必ず必要という関係を「依存関係」というらしいです。
いろいろなソフトと依存関係があるものもあり、2段3段に必要なソフトが増えていくことがあります。
やってられるかーヽ(`Д´)ノと、なることもしばしば・・・

起動方法の選択

sshdを使う場合、起動方法が2つある。
スタンドアロンで動かす方法とスーパーサーバーを経由する方法だ。

スタンドアロンで動かす場合

スーパーサーバー経由の場合
となる(ホントか?

システムの設定とかが違ってくるので、自分にあったものを選択する。
「起動方法の選択」
ちなみに、私はスタンドアロンを選択しました。
玄箱(not HG)だからメモリ消費は痛いけど、
それよりも「初回接続の待ち時間の長さ」に耐えられませんでした。
CPUがもっと早ければスーパーサーバー経由を選択したかもしれませんけど、
PPC@200MHzじゃ、ダメだorz

インストール

tcp_wrappersの機能をOpenSSHに取り込んでアクセス制限を行う場合、
事前にtcp_wrappersをインストールする必要がある。
インストール手順はtcp_wrappersを参照。

sshを利用している人はsshdをとめる

	# /etc/init.d/ssh stop
sshを利用していない人はsshd用のユーザーを作る(無ければ)
	# groupadd -g 21 sshd
	# useradd -g sshd -u 21 -d /var/empty -s /bin/false sshd
ユーザーをロックする
	# vipw
	または
	# vi /etc/passwd
		変更点:! を * に書き換える
設定ファイルの退避(または削除)
	# mv /etc/ssh /etc/ssh.old
	または
	# rm -r /etc/ssh
openssh-6.4p1.tar.gzを探してくる。
OpenSSH
で、ユーザーのホームディレクトリにFFFTPで送る。
例のあれ
	$ tar xvfz openssh-6.4p1.tar.gz
	$ cd openssh-6.4p1
	$ ./configure --prefix=/usr --sysconfdir=/etc/ssh \
	--with-default-path=/usr/local/bin:/usr/bin:/bin \
	--without-shadow --with-tcp-wrappers
		

option説明など
--sysconfdir=opensshの設定ファイルディレクトリの指定
--with-default-path=scpを含むコマンドパスの設定
scpを使うためにbin系だけ設定する
scpを使わない(sftpしか使わない)なら省略可能
--without-shadowシャドウパスワードを使わない
--with-tcp-wrapperstcp_wrappersをsshdに取り込む
tcp_wrappersを事前に再インストールしていないと意味が無い

注:スーパーサーバー経由を前提とする場合、   --with-tcp-wrappers を省略できる。 $ make # make install
純正で入っている起動ファイルそのままだとエラーが出るので、起動ファイルを修正する。
	# vi /etc/init.d/ssh
		(変更)
		┃AUTOKEYGEN=yes
		┃/usr/bin/ssh-keygen -b 1024 -f /etc/ssh/ssh_host_key -N "" -t rsa1
sshd_configを弄る。
	# vi /etc/ssh/sshd_config
		(標準のsshd_configからの修正なら)
		┃PermitRootLogin no#RhostsAuthentication no
		┃Subsystem sftp /usr/libexec/sftp-server
		┃PrintMotd no
			注:新規の場合、参考サイトを参照して大量のコメント記号 # を削除
			  自分のセキュリティポリシーに合わせて設定すること
lastlogの作成(logでエラー吐くから)
	# touch /var/log/lastlog
テスト(起動|再起動|停止)
	# /etc/init.d/ssh start
	# /etc/init.d/ssh restart
	# /etc/init.d/ssh stop
接続確認
	# /etc/init.d/ssh start
	以下を確認する。
		1.sshdに接続する
		2.rootでログインして失敗
		3.一般ユーザでログインして成功
		4.一般ユーザからsuで成功
「標準のsshd_config」
それなりの設定が施されており、これを使ってもsshdは起動できます。
が、セキュリティを高めるためのssh導入なのに、標準のsshd_configではrootでのログインが許可されています。
最低限、このrootでのログインなどセキュリティ上、好ましくない設定を変更する必要があります。
こういうところを見ていると「玄箱って、やっぱりNASなんだなぁ・・・」と思いますね。

各種設定変更

共通の設定変更
sshdのログ出力設定の変更:ログが埋もれて見にくくなるため

	# vi /etc/ssh/sshd_config
		(変更)
		┃SyslogFacility local0
ログファイルの設定
	# vi /etc/syslog.conf
		(追加)
		┃# sshd log to sshd.log
		┃local0.*		/var/log/sshd.log
ログファイル(空)の作成
	# touch /var/log/sshd.log
syslogdの再起動(設定を認識させる)
	# killall -s HUP syslogd
logrotateの設定と(必要なら)sshdの再起動を忘れずに♪


スタンドアロンで動かす場合

自動起動の設定
	# ln -s /etc/init.d/ssh /etc/rc.d/rc2.d/S23ssh
	# ln -s /etc/init.d/ssh /etc/rc.d/rc0.d/K23ssh
	# ln -s /etc/init.d/ssh /etc/rc.d/rc6.d/K23ssh
テスト
	# shutdown -r now
	(再起動してから)
	# ps ax
		で、/usr/sbin/sshdがあることを確認する。
スーパーサーバーを経由する場合(inetd)
inetdの設定ファイルにsshdの起動を追加
	# vi /etc/inetd.conf
		(追加)
		┃ssh stream tcp nowait root /usr/sbin/tcpd sshd -i
			注:inetdを経由したことが無いので正しいかは未確認
inetdの再起動
	# /etc/init.d/inetd reload
接続確認をする。

スーパーサーバーを経由する場合(xinetd)
xinetdにsshd管理を追加
	# vi /etc/xinetd.d/sshd
		(新規)
		┃service ssh
		┃{
		┃	socket_type     = stream
		┃	wait            = no
		┃	user            = root
		┃	server          = /usr/sbin/sshd
		┃	server_args     = -i
		┃	log_on_success += USERID
		┃	log_on_failure += USERID
		┃	disable         = no
		┃}
	または、
		┃service ssh
		┃{
		┃	flags           = NAMEINARGS
		┃	socket_type     = stream
		┃	wait            = no
		┃	user            = root
		┃	server          = /usr/sbin/tcpd
		┃	server_args     = /usr/sbin/sshd -i
		┃	log_on_success += USERID
		┃	log_on_failure += USERID
		┃	disable         = no
		┃}
			注:上はsshdを直接、下はtcpd(tcp_wrappers)を経由して起動する設定
xinetdの再起動
	# /etc/init.d/xinetd reload
接続確認をする。
「logrotateの設定」
週1回くらいでまわせば大丈夫だと思います。
まぁ、どのくらいの頻度でssh接続を利用するか?によるんでしょうけど・・・
あ!あと、hosts.allow/hosts.denyの設定を忘れずに行ってください。
せっかくtcp_wrappersを取り込んで(経由して)も設定されて無いと意味ないですから。
って言うか、接続できないでしょうから。

・・・ルーターのポートは空けてくださいよ?(ぼそ

備考
sshでFTPのようにファイルをやり取りするソフト:WinSCPについて
WinSCPの3.7.4だと一部の日本語のディレクトリ/ファイルが表示されません。
WinSCPの3.7.5と3.7.6では上記のバグは改善されているようですが、
3.7.5だと、ツールバーの位置が保存されないバグがあります。
また、この2つはまだ完全に日本語化されていないので、
ランゲージファイル(言語ファイル)を手動で導入する必要があります。
さて、どれを選びますか?


戻るなら押せ!