2013/03/28

UNIXで適当なパスワード文字列を生成する方法

mkpasswdコマンドが用意されていなかったので、ワンライナーでごまかしてみた。
パスワード文字列にすると 0⇔O とか 1⇔l⇔I が紛らわしいので、その辺は取り除いてある。
# cat /dev/urandom | tr -c -d '[:alnum:]' | tr -d 'O0lI1' | head -c 16 | awk '{print}'
からくりとしては、/dev/urandomからランダムなバイト列を読み出して、英数字(alnum)のみをフィルタリング、"O0lI1"を取り除いて、先頭16文字だけ表示している。

MySQLの mysql_secure_installation が中身でやっていること。

yum install mysql-serverなんかをたたいたあとで、手動でmysql_secure_installationを実行してたのを自動化するときのためのメモ。

# MySQL 5.1同梱のものの中身を見て転記しただけですが。

○rootユーザのパスワード文字列を設定する

-- SET ROOT PASSWORD --
UPDATE mysql.user SET Password=PASSWORD('[パスワード文字列]') WHERE User='root';

○anonymousユーザを削除する
-- REMOVE ANONYMOUS USERS --
DELETE FROM mysql.user WHERE User='';

○リモートからのrootログインを禁止する
-- REMOVE REMOTE ROOT --
DELETE FROM mysql.user
WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');

○TESTデータベースを削除する
-- REMOVE TEST DATABASE --
DROP DATABASE test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';

○権限を再読み出しする
-- RELOAD PRIVILEGE TABLES --
FLUSH PRIVILEGES;

2013/03/25

CentOS上でお手軽にChef Server & Clientな環境を作ってみた。

■Hyper-V上で仮想マシンを作成する。(Windows 8上のHyper-V 3.0 + PowerShellで実施)


○新規仮想マシンの作成
PS C:\VHD> New-VM -Name Chef-Serv
Name      State CPUUsage(%) MemoryAssigned(M) Uptime   Status
----      ----- ----------- ----------------- ------   ------
Chef-Serv Off   0           0                 00:00:00 正常稼働中
○仮想マシンのメモリ量を設定する。
PS C:\VHD> Set-VMMemory -VMName Chef-Serv -StartupBytes 2048MB
PS C:\VHD> Get-VMMemory -VMName Chef-Serv


VMName    DynamicMemoryEnabled Minimum(M) Startup(M) Maximum(M)
------    -------------------- ---------- ---------- ----------
Chef-Serv False                512        2048       1048576

○仮想マシンに接続する、仮想ハードディスク(VHDX)を作成する。
 ※ VHDXが肥大化する問題があるので、明示的にブロックサイズを1MBに指定している。[参考: 【これ重要かも】CentOS 5.9 を試してたら VHDX と EXT3 の組み合わせ問題に遭遇?]
PS C:\VHD> New-VHD -Path C:\VHD\Chef-Serv.vhdx -Dynamic -BlockSizeBytes 1MB -SizeBytes 16GB


ComputerName            : TESTPC01
Path                    : C:\VHD\Chef-Serv.vhdx
VhdFormat               : VHDX
VhdType                 : Dynamic
FileSize                : 4194304
Size                    : 17179869184
MinimumSize             :
LogicalSectorSize       : 512
PhysicalSectorSize      : 4096
BlockSize               : 1048576
ParentPath              :
FragmentationPercentage : 0
Alignment               : 1
Attached                : False
DiskNumber              :
IsDeleted               : False
Number                  :

○仮想マシンに仮想ディスク(VHDX)を追加する
PS C:\VHD> Add-VMHardDiskDrive -VMName Chef-Serv -ControllerType IDE -ControllerLocation 0 -Path C:\VHD\Chef-Serv.vhdx
PS C:\VHD> Get-VMHardDiskDrive -VMName Chef-Serv


VMName    ControllerType ControllerNumber ControllerLocation DiskNumber Path
------    -------------- ---------------- ------------------ ---------- ----
Chef-Serv IDE            0                0                             C:\VHD\Chef-Serv.vhdx

○仮想マシンにネットワークを設定する。
PS C:\VHD> Get-VMSwitch


