Arch Linuxでswayを使う

 article  Comments Off on Arch Linuxでswayを使う
Jun 172019
 

先日購入したThinkPad T480sにArch Linuxを入れて使っています。
最初はGNOMEデスクトップ環境にしていましたが、タイル型Window Managerにしたくなり、折角Waylandで動いているのだからとswayを使ってみました。

パッケージはステータスバーにi3statusを使いますが、アプリケーションメニューのi3-dmenu-desktopとdmenuは動かないらしいので、j4-dmenu-desktopとbemenuを導入します。

$ sudo pacman -S sway i3status j4-dmenu-desktop bemenu

パッケージデフォルトの設定は/etc/sway/configにありますので、そちらを~/.config/sway/configにコピーして以下の設定を追加しました。

ターミナル設定はurxvtd+urxvtcに変更

set $term urxvtc
exec urxvtd -q -o -f

メニューはj4-dmenu-desktop+bemenuに変更

set $menu j4-dmenu-desktop --dmenu='dmenu -i --nb "#3f3f3f" --nf "#dcdccc" --fn "pango:DejaVu Sans Mono 12"' --term='termite'

ステータスコマンドはi3statusに変更

status_command i3status

WaylandではXのキーマップ設定が効かないので、swayで日本語キーボート設定を追加

# keymap
input * xkb_layout  jp
input * xkb_model   jp106
input * xkb_options ctrl:nocaps

fcitxの起動設定を追加

exec fcitx-autostart

i3のときもそんなにカストマイズして使っていたわけではないので、上の設定で今のところ不満なく動いています。

 Posted by at 11:48 pm  Tagged with:

Zabbix 4.0.9 SELinux設定

 article  Comments Off on Zabbix 4.0.9 SELinux設定
Jun 132019
 

SELinuxを有効にしたCentOS 7にZabbix 4.0.9を導入した際のSELinux設定メモです。

CentOS 7にZabbix 4.0.9、MariaDB、Apache HTTP Serverを導入し、SELinux無効化状態であれば起動するところまで設定済みなところから始めます。

まずはApacheからZabbix Serverへの接続許可、Zabbixからのネットワーク接続を許可するbool値を設定します。httpd_can_network_connect_dbというのもありますが、今回ApacheからMySQLへの接続はUNIXドメインソケット経由となり、ネットワーク経由ではありませんので不要です。

# setsebool -P httpd_can_connect_zabbix=on
# setsebool -P zabbix_can_network=on

ポリシー作成に必要なパッケージをインストールします。

# yum install -y policycoreutils-python selinux-policy-devel

単純にZabbix Serverを起動すると、/var/run/zabbix/配下に各種ソケットファイルが作成できないとのエラーが発生しますので、そちらを許可するポリシーを作成します。

# cat zabbix-server_local.te
module zabbix-server_local 1.0;

require {
        type zabbix_var_run_t;
        type zabbix_t;
        class sock_file create;
        class sock_file unlink;
        class unix_stream_socket connectto;
}

#============= zabbix_t ==============
allow zabbix_t zabbix_var_run_t:sock_file create;
allow zabbix_t self:unix_stream_socket connectto;
allow zabbix_t zabbix_var_run_t:sock_file unlink;

作成したポリシーファイルをビルドしてインストールします。

# make -f /usr/share/selinux/devel/Makefile zabbix-server_local.pp
# semodule -i zabbix-server_local.pp

通常はここまで実施すればZabbix Server自身の稼働には問題ないのですが、Template DB MySQLを適用してMariaDBの状態を監視しようとするとエラーになります。

具体的にはmysql UNIXドメインソケットに接続できない、my.cnfファイルが読み込めずにmysqlコマンドを実行できないため、これらを許可するポリシーを作成します。

# cat zabbix-agentd_local.te
module zabbix-agentd_local 1.0;

require {
        type mysqld_etc_t;
        type mysqld_home_t;
        type mysqld_t;
        type zabbix_agent_t;
        class unix_stream_socket connectto;
        class file open;
        class file read;
}

