gmt24

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 記録されていましたが、こちらを直接変更してプロファイル名を変更できるかは定かではありません。

WindowsにAnaconda使わずにJupyter notebookをセットアップ

 article  Comments Off on WindowsにAnaconda使わずにJupyter notebookをセットアップ
Nov 232017
 

Windows環境でのPython + Jupyter notebookはAnacondaで利用する説明が多いように思ったのですが、あえてAnacondaを使わずに導入して、Jupyter notebookのコンテキストメニューをExplorerに表示させるところまでやってみます。

PythonのWindows向けリリースを公式サイトからダウンロードしインストール。
https://www.python.org/downloads/windows/

後述のコンテキストメニュー登録用モジュールに必要なPython for Windows Extensionsをインストール。
以下からPythonのバージョンやプラットフォームにあったものを選択。
https://sourceforge.net/projects/pywin32/

jupyterをインストール。

pip install jupyter

Windowsコンテキストメニューを登録するためのstart_jupyter_cmをインストール。

pip install start_jupyter_cm

Windowsコンテキストメニューを登録。管理者権限が必要でした。

jupyter_context-menu_add

以上でExplorerコンテキストメニューに「Jupyter notebook here」と「Jupyter qtconsole here」が表示されるようになります。
コンテキストメニューなしで、コマンドラインからjupyter notebookを起動してもいいんですけどね。

Docker for Windowsのインストールに失敗する

 article  Comments Off on Docker for Windowsのインストールに失敗する
Nov 012017
 

インストーラーを実行すると
“Do you want to replace your current version of Docker for Windows with this new one 17.09.0-ce-win33(13620)?”
のダイアログが出てきて、どう答えようがインストールに失敗してしまいます。

確かに昔インストールしてたけど、アンインストール済みで既に残っていないはず。
試しにコマンドラインでインストーラーを実行すると少し詳しくメッセージが出ます。

C:\> "Docker for Windows Installer.exe"
[01:23:00.032] [InstallHandler] Not run as admin, relaunching with UAC prompt
[01:23:02.803] [InstallHandler] No d4w installation found
[01:23:02.803] [InstallHandler] Using embedded package
[01:23:02.897] [InstallWorkflow] Using package: res:d4w
[01:23:02.897] [InstallWorkflow] Downloadingerequisites
[01:23:03.707] [InstallWorkflow] Exracting manifesttion found, prompting user
[01:23:03.756] [InstallWorkflow] Checking prerequisites installation, with special flag
[01:23:03.783] [InstallWorkflow] Msi based installation found, prompting user
[01:23:05.548] [InstallWorkflow] Uninstalling msi based installation, with special flag
[01:23:05.608] [InstallWorkflow] MSI Uninstall failed

参考になったのは以下2件の記事。
Cannot uninstall Docker for Windows
Docker doesn’t upgrade #1043
Process Monitorを使ってインストーラーがアクセスしているHKCR\Installer\UpgradeCodes以下のレジストリを確認したとのこと。

早速SysinternalSuiteのprocmon.exeを使って確認してみます。

FilterでPathにHKCR\Installer\UpgradeCodesを含むものを表示するよう設定。

Addするとこうなります。

インストーラーを実行するとレジストリが表示されます。

確認できたレジストリーキーを削除し、無事インストールできました。

WinNAT定義の強制削除

 article  Comments Off on WinNAT定義の強制削除
Apr 222017
 

Hyver-V仮想マシン用に設定していたWinNATが動作しなくなりました。

PS C:\WINDOWS\system32> Get-NetNat


Name                             : MyNATnetwork
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 192.168.0.0/24
IcmpQueryTimeout                 : 30
TcpEstablishedConnectionTimeout  : 1800
TcpTransientConnectionTimeout    : 120
TcpFilteringBehavior             : AddressDependentFiltering
UdpFilteringBehavior             : AddressDependentFiltering
UdpIdleSessionTimeout            : 120
UdpInboundRefresh                : False
Store                            : Local
Active                           : False



PS C:\WINDOWS\system32> 

最後のActive:Falseになっているのが怪しいのですが、Trueにしようと思ってもSet-NetNatコマンドレットにはそのようなオプションはありません。
作り直そうと思っても、削除時にエラーになってしまいます。

PS C:\WINDOWS\system32> Get-NetNat|Remove-NetNat