Name                          SwitchType NetAdapterInterfaceDescription
----                          ---------- ------------------------------
外部接続スイッチ(有線LAN経由) External   Intel(R) 82579LM Gigabit Network Connection
外部接続スイッチ(WiMAX経由)   External   Remote NDIS based Internet Sharing Device
内部接続スイッチ              Internal
外部接続スイッチ(無線LAN経由) External   Intel(R) Centrino(R) Advanced-N 6205

PS C:\VHD> Add-VMNetworkAdapter -VMName Chef-Serv -SwitchName "外部接続スイッチ(WiMAX経由)"
PS C:\VHD> Get-VMNetworkAdapter -VMName Chef-Serv


Name                    IsManagementOs VMName    SwitchName                  MacAddress   Status IPAddresses
----                    -------------- ------    ----------                  ----------   ------ -----------
ネットワーク アダプター False          Chef-Serv 外部接続スイッチ(WiMAX経由) 000000000000        {}

○CentOS 6.4のインストールメディアをマウントする。
PS C:\VHD> Set-VMDvdDrive -VMName Chef-Serv -Path C:\TEMP\CentOS-6.4-x86_64-minimal.iso
PS C:\VHD> Get-VMDvdDrive -VMName Chef-Serv


VMName    ControllerType ControllerNumber ControllerLocation DvdMediaType Path
------    -------------- ---------------- ------------------ ------------ ----
Chef-Serv IDE            1                0                  ISO          C:\TEMP\CentOS-6.4-x86_64-minimal.iso

○仮想マシンを起動し、仮想マシン接続する。
PS C:\VHD> Start-VM -VMName Chef-Serv
PS C:\VHD> vmconnect localhost Chef-Serv

■CentOSのインストール。

CentOSのインストールウィザードの詳細は割愛。 # CentOS 5.9/6.4以降は、Hyper-V統合サービスが標準添付されているので、マウスやキーボードははじめから動きます。

■OS周りの設定。

○まずはyum update。
# yum -y update

○IPアドレスを固定しておく。
# ifconfig -a | grep eth1 | awk '{print "HWADDR="$5;} > /etc/sysconfig/network-scripts/ifcfg-eth1
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
HWADDR=00:15:5D:00:6A:1B
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.101.11
NETMASK=255.255.255.0

# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=CHEFSERV.local

# vi /etc/hosts
192.168.101.11 CHEFSREV CHEFSERV.local


# ifconfig -a

○何かと問題になるので、iptablesは事前にオフにしておく。
# service iptables stop
# chkconfig iptables off
# service ip6tables stop
# chkconfig ip6tables off

# shutdown -r now

☆細かいOSの設定変更はどうせChefのrecipe上で管理していくのでパス。

■Chef Serverの導入

今回は、opscode.comからrpmをダウンロードしてきてインストールしてみる。
○Cher ServerのRPMファイルのダウンロード
# curl -O -L https://opscode-omnitruck-release.s3.amazonaws.com/el/6/x86_64/chef-server-11.0.6-1.el6.x86_64.rpm
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  169M  100  169M    0     0   444k      0  0:06:30  0:06:30 --:--:--  480k


# file chef-server-11.0.6-1.el6.x86_64.rpm
chef-server-11.0.6-1.el6.x86_64.rpm: RPM v3.0 bin i386/x86_64 chef-server-11.0.6-1.el6


# ls -l chef-server-11.0.6-1.el6.x86_64.rpm
-rw-r--r--. 1 root root 177967164  3月 25 16:12 2013 chef-server-11.0.6-1.el6.x86_64.rpm

○RPMファイルのインストール
# rpm -ivh chef-server-11.0.6-1.el6.x86_64.rpm
警告: chef-server-11.0.6-1.el6.x86_64.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
準備中...                ########################################### [100%]
   1:chef-server            ########################################### [100%]
Thank you for installing Chef Server!


The next step in the install process is to run:


sudo chef-server-ctl reconfigure

○Chefの初期設定
# chef-server-ctl reconfigure
# chef-server-ctl test

○WebUIへの初回ログオン
https://chef-server/ へアクセスする。
デフォルトのユーザ名、パスワードは下記コマンドで分かる。
# grep web_ui_admin /opt/chef-server/embedded/cookbooks/chef-server/attributes/default.rb
default['chef_server']['chef-server-webui']['web_ui_admin_user_name'] = "admin"
default['chef_server']['chef-server-webui']['web_ui_admin_default_password'] = "p@ssw0rd1"