#============= zabbix_agent_t ==============
allow zabbix_agent_t mysqld_etc_t:file open;
allow zabbix_agent_t mysqld_etc_t:file read;
allow zabbix_agent_t mysqld_home_t:file open;
allow zabbix_agent_t mysqld_home_t:file read;
allow zabbix_agent_t mysqld_t:unix_stream_socket connectto;

また、zabbixユーザーが使用する.my.cnfは/var/lib/zabbix/.my.cnfに配置しますので、こちらのファイルタイプがmysqld_home_tになるようにファイルコンテキストも作成します。

# cat zabbix-agentd_local.fc
/var/lib/zabbix/\.my\.cnf -- unconfined_u:object_r:mysqld_home_t:s0

teファイル、fcファイル両方揃ったところでビルドしインストールします。

# make -f /usr/share/selinux/devel/Makefile zabbix-agentd_local.pp
# semodule -i zabbix-agentd_local.pp

これでMySQL監視もおこなえるようになりました。

導入したポリシーモジュールは以下のプライオリティ400のものになります。

# semodule -lfull|grep zabbix
400 zabbix-agentd_local pp
400 zabbix-server_local pp
100 zabbix              pp

Lenovo ThinkPad T480s 注文

 dialy  Comments Off on Lenovo ThinkPad T480s 注文
Jan 232019
 

タイトルのとおりです。もう少し頑張ってX1にしようか悩みましたが、宅内利用が8割を占めるのでT480sにしてみました。構成は以下になります。

  • インテル Core i5-8250U プロセッサー (1.60GHz, 6MB)
  • Windows 10 Home 64bit
  • Windows 10 Home 64bit – 英語版
  • 14.0型FHD液晶 (1920 x 1080 IPS 250nit) 光沢なし
  • 8GB PC4-19200 DDR4 SODIMM (オンボード)
  • 内蔵グラフィックス
  • ブラック
  • カメラ(HD 720p対応)あり、マイクロフォンあり
  • 日本語キーボード
  • TPMあり
  • 指紋センサーあり
  • NFCあり
  • 指紋センサー、NFCアンテナ、ブラック
  • TPMあり(ハードウェアチップ搭載)
  • 512GBソリッドステートドライブ (M.2 2280, PCIe) OPAL対応
  • 3セル リチウムイオンバッテリー (57Wh)
  • 65W ACアダプター(USB Type-C)
  • インテル®Dual Band Wireless AC(2×2) 8265、Bluetoothバージョン4.1、vPro対応
  • WWAN対応
  • Fibocom L850-GL
  • 14.0型FHD液晶 (1920 x 1080 IPS 250nit) マルチタッチ非対応、720p HDカメラ、マイク、WWAN対応、ブラック
  • インテル UHD グラフィックス 620
  • 日本語
  • 1年間 引き取り修理

Arch Linux + BlackArchとするかKali Linuxを入れるつもり。到着が楽しみです。

 Posted by at 11:29 pm

ocf:heartbeat:apacheでZabbixのレスポンスチェックではまった

 article  Comments Off on ocf:heartbeat:apacheでZabbixのレスポンスチェックではまった
Sep 282018
 

CentOS 7.5のPacemaker/Corosync環境でZabbix 4.0のHA構成を試していていたら、ocf:heartbeat:apacheを使ったhttpdの起動がうまくいかなかった。
クラスターリソースは以下で作成している。

pcs resource create WebSite ocf:resource:apache statusurl="http://localhost/zabbix/" client=curl

Apacheのアクセスログではステータスコード200も返っているのに、なんでかなと思ったら、返答されるHTMLの終端タグ</html>が含まれていないからだった(curl http://localhost/zabbix/の応答が</body>で終わってる)。

pcs resource update WebSite testregex="< *html *>"

とやって解決。

ISC BINDのバージョン番号隠蔽

 article  Comments Off on ISC BINDのバージョン番号隠蔽
Jul 152018
 

RHEL7/CentOS7で使われているISC BIND 9.9.4では、version “適当な値”;とするより適切な設定があります。

バージョン番号隠蔽。デフォルトは稼働しているBINDのバージョン。

// disables processing query of the name version.bind with type TXT, class CHAOS.
version none;

ホスト名隠蔽。デフォルトはgethostbyname()の値。

// disables processing query of the name hostname.bind with type TXT, class CHAOS.
hostname none;

こちらもホスト名隠蔽だが、デフォルトnoneなので返答しない。server-id hostname;にするとgethostname()の値が応答される。

// disables processing query of the name ID.SERVER with type TXT, class CHAOS.
server-id none;

Administrator Reference Manual – Chapter 6. BIND 9 Configuration ReferenceのBuilt-in server information zonesに説明があります。

NetworkManager で resolv.conf の nameserver を設定

 article  Comments Off on NetworkManager で resolv.conf の nameserver を設定
Jul 142018
 

RHEL7/CentOS7系では、resolv.conf の設定は 通常 NetworkManager によっておこなわれます。
通常は ifcfg-* に記述された DNS の値もしくは DHCP サーバーから渡された DNS になると思います。

NetworkManager の設定で、更新後の nameserver を指定するようにしてみます。
こんな感じになります。

$ sudo vi /etc/NetworkManaer/conf.d/dns.conf
$ cat /etc/NetworkManaer/conf.d/dns.conf
[main]
dns=default

[global-dns]
searches=example.test

[global-dns-domain-*]
servers=127.0.0.1, 192.168.110.71

そうすると、NetworkManager 再起動後の resolv.conf 設定は以下になります。

$ cat /etc/resolv.conf
# Generated by NetworkManager
search example.test
nameserver 127.0.0.1
nameserver 192.168.110.71

Outlookでメールアイテムを移動するVBAマクロ

 article  Comments Off on Outlookでメールアイテムを移動するVBAマクロ
Jul 122018
 

GmailではIMAPフォルダーとしてラベルが使われています。IMAPフォルダーを削除してもラベルがなくなるだけでメールアイテム自体は消えません。
ですがOffice 365はIMAPフォルダーそのものなので、削除すると中のメールアイテムも消えてしまいます。
Gmailのような処理にしたければ、IMAPフォルダーを削除する前にメールアイテムを移動してやる必要がありますが手作業では面倒です。
そこでOutlookクライアントで一括でメールアーカイブするためのVBAマクロを作ってみました。

以下はInboxからArchiveフォルダにメールアイテムを移動するようになっていますが、mySrcFolderとmyDstFolderで移動元/移動先フォルダーを変更できます。

Sub ArchiveItems()

    Dim myNameSpace As Outlook.NameSpace
    Dim myInbox As Outlook.Folder
    Dim myDstFolder As Outlook.Folder
    Dim mySrcFolder As Outlook.Folder
    Dim myItems As Outlook.Items
    Dim myItem As Object

    Set myNameSpace = Application.GetNamespace("MAPI")
    Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
    Set myDstFolder = myInbox.Parent.Folders("Archive")
    Set mySrcFolder = myInbox
    Set myItems = mySrcFolder.Items

    For Each myItem In myItems
        myItem.Move myDstFolder
    Next
    
    MsgBox "Complete!"

End Sub

おまけで現在操作中のフォルダー名を表示するマクロ。

Sub DisplayCurrentFolderName()

    Dim myExplorer As Outlook.Explorer
    Dim myFolder As Outlook.Folder

    Set myExplorer = Application.ActiveExplorer
    Set myFolder = myExplorer.CurrentFolder

    MsgBox myFolder.Name

End Sub

ゾーン自体の動的追加もゾーンの中身も動的更新できるBIND環境

 article  Comments Off on ゾーン自体の動的追加もゾーンの中身も動的更新できるBIND環境
May 222018
 

ISC BINDの動的更新環境を試してみたくてやってみました。環境はCentOS 7.5.1804です。
SELinux 有効のまま、ゾーンの動的追加とゾーンの動的更新 2 つを実施できる環境を目指します。

ゾーンの動的追加

/etc/named.conf の options に allow-new-zones yes を追加して named サービスを起動します。

[root@dns1 ~]# vi /etc/named.conf
[root@dns1 ~]# systemctl start named.service

ゾーンファイルを作成します。ここではファイルを作成しているだけで、このファイルを使ったゾーンの追加は後ほどrndcコマンドで実施します。

[root@dns1 ~]# cat <<__EOF__ > /var/named/example.com.db
\$ORIGIN example.com.
\$TTL 86400
@         IN  SOA  dns1.example.com.  hostmaster.example.com. (
              2018040101  ; serial
              21600       ; refresh after 6 hours
              3600        ; retry after 1 hour
              604800      ; expire after 1 week
              86400 )     ; minimum TTL of 1 day
;
          IN  NS     dns1.example.com.
;
dns1      IN  A      192.168.110.71
__EOF__
[root@dns1 ~]# chown named: /var/named/example.com.db
[root@dns1 ~]# chmod o-rwx /var/named/example.com.db
[root@dns1 ~]# ls -l /var/named/example.com.db
-rw-r-----. 1 named named 404 May 21 00:51 /var/named/example.com.db
[root@dns1 ~]#

ゾーンを動的追加すると、named.conf の directory 配下にファイルが作成されます。
こちらに named プロセス実行ユーザーで書き込みできるようパーミッションを変更します。

[root@dns1 ~]# chmod g+w /var/named/
[root@dns1 ~]# ls -ld /var/named/
drwxrwx---. 6 root named 169 May 22 01:00 /var/named/
[root@dns1 ~]#

rndc コマンドで先ほど作成したゾーンファイルを指定し、ゾーンを追加してみます。あとで nsupdate による RR 変更も実施したいので、localhost からの update も許可しています。

[root@dns1 ~]# rndc addzone example.com '{
    type master;
    file "example.com.db";
    allow-update { localhost; };
};'
rndc: 'addzone' failed: permission denied
[root@dns1 ~]#