確認
この操作を実行しますか?
対象 MyNATnetwork の PolicyStore Local に対して操作 Delete を実行しています
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y
Remove-NetNat : 要求された操作がサポートされていません。
発生場所 行:1 文字:12
+ Get-NetNat|Remove-NetNat
+            ~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (MSFT_NetNat (In...yNATnetwork;0"):root/StandardCimv2/MSFT_NetNat) [Remove-NetNat]、CimException
    + FullyQualifiedErrorId : Windows System Error 50,Remove-NetNat

PS C:\WINDOWS\system32> 

なんとも方法がわからず途方に暮れていたら以下の記事に同じような事象がありました。
Set up a Hyper-V Virtual Switch using a NAT Network | Thomas Maurer
ちょっとコメントがつぶれていますが、以下のレジストリキーを削除したとのこと。
HKLM\System\CurrentControlSet\Control\NSI\{eb004a20-…..7759bc}\6\

今のままでは他に情報もないので、以下のキーをバックアップして削除してみたところ、Get-NetNatでエントリーが出現しなくなりました。
HKLM\SYSTEM\CurrentControlSet\Control\Nsi\{eb004a20-9b1a-11d4-9123-0050047759bc}\6

PS C:\WINDOWS\system32> Get-NetNat

うーん、これで大丈夫なのかわかりませんが、とりあえずNew-NetNatでの再作成は成功したので暫く経過観察します。

PS C:\WINDOWS\system32> New-NetNat -Name MyNATnetwork -InternalIPInterfaceAddressPrefix 192.168.0.0/24


Name                             : MyNATnetwork
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 192.168.0.0/24
IcmpQueryTimeout                 : 30
TcpEstablishedConnectionTimeout  : 1800
TcpTransientConnectionTimeout    : 120
TcpFilteringBehavior             : AddressDependentFiltering
UdpFilteringBehavior             : AddressDependentFiltering
UdpIdleSessionTimeout            : 120
UdpInboundRefresh                : False
Store                            : Local
Active                           : True



PS C:\WINDOWS\system32>

ちゃんとActive:Trueになってるし。

プロバイダがIPv6対応したのでDebianに設定

 article  Comments Off on プロバイダがIPv6対応したのでDebianに設定
Apr 132017
 

プロバイダがIPv6サービス提供を開始したので、フレッツ光とプロバイダにそれぞれ申し込んでみました。

フレッツ光でIPv6オプションを申し込んだ直後はNTT東日本のIPv6アドレスが割り当てられます。

gmtx24@debian:~$ ip -6 addr show dev eth0
2: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
    inet6 2408:***:****:****:****:****:****:****/64 scope global mngtmpaddr dynamic 
       valid_lft 2591524sec preferred_lft 604324sec
    inet6 2001:c90:****:****:****:****:****:****/64 scope global deprecated mngtmpaddr dynamic 
       valid_lft 2584978sec preferred_lft 0sec
    inet6 fe80::a2b3:ccff:fee9:5cd7/64 scope link 
       valid_lft forever preferred_lft forever
gmtx24@debian:~$ 

次にプロバイダにIPv6オプションを申し込んだ後は、プロバイダ所有のプレフィックスアドレス(伏せてます)に変わりました。

gmtx24@debian:~$ ip -6 addr show dev eth0
2: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
    inet6 ****:****:****:****:****:****:****:****/64 scope global mngtmpaddr dynamic
       valid_lft 2591508sec preferred_lft 604308sec
    inet6 fe80::a2b3:ccff:fee9:5cd7/64 scope link
       valid_lft forever preferred_lft forever
gmtx24@debian:~$ 

ルーティングも同様に、NTT東日本からプロバイダに変わります。
フレッツ光のIPv6開通後

gmtx24@debian:~$ ip -6 route show
2001:c90:****:****::/64 dev eth0 proto kernel metric 256  expires 2581221sec pref medium
2408:***:****:****::/64 dev eth0 proto kernel metric 256  expires 2591184sec pref medium
fe80::/64 dev eth0 proto kernel metric 256  pref medium
default via fe80::30ff:fe0c:204d dev eth0 proto ra metric 1024  expires 1755sec hoplimit 64 pref medium
gmtx24@debian:~$ 

プロバイダのIPv6開通後

gmtx24@debian:~$ ip -6 route show
****:****:****::/64 dev eth0 proto kernel metric 256  expires 2591575sec pref medium
fe80::/64 dev eth0 proto kernel metric 256  pref medium
default via fe80::30ff:fe0c:204d dev eth0 proto ra metric 1024  expires 1375sec hoplimit 64 pref medium
gmtx24@debian:~$ 

このままだとMACアドレスベースで生成されたIPv6アドレスが設定されますので、IPv6プライバシー拡張を使ってランダム生成のアドレスにしたい場合は、/etc/network/interfacesに以下の設定をおこないます。

iface eth0 inet6 auto
    privext 2

確認はsysctlコマンドでnet.ipv6.conf.eth0.use_tempaddr=2になっているか、もしくはIPv6 test – IPv6/4 connectivity and speed testに接続してSLAAC noになっているかで確認しました。もちろんIPv6アドレスがMACアドレスベースになっていないことでも確認できます。

※参考
IPv6 プライバシー拡張

Debianでiptables設定(IPv4とIPv6)

 article  Comments Off on Debianでiptables設定(IPv4とIPv6)
Apr 122017
 

以前も書きましたがIPv6の設定も入れたので再掲。
DebianFirewall – Debian Wiki

こちらで一番ベーシックなiptables-persistentパッケージを導入して設定します。

# apt-get install iptables-persistent

あとはルールを作成。

IPv4用ルールはこちら。

$ cat /etc/iptables/rules.v4
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-unreachable
-A FORWARD -j REJECT --reject-with icmp-host-unreachable
COMMIT

IPv6用ルールはこちら。IPv4ベースに、ICMPv6プロトコル追加と、REJECT時のICMPメッセージをICMPv6に変更しています。

$ cat /etc/iptables/rules.v6
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp   -j ACCEPT
-A INPUT -p icmpv6 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp6-adm-prohibited
-A FORWARD -j REJECT --reject-with icmp6-adm-prohibited
COMMIT

あとはサービス有効化して完了。

# systemctl start netfilter-persistent
# systemctl enable netfilter-persistent

CentOS 7のtomcatパッケージでcatalina.base分離

 article  Comments Off on CentOS 7のtomcatパッケージでcatalina.base分離
Oct 302016
 

以前「CATALINA_BASEを分けてTomcatを複数サービス化」のような記事を書いたのですが、CentOS 7やRed Hat 7のtomcatパッケージでこちらを実装してみます。

CentOS 7/Red Hat 7のtomcatパッケージには2種類のsystemd.execファイルが用意されています。

[root@localhost ~]# ls /usr/lib/systemd/system/tomcat*
/usr/lib/systemd/system/tomcat.service
/usr/lib/systemd/system/tomcat@.service
[root@localhost ~]#

tomcat@.serviceの先頭に以下の記述があり、こちらの手順を模倣するとcatalina.baseの分離ができそうなので早速やってみます。

# Systemd unit file for tomcat instances.
#
# To create clones of this service:
# 0. systemctl enable tomcat@name.service
# 1. create catalina.base directory structure in
# /var/lib/tomcats/name
# 2. profit.

まずはnameにinst1を指定してenableにしてみます。

[root@localhost ~]# systemctl enable tomcat@inst1.service
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat@inst1.service to /usr/lib/systemd/system/tomcat@.service.
[root@localhost ~]#

次に/var/lib/tomcats以下にcatalina.baseディレクトリを用意してパッケージデフォルトの内容をコピーします。

[root@localhost ~]# mkdir /var/lib/tomcats/inst1 && cd /var/lib/tomcats/inst1
[root@localhost inst1]# cp -pr /etc/tomcat conf
[root@localhost inst1]# cp -pr /var/log/tomcat logs
[root@localhost inst1]# cp -pr /var/cache/tomcat/temp .
[root@localhost inst1]# cp -pr /var/cache/tomcat/work .
[root@localhost inst1]# cp -pr /var/lib/tomcat/webapps .

webapps以下の不要なアプリケーションは削除します。

catalina.baseを指定する設定ファイルは/etc/sysconfig/tomcat@inst1として用意します。
これは/etc/tomcat/tomcat.confの先頭に説明があります。

# System-wide configuration file for tomcat services
# This will be loaded by systemd as an environment file,
# so please keep the syntax.
#
# There are 2 “classes” of startup behavior in this package.
# The old one, the default service named tomcat.service.
# The new named instances are called tomcat@instance.service.
#
# Use this file to change default values for all services.
# Change the service specific ones to affect only one service.
# For tomcat.service it’s /etc/sysconfig/tomcat, for
# tomcat@instance it’s /etc/sysconfig/tomcat@instance.

ファイルを作成してCATALINA_BASEとCATALINA_TMPDIRを設定します。

[root@localhost ~]# cp -p /etc/sysconfig/tomcat /etc/sysconfig/tomcat\@inst1
[root@localhost ~]# echo "CATALINA_BASE=\"/var/lib/tomcats/inst1\"" >> /etc/sysconfig/tomcat\@inst1
[root@localhost ~]# echo "CATALINA_TMPDIR=\"/var/lib/tomcats/inst1/temp\"" >> /etc/sysconfig/tomcat\@inst1

サービスを起動してみます。

[root@localhost ~]# systemctl start tomcat@inst1

catalina.baseやjava.io.tmpdirが分離された状態で起動されていることが確認できます。

/usr/lib/jvm/jre/bin/java -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/var/lib/tomcats/inst1 -Dcatalina.home=/usr/share/tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/lib/tomcats/inst1/temp -Djava.util.logging.config.file=/var/lib/tomcats/inst1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start

利用するポート番号変更などインスタンス個別の設定は、/var/lib/tomcats/inst1/conf以下を編集することで対応できます。

libpwqualityあれこれ

 article  Comments Off on libpwqualityあれこれ
Apr 102016
 

RHEL 7やCentOS 7では、辞書に載っているパスワードへの変更を抑止する際に使われるPAMモジュールがpam_cracklibからpam_pwqualityに変更されています。パッケージとしてはlibpwqualityに含まれるモジュールになります。

libcrackにもリンクされていてパスワード辞書自体はデフォルトでcracklibのものを使用しますが、/etc/security/pwquality.confで変更可能です。詳しくはman pam_pwqualityやman pwquality.confを参照。

こちらのパッケージにはパスワードを生成してくれるpwmakeやパスワードの強度をチェックしてくれるpwscoreというコマンドが付属しています。

例えばpwscoreコマンドで「辞書に載っている」、「8文字未満」、「ユーザー名が含まれる」パスワードをチェックしてみると、それぞれ以下のような結果になります。

$ echo password | pwscore
Password quality check failed:
 The password fails the dictionary check - it is based on a dictionary word
$ echo passwor | pwscore
Password quality check failed:
 The password is shorter than 8 characters
# echo password4username| pwscore username
Password quality check failed:
 The password contains the user name in some form

3つめのコマンドのpwscoreに続く引数はユーザー名です。

pwmakeの使い方はビット数を引数に指定して実行するだけで、通常は64ビット、より強固にするには80や128ビットの指定がよいようです。
以下、Red Hat Enterprise Linux 7 セキュリティガイドの「第4章 ツールとサービスを使用したシステム強化」より。

指定可能な最小ビット数は 56 で、これはブルートフォース攻撃が滅多に仕掛けられないシステムやサービスのパスワードには十分なものです。攻撃者がパスワードハッシュファイルに直接アクセスできないアプリケーションであれば、64 ビットで十分です。攻撃者がパスワードハッシュへの直接アクセスを取得する可能性がある場合やパスワードが暗号化鍵として使用される場合は、80 ビットや 128 ビットを使うべきです。

RHEL7/CentOS7でNICデバイス名をethに変更

 article  Comments Off on RHEL7/CentOS7でNICデバイス名をethに変更
Feb 012016
 

/etc/default/grubを変更してkernelパラメーターにnet.ifnames=0を付与する方法もありますが、「udev のルールファイルをマスク化する」のが一番手っ取り早いように思います。

ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules

こちらで/usr/lib/udev/rules.d/80-net-name-slot.rulesの定義が無効化されます。
ちなみに同ファイルを見てみると、net.ifnames=0を設定することにより、ルールがスキップされるようになっていることが確認できます。

※参考
Red Hat Enterprise Linux 7 ネットワークガイド – 8.9. ネットワークデバイス命名における一貫性の無効化

RMIのRegistry portとServer port

 article  Comments Off on RMIのRegistry portとServer port
Jul 062015
 

JavaのRMI(Remote Management Interface)ではRegistry portとServer portの2種類が使用されます。
RPCみたいなもので、後者のポートはRegistory Portでのやりとりで動的に決まるのでFirewall越しでの接続が面倒でした。

ところがJava 7 Update 4以降ではServer portを指定できるようになったようです。Registory portと同じ値にすることも可能。
公式ドキュメントには記載がないのですが、ドキュメントバグとしてチケットにあがっています。

Should document com.sun.management.jmxremote.rmi.port.

 Posted by at 12:37 am