これでChef Serverの導入は終わり。

■Chef Workstationの設定

○Chefコマンド群をインストールする。
# curl -O -L https://opscode-omnitruck-release.s3.amazonaws.com/el/6/x86_64/chef-11.4.0-1.el6.x86_64.rpm


# rpm -ivh chef-11.4.0-1.el6.x86_64.rpm
警告: chef-11.4.0-1.el6.x86_64.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
準備中...                ########################################### [100%]
   1:chef                   ########################################### [100%]
Thank you for installing Chef!

○Chef関連の操作を行うためのレポジトリディレクトリをopscodeのgithubから複製しておく。
# yum install git
# git clone https://github.com/opscode/chef-repo.git chef-repo
Initialized empty Git repository in /root/chef-repo/.git/
remote: Counting objects: 202, done.
remote: Compressing objects: 100% (120/120), done.
remote: Total 202 (delta 73), reused 162 (delta 49)
Receiving objects: 100% (202/202), 34.27 KiB, done.
Resolving deltas: 100% (73/73), done.
# cd chef-repo
# ls -al
drwxr-xr-x. 9 root root  4096  3月 25 16:47 2013 .
dr-xr-x---. 6 root root  4096  3月 25 16:46 2013 ..
drwxr-xr-x. 8 root root  4096  3月 25 16:47 2013 .git
-rw-r--r--. 1 root root    18  3月 25 16:47 2013 .gitignore
-rw-r--r--. 1 root root 10850  3月 25 16:47 2013 LICENSE
-rw-r--r--. 1 root root  3521  3月 25 16:47 2013 README.md
-rw-r--r--. 1 root root  2171  3月 25 16:47 2013 Rakefile
drwxr-xr-x. 2 root root  4096  3月 25 16:47 2013 certificates
-rw-r--r--. 1 root root   156  3月 25 16:47 2013 chefignore
drwxr-xr-x. 2 root root  4096  3月 25 16:47 2013 config
drwxr-xr-x. 2 root root  4096  3月 25 16:47 2013 cookbooks
drwxr-xr-x. 2 root root  4096  3月 25 16:47 2013 data_bags
drwxr-xr-x. 2 root root  4096  3月 25 16:47 2013 environments
drwxr-xr-x. 2 root root  4096  3月 25 16:47 2013 roles

○Chefリポジトリのディレクトリに、Chef Serverと通信するための認証ファイルを置いておく。
# mkdir .chef
# cd .chef
# scp -p chefserv:/etc/chef-server/admin.pem ./
# scp -p chefserv:/etc/chef-server/chef-validator.pem ./
# ls -al
drwxr-xr-x.  2 root root 4096  3月 25 16:51 2013 .
drwxr-xr-x. 10 root root 4096  3月 25 16:48 2013 ..
-rw-------.  1 root root 1679  3月 25 16:19 2013 admin.pem
-rw-------.  1 root root 1679  3月 25 16:19 2013 chef-validator.pem

○knifeの初期設定
 chef server URLはデフォルトだと全然違うポート&プロトコルを指しているので、明示的にhttps://chef-serverのipアドレス:443 を指定してあげる必要がある。

# knife configure
WARNING: No knife configuration file found
Where should I put the config file? [/root/.chef/knife.rb] /root/chef-repo/.chef/knife.rb
Please enter the chef server URL: [http://CHEFSERV:4000] https://chefserv:443
Please enter an existing username or clientname for the API: [root] admin
Please enter the validation clientname: [chef-validator]
Please enter the location of the validation key: [/etc/chef/validation.pem]
Please enter the path to a chef repository (or leave blank): /root/chef-repo
*****


You must place your client key in:
  /root/chef-repo/.chef/admin.pem
Before running commands with Knife!


*****


You must place your validation key in:
  /etc/chef/validation.pem
Before generating instance data with Knife!


*****
Configuration file written to /root/chef-repo/.chef/knife.rb

■Chef Clientの登録

さっそく、上記で設定したWorkstation上でknife bootstrapコマンドを実行して、Chef Clientを設定する。
○zabbixsvという名前のクライアントとなるサーバを追加する。
# cd ~/chef-repo
# knife bootstrap zabbixsv.local
Bootstrapping Chef on zabbixsv.local
Failed to authenticate root - trying password auth
Enter your password:
zabbixsv.local Downloading Chef 11.4.0 for el...
zabbixsv.local Installing Chef 11.4.0
zabbixsv.local 警告: /tmp/tmp.NxRNG2Nq/chef-11.4.0.x86_64.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
zabbixsv.local 準備中...
zabbixsv.local ########################################    (100%)
zabbixsv.local ########################################### [100%]
zabbixsv.local    1:chef
zabbixsv.local ########################################### [100%]
zabbixsv.local Thank you for installing Chef!
zabbixsv.local Starting Chef Client, version 11.4.0
zabbixsv.local Creating a new client identity for ZABBIXSV using the validator key.
zabbixsv.local resolving cookbooks for run list: []
zabbixsv.local Synchronizing Cookbooks:
zabbixsv.local Compiling Cookbooks...
zabbixsv.local [2013-03-25T17:25:54+09:00] WARN: Node ZABBIXSV has an empty run list.
zabbixsv.local Converging 0 resources
zabbixsv.local Chef Client finished, 0 resources updated

○Chef Server上で認識されていることを確認する。
# knife node list
ZABBIXSV

○一応Chef Server自身もクライアントとして認識させておく。
# knife bootstrap chefserv.local
Bootstrapping Chef on chefserv.local
Failed to authenticate root - trying password auth
Enter your password:
chefserv.local Starting Chef Client, version 11.4.0
chefserv.local Creating a new client identity for CHEFSERV using the validator key.
chefserv.local resolving cookbooks for run list: []
chefserv.local Synchronizing Cookbooks:
chefserv.local Compiling Cookbooks...
chefserv.local [2013-03-25T17:29:57+09:00] WARN: Node CHEFSERV has an empty run list.
chefserv.local Converging 0 resources
chefserv.local Chef Client finished, 0 resources updated

○ノードが増えた!
# knife node list
CHEFSERV
ZABBIXSV

■knifeコマンドで遊んでみる。

knife node listで表示されるようになると、sshコマンドなどで遊べるようになる。
# knife ssh -x root -P $(head -1) "hostname:*" date
P@ssw0rd!
MYSQLSRV 2013年  3月 25日 月曜日 17:50:17 JST
ZABBIXSV 2013年  3月 25日 月曜日 17:50:17 JST
CHEFSERV 2013年  3月 25日 月曜日 17:50:17 JST

☆ -P $(head -1)は、標準入力から1行読み出してssh時のパスワードとするための小技。  普通に "-P P@ssw0rd!" のように入力してしまうと、historyに保存されてしまったり、ps -efで他のユーザにパスワード文字列を読み取られてしまったりするのを回避するためにこうしている。

■簡単なレシピを作成し、適用してみる。


簡単にyum install zshするだけのレシピを作成し適用してみる。

○いじる元になるcookbookの作成
# cd ~/chef-repo/cookbooks
# knife cookbook create install-zsh
# cd install-zsh

○レシピファイルの中に、今回はzshをインストールするように記載を追加する。
# vi recipes/default.rb
package "zsh" do
 action :install
end

○Chef Serverにcookbookを登録する
# knife cookbook upload install-zsh

○実際にRun List (適用すべきレシピ=cookbook一覧)に新規作成したinstall-zshを登録する。
# knife node run_list add CHEFSERV install-zsh

○chef-clientを実行し、Run Listに記載されているレシピを実際適用させる。
# knife ssh -x root -P $(head -n1) "hostname:CHEFSERV" chef-client
CHEFSERV Recipe: install-zsh::default
CHEFSERV   * package[zsh] action install
CHEFSERV  (up to date)
CHEFSERV Chef Client finished, 1 resources updated

○本当に導入されているか、おしゃれにknife ssh経由で確認して見る。
# knife ssh -x root -P $(head -n1) "hostname:CHEFSERV" "rpm -qa | grep zsh"
CHEFSERV zsh-4.3.10-5.el6.x86_64
#

以上! 何となく動いたからOK!!