ディレクトリの書き込み権限は先ほど与えたのに、permission denied です。
SELinux は無効化していないため、audit.log を確認してみます。

[root@dns1 ~]# audit2allow < /var/log/audit/audit.log


#============= named_t ==============

#!!!! This avc can be allowed using the boolean 'named_write_master_zones'
allow named_t named_zone_t:dir { add_name remove_name write };

#!!!! This avc can be allowed using the boolean 'named_write_master_zones'
allow named_t named_zone_t:file { append create rename unlink write };
[root@dns1 ~]#

どうやら named_write_master_zones を on にする必要があるようです。

[root@dns1 ~]# getsebool named_write_master_zones
named_write_master_zones --> off
[root@dns1 ~]# setsebool named_write_master_zones=on
[root@dns1 ~]# rndc addzone example.com '{
    type master;
    file "example.com.db";
    allow-update { localhost; };
};'
[root@dns1 ~]# 

今度はエラーなく実行できました。dig コマンドでのクエリーも問題ありません。

[root@dns1 ~]# dig +noall +answer @localhost example.com. ns
example.com.            86400   IN      NS      dns1.example.com.
[root@dns1 ~]#

先ほど設定した named_write_master_zones 設定を永続化します。

[root@dns1 ~]# setsebool -P named_write_master_zones=on
[root@dns1 ~]#

なお、追加したゾーン定義の情報は /var/named/ 配下に *.nzf として保存されます。
ファイル名は view (今回の例では default)を hash 化した値になるそうです。

[root@dns1 ~]# ls /var/named/*.nzf
/var/named/3bf305731dd26307.nzf
[root@dns1 ~]#

ゾーンの動的更新

次にゾーンの動的更新です。先ほど追加した example.com ゾーンに A レコードを追加します。
nsupdate にはローカル更新を指示するため、-l スイッチを付けて起動します(デフォルトでは SOA レコードを探索してネームサーバーを探しに行っちゃうはず)。

[root@dns1 ~]# nsupdate -l
update add newhost.example.com 86400 A 172.16.1.1
send
quit
[root@dns1 ~]# dig +noall +answer @localhost newhost.example.com. a
newhost.example.com.    86400   IN      A       172.16.1.1
[root@dns1 ~]#

できました。しかし追加したレコードはゾーン定義のジャーナルファイル(*.jnl)に格納されてゾーン定義ファイル自体には書き込まれません。rndc sync コマンドを使うとジャーナルファイルの内容をマージできます。-clean オプションは *.jnl ファイルも削除。

[root@dns1 ~]# rndc sync -clean example.com
[root@dns1 ~]#

ゾーンを指定しなければ全ゾーンの同期になります。

Django Girls TutorialをWindowsのVisual Studio Codeで始めてみる

 article  Comments Off on Django Girls TutorialをWindowsのVisual Studio Codeで始めてみる
Apr 242018
 

Djang Girls TutorialをWindowsのVisual Studio Code環境で開始するまでの手順です。
やってることはチュートリアルの内容とほぼほぼ同じですが、.gitignoreやPython仮想環境の設定をPowerShellから実施しているので、PowerShellでのヒアドキュメント指定方法やエンコーディング指定が主なTipsです。

ディレクトリ作成

mkdir djangodirls
cd djangogirls

python仮想環境を作成してDjangoモジュール導入

python -m venv myvenv
.\myvenv\Scripts\activate
pip install django~=1.11.0

Djangoプロジェクトを作成

django-admin.py startproject mysite .

git初期化

git init
echo @"
*.pyc
*~
__pycache__
myvenv
db.sqlite3
/static
.DS_Store
.vscode
"@ | Set-Content -Encoding ASCII .gitignore

Encoding未指定はBOM付きUTF-16、UTF8でもBOM付きUTF-8になってしまうので、ASCIIを指定します。

Python実行環境指定

mkdir .vscode
echo @"
{
    "python.pythonPath": "`${workspaceFolder}/myvenv/Scripts/python.exe"
}
"@ | Set-Content -Encoding ASCII .vscode/settings.json

Windows 10でWi-Fiのプロファイル名を変更する

 article  Comments Off on Windows 10でWi-Fiのプロファイル名を変更する
Feb 072018
 

WindowsでのWi-Fi接続プロファイル名はデフォルトでSSID名になるのでいつも変更するようにしています。
Windows 7の頃は右クリックでリネームのような操作ができたものの、Windows 10では同様の操作がおこなえませんでした。

レジストリを漁って直接変更も考えましたが、netshコマンドでプロファイルを再作成してみます。
プロファイル構成をエクスポート、削除、変更したプロファイル名の構成ファイルで再作成、という段取りになります。

エクスポートします。

>netsh wlan export profile name="旧プロファイル名"

インターフェイス プロファイル "旧プロファイル名" がファイル ".\ワイヤレス ネットワーク接続-旧プロファイル名.xml" に保存されました。

プロファイルを一旦削除します。

>netsh wlan delete profile name="旧プロファイル名"
プロファイル "旧プロファイル名" がインターフェイス "ワイヤレス ネットワーク接続" から削除されます。

エクスポートされた構成ファイルをコピーしてプロファイル名を変更します。

>copy "ワイヤレス ネットワーク接続-旧プロファイル名.xml" "ワイヤレス ネットワーク接続-新プロファイル名.xml"
>notepad "ワイヤレス ネットワーク接続-新プロファイル名.xml"

私のケースでは3行目に記載されていました。

<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
	<name>旧プロファイル名</name>
	<SSIDConfig>
		<SSID>
~ 中略 ~
</WLANProfile>

変更した構成ファイルでプロファイルを作成します。

>netsh wlan add profile filename="ワイヤレス ネットワーク接続-新プロファイル名.xml"
プロファイル "新プロファイル名" がインターフェイス "ワイヤレス ネットワーク接続" に追加されます。

以上で完了です。

ちなみに上記手順での変更後のプロファイル名は、レジストリキー \HKLM\SOFTWARE\Microsoft\WcmSvc の CMPOL 記録されていましたが、こちらを直接変更してプロファイル名を変更できるかは定かではありません。