webminのインストール

個人的に色々あってブログの投稿が止まっていましたが、やっと落ち着いてきました。

これから少しづつ投稿していこうとおもいます。

今回はlinuxでGUIでシステム設定ができる管理ツールwebminのインストールについて書きます。

最近はyumでさらっとインストールできるから楽ですよね。

まず、webminで必要なperlモジュールをインストールします。

# yum -y install perl-Net-SSLeay

次にwebminをインストールします。
yum -y install https://sourceforge.net/projects/webadmin/files/webmin/1.801/webmin-1.801-1.noarch.rpm

これで終わりです。chkconfigにも登録されています。

centos7を使用している際はsystemctlではなく従来の/etc/init.d/webadmin start で起動するので注意して下さい。

デフォルトのログインURLは下記のようになっています。

https://localhost:10000

変更したい場合はコンフィグを編集します。

# /etc/webmin/minesrv.conf

##ポート番号を10000から10080に変更

port=10000

⇒port=10080

:wq

保存して終了

サービスを再起動します。

# /etc/init.d/qwebmin restart

以上です。

 

 

 

glibc の脆弱性 (通称:GHOST)CVE-2015-0235について

Linux GNU Cライブラリ(glibc)に存在する脆弱性がセキュリティ企業「Qualys」によって確認されました。
Linuxのオペレーティングシステム(OS)を搭載する PC上で任意のコードを実行することが可能になり、結果的にサーバーの乗っ取りや不正プログラム感染させることができます。

