スポンサーリンク

sshで、仮想端末(pty)を取得させない方法について紹介します。

仮想端末を割り当てさせない設定は、authorized_keysの公開鍵に対してno-ptyの設定することで実現します。

$HOME/.ssh/authorized_keysの設定

no-pty ssh-dss AAAAB9Nza....省略


これを設定すると、どこのホストから秘密鍵を使ってログインしようとしても、仮想端末が取得できなくなるので、注意してください。

上記の設定がされているホストにsshすると端末にアクセスできないとエラーが表示されます。

no-ptyの設定がされたホストにログインした例

% ssh noptyhost
Warning: no access to tty (Bad file descriptor).
						Thus no job control in this shell.

この状態になると、C-cとかで抜けられないようなので、同じマシンにログインしていれば、psコマンドでnottyなsshdを探して、killコマンドで終了してあげるとよいでしょう。でも、それよりもsshしているホストでsshをkillするのがラクですね。

% ps auxww|fgrep notty
kaworu  9472  0.0  0.5  6296  2624  ??  S     3:15AM   0:00.01 sshd: kaworu@notty (sshd)

no-ptyは、仮想端末が割り当てられなくなる(取得できない)だけであって、シェルを使えます。

ssh noptyhost /bin/sh < evilscript


仮想端末が使えないので、vi(vim)などがちゃんと使えなかったりして、非常に不便だとは、思いますが、基本的になんでもできてしまうので、no-ptyにして、セキュリティ的に安全というわけではありません。

コマンドの制限があるわけでもないので、authorized_keysのパーミッション次第では、authorized_keysを書き換えられてしまうケースもあります。仮想端末を取得させたくない積極的な理由があるなら、authorized_keysのパーミッションを適切に設定すべきです。

何を制限したいのか、何を守りたいのか、誰から守りたいのか、何故、守るのか、よく考えましょう。


auth-options.c

authorized_keysの設定のチェックは、/usr/src/crypto/openssh/auth-options.cで行っています。
ソースを確認したところ、オプションの文字列は、strcasecmpで大文字小文字の区別なくチェックをしています。
no-ptyをNO-ptyとしようと、No-PTYとしようと、どれでも動きます。

ソースの一部

int
auth_parse_options(struct passwd *pw, char *opts, char *file, u_long
linenum)
{
	...省略...
	cp = "no-pty";
	if (strncasecmp(opts, cp, strlen(cp)) == 0) {
		auth_debug_add("Pty allocation disabled.");
		no_pty_flag = 1;
		opts += strlen(cp);
		goto next_option;
	}
	...省略...
}
参照しているページ (サイト内): [2009-03-03-1] [2008-10-19-1]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー