orz.conf

技術メモ✍

ターミナルのショートカット

よく使うターミナルのショートカット

カーソル位置から行頭まで削除
CTRL + u

カーソル位置から行末まで削除
CTRL + k

単語単位で削除
CTRL + w

スクリーンクリア
CTRL + l

単語単位で戻る
ESC + b

単語単位で進む
ESC + f

行頭へ移動
CTRL + a

行末へ移動
CTRL + e

履歴を検索(インクリメンタルサーチ)
CTRL + r
実行中は
別のものを探す
CTRL + r
戻る
CTRL + g

tds_fdwのインストール

Installing on CentOSのページを見てインストールしました。

EPELをインストール

yum install epel-release

TDSをインストール

yum install freetds freetds-devel

alpha版を除くと20180528現在は1.08が最新でした。2016のだけど。

export TDS_FDW_VERSION="1.0.8"

PostgreSQLはバージョン9.6にしています。

export POSTGRES_VERSION="9.6"
wget https://github.com/tds-fdw/tds_fdw/archive/v${TDS_FDW_VERSION}.tar.gz -O tds_fdw-${TDS_FDW_VERSION}.tar.gz
tar -xvzf tds_fdw-${TDS_FDW_VERSION}.tar.gz
cd tds_fdw-${TDS_FDW_VERSION}
PATH=/usr/pgsql-{POSTGRES_VERSION}/bin:$PATH make USE_PGXS=1
sudo PATH=/usr/pgsql-{POSTGRES_VERSION}/bin:$PATH make USE_PGXS=1 install

\dxでインストールしたEXTENSIONを確認出来ます。

続いてpostgresの設定です。
psqlで作業します。

postgres=# create extension tds_fdw;
CREATE EXTENSION

servernameはsql serverがインストールされているサーバを適宜記載

postgres=# create server TDS_TestDB foreign data wrapper tds_fdw options (servername 'localhost', port '1433', database 'TestDB', tds_version '4.2', character_set 'UTF-8');
CREATE SERVER

grantする

postgres=# grant usage on foreign server TDS_TestDB to postgres;
GRANT

sql serverの情報を記載

postgres=# create user mapping for postgres server TDS_TestDB options (username 'sa', password 'password');
CREATE USER MAPPING

sql serverのほうはMicroSoftのページの情報でテーブルを作っているとするとPostgreSQL側では下記の指定になります。

create foreign table t1 (id integer, name VARCHAR(50), quantity integer) server TDS_TestDB options (table 'Inventory');


下記サイトを参考にしました。
tdsのインストール
https://github.com/tds-fdw/tds_fdw

PostgreSQLの設定
https://www.openscg.com/bigsql/docs/tds_fdw/

MicroSoft
https://docs.microsoft.com/ja-jp/sql/linux/quickstart-install-connect-red-hat?view=sql-server-linux-2017

リバースSSHポートフォワーディング

以下、自宅を会社と読み替えても差し支えありません。

f:id:toshtone:20180321232237j:plain

外出先のPCから自宅のwindowsリモートデスクトップしたい時があります。

VPNサーバたてて接続するとか色々手段があるんですが今回は
リバースSSHポートフォワーディングして実現したいと思います。

やることは2つです
・自宅のLinuxからVPSLinuxに向けてトンネル
・外出先PCからVPSLinuxに向けてトンネル

自宅のLinuxからVPSLinuxに向けてトンネルを掘る

自宅のWindowsIPアドレス:192.168.1.100
自宅のWindowsのRDP待受ポート:3389
VPSLinuxの転送ポート:13389
VPSドメイン名:vps.com
VPSSSH待受ポート:10022

ssh -N -R 13389:192.168.1.100:3389 vps.com -p 10022
外出先PCからVPSLinuxに向けてトンネルを掘る

TeratermSSHポート転送の設定をします。
ローカルのポートは何でもいいですが今回は50000としました。

ローカルのポート:50000 リッスン:無し
リモート側ホスト:vpn.com ポート:13389
リモート側ホスト:localhost ポート:13389
3/25 リモート側ホストの記載を修正しました


後はリモートデスクトップlocalhost:50000を指定すれば接続出来ます。

blog.devolutions.net

Linuxのor演算子とand演算子

or演算子

コマンド1 || コマンド2
コマンド1が失敗した場合コマンド2が実行される。

ls /var/test > /dev/null 2>&1 || echo "該当ディレクトリは存在しません"

and演算子

コマンド1 && コマンド2
コマンド1が成功した場合コマンド2が実行される。

ls /var/tmp > /dev/null 2>&1 && echo "該当ディレクトリは存在します"

ファイルディスクリプタ 2>&1

よく見かける2>&1の意味、ググらずにすぐに答えることは出来ますか?


標準エラー出力を標準出力にマージするという意味です。
何度も調べたことがあるかと思いますが、いきなり質問されるとどきっとしてしまいます。

標準入出力のファイルディスクリプタ
0→標準入力
1→標準出力
2→標準エラー出力

プロセスを実行すると上記のファイルディスクリプタが作成されます。


httpdのファイルディスクリプタを確認してみます。

まずはpidを確認
ps aux | grep httpd
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 17762 0.0 1.1 367636 12148 ? Ss Feb18 3:10 /usr/sbin/httpd


pidは17762と確認出来ました。
ファイルディスクリプタを確認します。

/proc/17762/fd配下にファイルディスクリプタがあります。

ls -l /proc/17762/fd

lr-x------ 1 root root 64 Mar 21 20:14 0 -> /dev/null
l-wx------ 1 root root 64 Mar 21 20:14 1 -> /dev/null
l-wx------ 1 root root 64 Mar 21 20:14 10 -> /var/log/httpd/access_log
l-wx------ 1 root root 64 Mar 21 20:14 11 -> /var/log/httpd/ssl_access_log
l-wx------ 1 root root 64 Mar 21 20:14 12 -> /var/log/httpd/ssl_request_log
lr-x------ 1 root root 64 Mar 21 20:14 13 -> /dev/urandom
l-wx------ 1 root root 64 Mar 21 20:14 2 -> /var/log/httpd/error_log
lrwx------ 1 root root 64 Mar 21 20:14 3 -> socket:[3608670]
lrwx------ 1 root root 64 Mar 21 20:14 4 -> socket:[3608671]
lrwx------ 1 root root 64 Mar 21 20:14 5 -> socket:[3608674]
lrwx------ 1 root root 64 Mar 21 20:14 6 -> socket:[3608675]
lr-x------ 1 root root 64 Mar 21 20:14 7 -> pipe:[3608682]
l-wx------ 1 root root 64 Mar 21 20:14 8 -> pipe:[3608682]
l-wx------ 1 root root 64 Mar 21 20:14 9 -> /var/log/httpd/ssl_error_log

httpdは標準出力は/dev/nullなので読み捨て、標準エラー出力は/var/log/httpd/error_log
となっているようです。

コマンド > /dev/null > 2>&1

これは標準エラー出力を標準出力にマージして読み捨てるということらしいです。

meltdownとSpectreの対応

CentOS6系のサーバで対応を行ってみました。

CVE-2017-5715
CVE-2017-5753
CVE-2017-5754

Spectreは幽霊とか怖いものといった意味だそうです。

現在のカーネルバージョンを確認

# uname -r

2.6.32-642.3.1.el6.x86_64

随分と古そうです。

早速更新処理

# yum update

完了したら再起動します。

# shutdown -r now

再起動後にバージョンを確認

2.6.32-696.18.7.el6.x86_64

MeltDown対策済みのバージョンになりました。

念の為以下も実行して確認。

# rpm -q --changelog kernel | egrep 'CVE-2017-5715|CVE-2017-5753|CVE-2017-5754'

数十のパッチが確認できました。


今回のアップデートと直接関係無いのですが、再起動後にsshだけ接続なくなってしまいました。

ポートを変更していたんですが、そのポートが空いて居ないようです。

iptablesの設定後に保存をしていなかったようです。

# service iptables save

iptablesの設定後は保存を忘れずに。


以下脆弱性の情報

www.cyberciti.biz

sudoの脆弱性(CVE-2017-1000367)

sudoの脆弱性が報告されているんだけど、IPAのホームページに記載が無い。
現在2017/06/12で報告は2017/05/30。

危険度高って書いてあるサイトもあるので注意喚起しないレベルの
話では無いような気がするんだけど、どういった基準なのか分からない。

対応方法はCentOSなら下記

yum install sudo

アップデート前
sudo-1.8.6p7-17.el7_2.x86_64

アップデート後は次のようになりました。
sudo-1.8.6p7-22.el7_3.x86_64

参考サイト
Red Hat Customer Portal
tecadmin.net