やばい!と思ってすぐにサーバの対処をしていたのですが、glibcを最新版にすると不具合が起きるアプリ等があり
思うようにバージョンアップが進まない(・ω・´;

しばらくするとある程度情報が出てきましたが主要なOSS(apache、OpenSSH、Postfix等)は影響を受けないとの事。

今のところ攻撃を受ける可能性のあるものはメール転送エージェント「Exim」のみみたいです。

とはいうものの、ぜい弱性のある状態のままでは不安なのでバージョンアップしました。

修正済みのバージョンは下記の通りです
CentOS 5 (glibc-2.5-123.el5_11.1)
CentOS 6 (glibc-2.12-1.149.el6_6.5)
CentOS 7 (glibc-2.17-55.el7_0.5)

配布されているようなのでyumでサクッとアップデートです。

[root ~]# yum update glibc
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
Skipping security plugin, no data
Setting up Update Process
Resolving Dependencies
Skipping security plugin, no data
–> Running transaction check
–> Processing Dependency: glibc = 2.5-107 for package: nscd
—> Package glibc.i686 0:2.5-123.el5_11.1 set to be updated
–> Processing Dependency: glibc-common = 2.5-123.el5_11.1 for package: glibc
—> Package glibc.x86_64 0:2.5-123.el5_11.1 set to be updated
–> Running transaction check
—> Package glibc-common.x86_64 0:2.5-123.el5_11.1 set to be updated
—> Package nscd.x86_64 0:2.5-123.el5_11.1 set to be updated
–> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package Arch Version Repository Size
================================================================================
Updating:
glibc i686 2.5-123.el5_11.1 updates 5.4 M
glibc x86_64 2.5-123.el5_11.1 updates 4.8 M
Updating for dependencies:
glibc-common x86_64 2.5-123.el5_11.1 updates 16 M
nscd x86_64 2.5-123.el5_11.1 updates 178 k

Transaction Summary
================================================================================
Install 0 Package(s)
Upgrade 4 Package(s)

Total download size: 27 M
Is this ok [y/N]: y
Downloading Packages:
(1/4): nscd-2.5-123.el5_11.1.x86_64.rpm | 178 kB 00:00
(2/4): glibc-2.5-123.el5_11.1.x86_64.rpm | 4.8 MB 00:00
(3/4): glibc-2.5-123.el5_11.1.i686.rpm | 5.4 MB 00:00
(4/4): glibc-common-2.5-123.el5_11.1.x86_64.rpm | 16 MB 00:01
——————————————————————————–
Total 8.5 MB/s | 27 MB 00:03
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Updating : glibc-common 1/8
Updating : glibc 2/8
Updating : glibc 3/8
Updating : nscd 4/8
Cleanup : glibc 5/8
Cleanup : glibc 6/8
Cleanup : nscd 7/8
Cleanup : glibc-common 8/8

Updated:
glibc.i686 0:2.5-123.el5_11.1 glibc.x86_64 0:2.5-123.el5_11.1

Dependency Updated:
glibc-common.x86_64 0:2.5-123.el5_11.1 nscd.x86_64 0:2.5-123.el5_11.1

Complete!
[root ~]#

この後再起動して動作に問題ない事を確認して対応終了。

zabbixでのデータ取得スクリプト 第2弾

前回基本となるデータ取得用スクリプトを作りましたがそれに修正を加えました。
データ抽出期間を指定する方法です。
私のzabbixは時間がunixtimeなのですが仕様なのかな・・・?
あまり気になる所じゃなかったのでそんなもんだとしていましたが
スクリプトで時間指定する場合にいちいちunixtime計算していると面倒なので
スクリプトに組み込んで通常の日時で指定できるようにしています。

※追記部分は太文字にしています
———————————————————————————
#!/bin/sh
#
#####################################################################
DATE=`date +%Y%m%d`

## pickup itemid select
echo ” please input id number ”

read id

echo ” please input table ”

read table

## Period designation
echo “please input the opening time year-mounth-day time ”

read opentime

echo “please input the closing time year-mounth-day time ”

read closetime

## unixtime changed
starttime=`date +%s –date “${opentime}”`
stoptime=`date +%s –date “${closetime}”`

## id check
CHECK=`mysql –user=zabbix –password=zabbix zabbix -N -s -e ” select itemid fro
m items where itemid=$id ;”`
CHECK=`expr $CHECK + 0`

## exec
if [ $CHECK -gt 0 ] ; then
mysql –user=zabbix –password=zabbix zabbix -e “select from_unixtime(clock),val
ue from ${table} where itemid=${id} and clock between ${starttime} and ${stoptime} ;” > csvfile/${DATE}_${id}.csv
else
echo ” No id !!”
fi

exit
———————————————————————————–

時間が空の場合は全てのログにするようにしようかなぁと思いましたが
今までの運用上時間を指定しない事がないので作りませんでした。
もし作るとしたらid checkのような感じでopentimeとclosetimeが空の場合は
時間設定のないsql文を実行するようにすればいいだけです。
わざわざ書く必要が無いくらい簡単です。
なもんで書いてません(`・ω・´)

SSH rsa鍵でのログイン設定

書いたつもりでしたがどうやら書いていなかったのでsshのログインの際に平文のパスワードではなくrsa鍵を使用する方法です。

OSインストールの際にsshはインストールしているので
バージョン等をチェックします。
[test@testlinux ~]$ rpm -qa | grep ssh
openssh-4.3p2-82.el5
openssh-server-4.3p2-82.el5
openssh-clients-4.3p2-82.el5
[test@testlinux ~]$

opensshの4.3がサーバ、クライアント共に入っています。
sshサーバの設定ファイル(/etc/ssh/sshd_config)を編集します。
root権限が必要なのでrootになってります。

[test@testlinux ~]$ su –
[root@testlinux ~]# vi /etc/ssh/sshd_config
必要な部分のみ抜粋

RSA認証部分のコメントアウトを外します。
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

パスワードでのログインを禁止します。

PasswordAuthentication yes → no

後はデフォルトのままで問題ありません。

sshdの再起動を実施すれば変更した内容が反映されます。
ただし、作業はまだ全て終わっていないので再起動はしないで下さい。
鍵の作成をこの後実施しますがコンソール接続ができなければサーバからクライアントへの渡す手段がなくなってしまう可能性があります。

■鍵の作成
サーバ側でrsaキーを作ります。
今回はパスフレーズ無しで作っています。
ログインを実施するユーザーにて作業を実施して下さい。
今回はサンプルとしてtestというユーザーで実施しています。

まずは鍵を保存するフォルダを作成し作業フォルダに移動します。
権限は700にして下さい。
[test@testlinux ~]$ mkdir .ssh
[test@testlinux ~]$ chmod 700 .ssh
[tst@testlinux ~]$ cd .ssh

鍵作成コマンドの実施

[test@testlinux .ssh]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/test/.ssh/id_rsa.
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
1f:99:ea:a0:61:83:ca:a5:7c:da:03:84:a4:c0:1a:cd test@testlinux

上記に表示されているフォルダ「/home/test/.ssh」に
公開鍵 (id_rsa.pub) と秘密鍵 (id_rsa) が作成されます。
後でファイル名等は変更しますが、どうしても名前や保存場所を変えたい場合はsave場所の質問の際に
Enter file in which to save the key (/home/test/.ssh/id_rsa):
任意の場所とファイル名を指定して下さい。

[test@testlinux .ssh]$ ls
id_rsa id_rsa.pub

公開鍵 (id_rsa.pub) をsshd_configに書いてある形式に変更します。
[test@testlinux .ssh]$ mv id_rsa.pub authorized_keys

※既にauthorized_keysがあり鍵を追加する場合は公開鍵 (id_rsa.pub)を書き足していきます。

[test@testlinux .ssh]$ cat id_rsa.pub >> authorized_keys
authorized_keysに追記したらid_rsa.pub は不要なので削除します。
[test@testlinux .ssh]$ rm id_rsa.pub

次に秘密鍵 (id_rsa) をクライアント側に送ります。
今回はsftpで取得させました。
ファイル名はid_rsaですが任意の名前にして結構です。
私は今回はid_rsa_testlinuxという名前にしました。

秘密鍵がきちんとクライアントに保存されたらsshdの再起動を実施して下さい。
もし失敗してログインできなくなったらと心配がある場合はsshd_configの
パスワードでのログインをできる状態にしておいて、鍵でのログインが問題
ない事を確認してからパスワードログインを禁止して下さい。

◎再起動コマンド
[root@testlinux ~]# /etc/init.d/sshd restart

■クライアントからの接続確認
ターミナルソフトはteratermやputty等の有名なものから無名なものまで
さまざまありますが今回はとりあえずteratarmで実施します。

SSH2での接続にし、SSH認証画面に移ります。
ユーザー名を入力し、RSA/DSA鍵を使うのチェックボックスにし秘密鍵のクリックします。

そして先ほどダウンロードしてきた秘密鍵のフォルダを開きます。
名前を変えた場合、秘密鍵ファイルタブでは表示されませんので、全てのファイルで表示
させて下さい。
鍵を選択したら「OK」でログインできるはずです。
※今回はパスフレーズを無しにしているのでパスフレーズは要りません。

セキュリティの問題 SSLv3.0

最近、Bashのぜい弱性やSSL3.0のぜい弱性の指摘等結構大きな
セキュリティ関連の問題が起きています。

今までもいろいろ問題は指摘されていましたが表面化する事は
少なかったです。

Heartbleedの問題が表面化して以降が結構騒がれている気がします。

しばらくすればまた落ち着くと思いますが、騒がれても騒がれなくても対応をきちんとしたほうがいいんですけどね。

うちのサーバもSSL3.0はまだ有効化していたので無効化対応したいと思います。

構築した内容については「linuxサーバ構築>apache+SSL設定」をご参照下さい。
※特別な設定はしていません。ほとんどデフォルト設定です。

バージョンにもよりますがデフォルトだとsslはSSLv3.0とTLS1.0が有効になっています。
そこでssl.confにSSLv3.0については使わないように記述します。
OSによって書き方が違ったりしますがredhat系はdisableにするバージョンを記述します。
デフォルトでSSLv2は無効化されているのでSSLv3を追記するだけです。

[root@cent5 ~]# vi /etc/httpd/conf.d/ssl.conf
SSLプロトコルの設定項目まで行きます

# SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect. Disable SSLv2 access by default:
SSLProtocol all -SSLv2 -SSLv3←SSLv3の記述を追記する

[root@cent5 ~]#
記述が終わったらapacheの再起動を実施します。
[root@cent5 ~]# /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[root@cent5 ~]#

確認はIEのSSLv3.0だけに設定してアクセスして下さい。
画面が表示されなければSSLv3.0は使えない事が分かります。
次にTLS1.0だけに設定してアクセスして下さい。
正常な画面が表示されます。

bashのぜい弱性

最近巷で話題になっているbashのぜい弱性についてです。

linuxを使っていてこれは非常に困ります。
アプリとかの問題ではなくOSレベルの問題なので暫定対処もできないですしぜい弱性対応のバージョンに上げるしかないです。

私の環境はyumを使えるようにしているのでyumでサクッと上げれるから作業自体は大したことないですけどね。

すぐに上げたんですがその後もぜい弱性の報告が連鎖的に来て
おそらくこれが最終版かな?と思いまたアップデートしました。

確認
[root@cent5 ~]# rpm -qa | grep bash
bash-3.2-33.el5_10.4

yumアップデート実施
[root@cent5 ~]# yum update bash
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* addons: centos.mirror.secureax.com
* base: centos.mirror.secureax.com
* extras: centos.mirror.secureax.com
* updates: centos.ustc.edu.cn
Setting up Update Process
Resolving Dependencies
–> Running transaction check
—> Package bash.i386 0:3.2-33.el5_11.4 set to be updated
–> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package Arch Version Repository Size
================================================================================
Updating:
bash i386 3.2-33.el5_11.4 updates 1.8 M

Transaction Summary
================================================================================
Install 0 Package(s)
Update 1 Package(s)
Remove 0 Package(s)

Total download size: 1.8 M
Is this ok [y/N]: y
Downloading Packages:
bash-3.2-33.el5_11.4.i386.rpm | 1.8 MB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Updating : bash 1/2
Cleanup : bash 2/2

Updated:
bash.i386 0:3.2-33.el5_11.4

Complete!
[root@cent5 ~]#
上がってるか確認
[root@cent5 ~]# rpm -qa | grep bash
bash-3.2-33.el5_11.4

CentOS5ですがlinuxは基本的に同じ手順で大丈夫なはず。
台数が多いと1つ1つ手作業は面倒だからスクリプトで一括で実施するようにしないと100台とか200台とかだと単純作業でも1日仕事とかになっちゃいますよね・・・

ぜい弱性の情報についてはこちら
<>
I. 概要

GNU bash の環境変数の処理には脆弱性があります。外部からの入力が、GNU
bash の環境変数に設定される環境において、遠隔の第三者によって任意のコー
ドが実行される可能性があります。

II. 対象

** 更新: 2014年10月08日修正 ****************************************
以下のバージョンが本脆弱性の影響を受けます。

– Bash 4.3 Patch 28 およびそれ以前
– Bash 4.2 Patch 51 およびそれ以前
– Bash 4.1 Patch 15 およびそれ以前
– Bash 4.0 Patch 42 およびそれ以前
– Bash 3.2 Patch 55 およびそれ以前
– Bash 3.1 Patch 21 およびそれ以前
– Bash 3.0 Patch 20 およびそれ以前

ディストリビュータが提供している bash をお使いの場合は、使用中のディ
ストリビュータの情報を参照してください。

********************************************************************

III. 対策

** 更新: 2014年10月08日修正 ****************************************
GNU Project から脆弱性を修正したバージョンの GNU bash が公開されてい
ます。十分なテストを実施の上、修正済みバージョンの適用をご検討ください。

修正済みのバージョンは、以下の通りです。

– Bash 4.3 Patch 29
– Bash 4.2 Patch 52
– Bash 4.1 Patch 16
– Bash 4.0 Patch 43
– Bash 3.2 Patch 56
– Bash 3.1 Patch 22
– Bash 3.0 Patch 21

また、一部のディストリビュータからは、修正済みのバージョンが提供され
ています。詳細については、使用中のディストリビュータの情報を参照してく
ださい。

********************************************************************

PHPで重みつきの抽選ロジック

ロト7の抽選機を作った際によく当たる数字に重みづけをして確率を変えた方が
当たる確率あがるんじゃね!?ということで考えたロジックです。

さまざまな所でもう紹介されているので新鮮味はないですが参考程度になれば・・・

抽選対象の数字に当った回数をつけてそれをそのまま確率に反映しました。
サンプルで5個の数字にそれぞれ重み用の数字を割り当てて抽選しています。

<!–?php

//抽選対象
$entries = array(
“1” => 5,
“2” => 4,
“3” => 3,
“4” => 2,
“5” => 1,
);

//配列から1つの要素キーを抽選する

function array_rand_weighted($entries){
$sum = array_sum($entries);
$rand = rand(1, $sum);

foreach($entries as $key => $weight){
if (($sum -= $weight) < $rand) return $key;
}
}

// 抽選
$result_key = array_rand_weighted($entries);

print("$result_key");

?>

とりあえずきちんと動いているっぽかったです。

linuxでのルーティング設定

久しぶりの投稿になります。
最近は忙しくて(仕事じゃなくてプライベート)なかなか投稿する暇がなかったのですが
いろいろと放置、温めていたネタを書きたいと思います。

routeコマンドについてですが、デフォルトゲートウェイでは対処できない経路等が追加された場合に使います。
まあ簡単にいうとスタティックルート作る時に使います。

オプションなしで使うと現在のルーティングテーブルが確認できます
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default 192.168.1.254 0.0.0.0 UG 0 0 0 eth0

ルーティングを追加

LinuxでIPフォワーディングの機能を使う場合はデフォルトでは不可になっているので
/etc/sysconfig/networkで
FORWARD_IPV4=”yes”
とするCentOS6.2以降では/etc/sysctl.confで
net.ipv4.ip_forward = 0 を1にする必要がある

# route add -net 宛先アドレス gw ゲートウェイ metric 1 netmask サブネットマスク eth0
metricとeth0は適宜合わせる

routeコマンドでの設定は一時的なもので再起動すると消えてしまいます
継続的に使う場合は/etc/sysconfig/static-routesに経路を記述してください

拒否経路の追加

route add -net 宛先アドレス netmask サブネットマスク reject

ルーティングを削除

route del -net 宛先アドレス netmask サブネットマスク

やっつけ投稿とかは言わないで~!(;>人<`)

Catalyst3750XでのSSH設定

たまたまなのかセットアップしようとした3750XがSSHが有効化になっておりRSAキーが設定されていました。

ホスト名とドメイン名を設定しないとできないと思っていましたが最近ではそうじゃないのかな?

RSAキーを消すだけでdisableにできるのでとりあえず有効化する方法と無効化する方法をメモしてみました。

●sshを使う為の設定
–ユーザーの作成–
一般的にパスワード認証が多いと思いますのでパスワード認証の設定

Switch#configure terminal
Switch(config)#username admin password pass
VTYポートにログインした際にline vtyに設定されたパスワードではなく上記設定を使うようにローカル認証設定にします。
※vtyポート数は自分の環境に合わせて下さい
Switch(config)#line vty 0 4
Switch(config-line)#login local

–ホスト名ドメイン名の作成–
ssh暗号化鍵作成の為のホスト名とドメイン名を作成します。
※もしかしたらSwitchによっていは要らないのかも?
Switch(config)#hostname test
test(config)#ip domain-name test.co.jp

–RSA暗号鍵の作成–
鍵長のサイズはよく1024にするので1024にしています。
デフォルトの512でも何の問題もないです
test(config)#crypto key generate rsa
The name for the keys will be: test.test.co.jp
Choose the size of the key modulus in the range of 360 to 2048 for your
General Purpose Keys. Choosing a key modulus greater than 512 may take
a few minutes.

How many bits in the modulus [512]:1024
% Generating 1024 bit RSA keys, keys will be non-exportable…[OK]

SSHのバージョン指定したい場合は下記のコマンドを追加
セキュリティ的に高いversion2にしています
test(config)#ip ssh version 2
telnetを禁止してSSHのみにする場合は下記のコマンドを追加
Switch(config)#line vty 0 4
Switch(config-line)#transport input ssh

–確認–
RSA鍵がああるかは下記のコマンドで確認
Switch#show ip ssh
SSH Enabled – version 1.99
Authentication timeout: 120 secs; Authentication retries: 3
Minimum expected Diffie Hellman key size : 1024 bits
IOS Keys in SECSH format(ssh-rsa, base64 encoded):
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAQQC4IgvQ28WLlvw5pU5SnKVE8pXxWM4mYMMmQxK7an5y
LCIrPJF7eJfrM+siy9NbeKXXaUrrBppmno4IzgAPBsgF

SSH接続は以上ですが、SSHで特権execモードに移行する為にはenable paswordコマンドかenable secretコマンドでパスワード設定して下さい。

–SSHの無効化–
RSA鍵を消せば自動的にdisabledになります。
Switch#configure terminal
Switch(config)#crypto key zeroize rsa
% All RSA keys will be removed.
% All router certs issued using these keys will also be removed.
Do you really want to remove these keys? [yes/no]: yes

–確認–
Switch#sh ip ssh
SSH Disabled – version 1.99
%Please create RSA keys to enable SSH (and of atleast 768 bits for SSH v2).
Authentication timeout: 120 secs; Authentication retries: 3
Minimum expected Diffie Hellman key size : 1024 bits
IOS Keys in SECSH format(ssh-rsa, base64 encoded): NONE

やったことないけどデフォルトがdisabledであればssh制御パラーメータを戻してもいいかもしれません。
Switch#configure terminal
Switch(config)#no ip ssh { timeout | authentication-retries }

指定回数実行スクリプト

あるMIB値を5秒間隔で20回取得して下さいという依頼がありました。しかも同時に複数のMIB値を取得、さらに違うコマンドも実行しろとか・・・手は2つしかないのでそんなに同時にできませんよ(・ω・;)

という事でMIB取得はスクリプトにて取得するよう書きました。

——————————
#!/bin/sh

i=1
while [ $i -le 20 ]
do
DATE=`date +%Y%m%d,%T`
SNMP=`snmpwalk -v2c -c public 10.57.9.51 UCD-SNMP-MIB::ssCpuIdle.0`
echo $DATE,$SNMP >> snmp_cpu_idle.txt
i=`expr $i + 1`
sleep 5

done

exit 0
——————————
標準MIBでCPUIdleを取得する方法をサンプルとして書いています。
複数SNMPを登録したい場合はSNMP=の下にSNMP2=とかSNMP3=とか複数作ってやって、echoで$SNMPの後ろにくっつけて下さい。
行を分けたかったらechoを複数行にするといいですが、連続で取得するので行を分けると分かりにくくなるのでお勧めしません。