Windowsストアアプリを削除する

PowerShellで下記コマンドを実行し、削除したいアプリのnameを確認する。

Get-AppxPackage "*検索値*"

同じくPowerShellで下記コマンドを実行して削除する。

Get-AppxPackage [前手順で確認したName] | Remove-AppxPackage

batファイルでOS毎に処理を分岐させる

verコマンドの結果を取得して分岐処理する。

@echo off

for /f "usebackq tokens=*" %%i in (`ver`) do set version=%%i
if not "%version:Version 10=%" == "%version%" goto WIN10
if not "%version:Version 6.3=%" == "%version%" goto WIN8.1
if not "%version:Version 6.2=%" == "%version%" goto WIN8
if not "%version:Version 6.1=%" == "%version%" goto WIN7
goto FIN

:WIN10
echo win10
goto FIN

:WIN8.1
echo win8.1
goto FIN

:WIN8
echo win8
goto FIN

:WIN7
echo win7
goto FIN

:FIN

pause

コマンドプロンプトでアクセス権を変更する

フォルダ C:\test 及び以下のサブフォルダとファイルに Administrator をフルコントロールで追加する。

icacls C:\test /grant Administrator:(OI)(CI)F /T

フォルダ C:\test 及び以下のサブフォルダとファイルに test-user を読み取りと実行権限で追加する。

icacls C:\test /grant test-user:(OI)(CI)RX /T

フォルダ C:\test 及び以下のサブフォルダとファイルに test-group を変更権限で追加する。

icacls C:\test /grant test-user:(OI)(CI)M /T

フォルダ C:\test 及び以下のサブフォルダとファイルの所有者を Administrators に変更する。

icacls C:\test /setowner Administrators /T

ファイル C:\text.txt のアクセス権から Administrators を削除する。

icacls C:\test.txt /remove Administrators

ディスクの管理で削除できないEFIなどの特殊なパーティションを削除する

1. 管理者としてコマンドプロンプトを実行

2. 下記コマンドを実行しDISKPARTを起動
 diskpart

3. ディスク一覧を見る
 list disk

4. ディスクを選択する
 select disk [3で確認したディスクNo]

5. パーティション一覧を見る
 list partition

6. パーティションを選択する
 select partition [5で確認したパーティションNo]

7. パーティションを削除
 delete partition override

8. 終了させる
 exit

WindowsでSSID毎に設定を変更するbatファイル

下記内容でbatファイルを作成する。
更に同ディレクトリにSSIDと同じ名前のbatファイルを作成しておき、それぞれの処理を記述する。設定対象外のSSID用の処理はother.batに記述して同じく配置する。
作成した下記内容のbatファイルをタスクスケジューラに登録し、任意のタイミング、任意の権限で自動実行させると良いと思います。

setlocal enabledelayedexpansion
    :: netshの結果を取得する
    set netshresult=
    for /f "usebackq tokens=*" %%i in (`netsh wlan show interfaces`) do (
        set netshresult=!netshresult!^%%i
    )
    :: 設定1
    set ssid=test-ssid1
    call set compare=%%netshresult:%ssid%=%%
    if not "%netshresult%" == "%compare%" goto CHANGE
    :: 設定2
    set ssid=test-ssid2
    call set compare=%%netshresult:%ssid%=%%
    if not "%netshresult%" == "%compare%" goto CHANGE
    :: その他のSSID
    set ssid=other
    :: 変更処理
    :CHANGE
    :: SSIDと同じ名前のbatファイルを呼び出す
    call %~dp0\%ssid%.bat
    :END
endlocal

Windowsの設定をGUI以外の方法で変更する

デフォルトのユーザープロファイルに対するレジストリ設定

  1. regeditを起動しHKUにフォーカスして「ファイル」→「ハイブの読み込み」から「C:\Users\Default\NTUSER.DAT」を指定し、名前をDefaultProfileにする。
  2. そのままregeditでレジストリを変更するか「reg add “HKU\DefaultProfile\SOFTWARE…」のようにコマンドで変更する。
  3. 再度regeditでDefaultProfileにフォーカスして「ファイル」→「ハイブのアンロード」で元に戻す。

初回ログイン時のスタート画面を構成する

構成済みアカウントから下記コマンドでバックアップしてDefaultプロファイルに配置する。
対象OS:Win10(AnniversaryUpdate以上)

@powershell Export-StartLayout -path C:\Users\Default\AppData\Local\Microsoft\Windows\Shell\LayoutModification.xml

ストアアプリの自動更新を無効にする

対象OS:Win10

reg add "HKLM\SOFTWARE\Policies\Microsoft\WindowsStore" /v AutoDownload /t REG_DWORD /d 3 /f

ときどきスタート画面におすすめを表示しない

対象OS:Win10

reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v SystemPaneSuggestionsEnabled /t REG_DWORD /d 0 /f

Windowsを使用するためのヒントやおすすめの通知を非表示にする

対象OS:Win10

reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v SoftLandingEnabled /t REG_DWORD /d 0 /f

“Windowsへようこそ”の通知を非表示にする

対象OS:Win10

reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v SubscribedContent-310093Enabled /t REG_DWORD /d 0 /f

Windowsで通常使うプリンターを管理しない

対象OS:Win10

reg add "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v LegacyDefaultPrinterMode /t REG_DWORD /d 1 /f

WindowsUpdateの延期を無効にする

対象OS:Win10

reg add "HKLM\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v DeferFeatureUpdatesPeriodInDays /t REG_DWORD /d 0 /f
reg add "HKLM\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v DeferQualityUpdatesPeriodInDays /t REG_DWORD /d 0 /f
reg add "HKLM\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v FlightSettingsMaxPauseDays /t REG_DWORD /d 1 /f

WindowsUpdateの更新方法を構成する

対象OS:Win7、Win8、Win10

REM 1:自動更新無効、0:自動更新有効
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v NoAutoUpdate /t REG_DWORD /d 0 /f
REM 1:無効、2:更新あったら通知、3:自動ダウンロードと通知、4:自動インストール
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v AUOptions /t REG_DWORD /d 4 /f

WindowsUpdate後の強制再起動を構成する

対象OS:Win7、Win8、Win10

REM 1:再起動を強制しない、0:強制的に再起動される
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v AUOptions /t REG_DWORD /d 4 /f

WindowsUpdateのスケジュールを構成する

対象OS:Win7、Win8、Win10

REM 0:毎日、1:毎週日曜日~7:毎週土曜日
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v ScheduledInstallDay /t REG_DWORD /d 0 /f
REM 0~23(0時~23時)で指定
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v ScheduledInstallTime /t REG_DWORD /d 12 /f

初回サインインのアニメーションを無効にする

対象OS:Win8、Win10

reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v EnableFirstLogonAnimation /t REG_DWORD /d 0 /f

エクスプローラーの初期画面を「PC」に変更

対象OS:Win10

reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v LaunchTo /t REG_DWORD /d 1 /f

タスクバーのストアを削除する

下記内容のVBSを作成して実行する。
対象OS:Win10

For Each verb In CreateObject("Shell.Application").Namespace("shell:AppsFolder").ParseName("Microsoft.WindowsStore_8wekyb3d8bbwe!App").Verbs
    If verb.name = "タスク バーからピン留めを外す(&K)" Then verb.DoIt
Next

タスクバーのMediaPlayerを削除する

下記内容のVBSを作成して実行する。
対象OS:Win7

path = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%USERPROFILE%\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar")
Set Folder = CreateObject("Shell.Application").NameSpace(path)
For Each FolderItem In Folder.Items()
    If FolderItem.Name = "Windows Media Player" Then
        For Each Verb In FolderItem.Verbs
            If Verb.Name="タスク バーに表示しない(&K)" Then Verb.Doit
        Next
    End If
Next

スクリーンセーバーのロックアウトを構成する

対象OS:Win7、Win8、Win10

REM 再開時にログオン画面に戻るチェックON
reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d "1" /f
REM 待ち時間(秒)
reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d "600" /f

Ctrl+Alt+Delによるサインインを有効にする

対象OS:Win7、Win8、Win10

reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v DisableCAD /t REG_DWORD /d 0 /f

ネットワークレベル認証でリモートデスクトップを有効にする

対象OS:Win7、Win8、Win10

reg add "HKLM\SYSTEM\ControlSet001\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 1 /f

ファイアウォールを有効にする

対象OS:Win7、Win8、Win10

netsh advfirewall set allprofiles state on

プログラムの例外をファイアウォールに登録する

対象OS:Win7、Win8、Win10

netsh advfirewall firewall add rule name="プログラム名など" dir=in action=allow program="%programfiles%\Test Package\test_program.exe" enable=yes

ポートの例外をファイアウォールに登録する

対象OS:Win7、Win8、Win10

netsh advfirewall firewall add rule name="TCP Port 80" dir=in action=allow protocol=TCP localport=80

IPv6を無効にする

対象OS:Win7、Win8、Win10

reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters" /v DisabledComponents /t REG_DWORD /d 4294967295 /f

リモートデスクトップをファイアウォールの例外に登録する

下記内容のVBSを作成して実行する。
対象OS:Win7、Win8、Win10

Dim wscriptShell
Set wscriptShell = CreateObject("WScript.Shell")
Dim root
root = "HKEY_LOCAL_MACHINE"
Dim key
key = "\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules"
Set exec = wscriptShell.Exec("cmd /c reg query """ & root & key & """ /v ""RemoteDesktop-*""")
Dim result
result = exec.StdOut.ReadAll
Dim values
values = Replace(result, root & key, "")
Dim arrayTempValues
arrayTempValues = Split(values, "検")
values = arrayTempValues(0)
Dim arrayValues
arrayValues = Split(values, vbNewLine)
For i = 0 to Ubound(arrayValues)
 Dim valueString
 valueString = Trim(arrayValues(i))
  if Len(valueString) > 0 Then
        Dim fields
      fields = Split(valueString, "    ")
     Dim name
        name = fields(0)
        Dim value
       value = fields(2)
       value = Replace(value, "Active=FALSE", "Active=TRUE")
       wscriptShell.RegWrite "HKLM" & key & "\" & name, value
 End if
Next

コントロールパネルをクラシック表示にする

対象OS:Win7、Win8、Win10

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v ForceClassicControlPanel /t REG_DWORD /d 1 /f

最近開いた項目を非表示にする

対象OS:Win7、Win8、Win10

reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_TrackDocs /t REG_DWORD /d 0 /f

最近開いたプログラムを非表示にする

対象OS:Win7、Win8、Win10

reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_TrackProgs /t REG_DWORD /d 0 /f

エクスプローラーのセキュリティタブを非表示にする

対象OS:Win7、Win8、Win10

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoSecurityTab /t REG_DWORD /d 1 /f

ネットワークドライブを管理者権限と通常権限で共有するよう構成する

対象OS:Win7、Win8、Win10

reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v EnableLinkedConnections /t REG_DWORD /d 1 /f

Windowsの電源操作を禁止する

対象OS:Win7、Win8、Win10

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoClose /t REG_DWORD /d 1 /f

Windowsのサインアウト(ログオフ)を禁止する

対象OS:Win7、Win8、Win10

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v StartMenuLogOff /t REG_DWORD /d 1 /f

コンピューターのロックを削除する

対象OS:Win7、Win8、Win10

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v DisableLockWorkstation /t REG_DWORD /d 1 /f

パスワードの変更を削除する

対象OS:Win7、Win8、Win10

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v DisableChangePassword /t REG_DWORD /d 1 /f

サービスからのCtrl+Alt+Deleteシミュレートを有効にする

対象OS:Win7、Win8、Win10

reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v SoftwareSASGeneration /t REG_DWORD /d 1 /f

ネットワーク認証のためにパスワードおよび資格情報を保存することを許可しない

対象OS:Win7、Win8、Win10

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v disabledomaincreds /t REG_DWORD /d 1 /f

PowerShellのスクリプトの実行を有効にする

対象OS:Win7、Win8、Win10

reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell" /v EnableScripts /t REG_DWORD /d 1 /f

PowerShellのスクリプトの実行ポリシーを変更する

対象OS:Win7、Win8、Win10

REM 署名済みのみ:AllSigned、ローカルスクリプト+署名済み:RemoteSigned、すべて許可する:Unrestricted
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell" /v ExecutionPolicy /t REG_DWORD /d RemoteSigned /f

ユーザーごとのプリンタの印刷設定をエクスポート・インポートする

対象OS:Win7、Win8、Win10

REM 設定済みの状態ですべてのプリンタの設定データをエクスポートする
reg export "HKCU\Printers\DevModePerUser" C:\Users\User\Desktop\user_printer_settings.reg
REM 未設定のパソコンでエクスポートした設定データをインポートする
reg import C:\Users\User\Desktop\user_printer_settings.reg

スクリーンセーバーを構成する

対象OS:Win7、Win8、Win10

REM スクリーンセーバーをブランク
reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f
reg add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d C:\WINDOWS\system32\scrnsave.scr /f
REM タイムアウトを30分
reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 1800 /f
REM 再開時にログイン画面に戻る
reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 1 /f

CentOS7+Samba4のActiveDirectory環境でのSMB共有

CentOS7にSamba4(4.6.5)をインストールし、ActiveDirectoryを構築した環境でWindowsからSMBプロトコルでアクセスする。

※Samba4にてドメインコントローラーの構築が完了している前提

共有用のディレクトリを作成する。
今回は /home/samba/share/ でやる。

# mkdir /home/share/
# chmod 777 /home/share/

/usr/local/samba/etc/smb.confを編集する。

[global]
unix charset = UTF8
dos charset = CP932
netbios name = TEST-DC1
realm = LOCAL.EXAMPLE.COM
workgroup = EXAMPLE
dns forwarder = 8.8.8.8
server string = TEST-DC1
server role = active directory domain controller
idmap_ldb:use rfc2307 = yes

[share]
path = /home/share/
comment = EXAMPLE\AdministratorとEXAMPLE\DomainUsersのみが読み書き可能
read only = no
valid users = Administrator "@domain users"
inherit acls = yes
inherit owner = yes
inherit permissions = yes
vfs objects = acl_xattr streams_xattr

Sambaサービスを再起動して動作を確認する。

smb.conf の主なパラメーターについて

browseable このパラメーターは、net view コマンドやブラウズリスト中に現れる利用可能な共有の一覧にこの共有を表示させるかどうかを制御する。
既定値: browseable = yes
config file このオプションを指定することで、デフォルトの設定ファイル (通常smb.conf)の代わりのファイルを利用して、設定を上書きすることが可能になる。このオプション自身が config file 中に記述されるため、これには「鶏と卵」問題がある。
そのため、このパラメーターによって設定ファイルが変更されると、新しい設定ファイルの内容が先頭からロードされる。
このオプションには、通常の変数置換が適用されるので、うまく使えばとても便利であろう。
指定された設定ファイルが存在しない場合は読み込まれない (これにより、特定クライアントに対して、特別な設定ファイルを指定するということが可能となる)。
既定値なし
例: config file = /usr/local/samba/lib/smb.conf.%m
create mask ファイル作成時に付与されるパーミッションは、DOS の属性を UNIX のパーミッションに変換することにより生されるが、最終的には、このパラメーターとビット単位の AND 演算が行なわれる。このパラメーターは、ファイルのUNIX のパーミッションに対するビットマスクと考えることができる。ここで設定されないビットは、ファイル作成時のパーミッションから削除される。
このパラメーターの既定値は、「group」と「other」の書き込みおよび実行権を UNIX のパーミッションから取り除いた値である。
この処理に引続き、Samba はこのパラメーターにより生成されたパーミッションを force create mode パラメーターの値とビット単位の OR 演算を行なう。なおパラメーターの値はデフォルトで、000 に設定されている。
このパラメーターは、ディレクトリのパーミッション生成には関与しない。directory mask パラメーターを参照のこと。
このパラメーターは、Windows NT/2000 の ACL エディターにより設定されるアクセス許可には関与しない。管理者が ACL に対するビットマスクも同様に設定したいと考えている場合は、security mask の設定が必要である。
既定値: create mask = 0744
deadtime このパラメーターの値(10進の整数)は、接続が利用されなくなったとみなされて切断が行なわれるまでの経過時間(分)を表す。deadtime はオープンされているファイルが存在しない時のみ有効である。
このパラメーターは、多数の利用されていない接続によって、サーバー上のリソースが枯渇するのを防ぐのに有効である。
多くのクライアントは、このパラメーターをユーザーに意識させないように、接続が切断されていた際に、自動で再接続を行なう機能を持っている。
ほとんどのシステムにおいて、このパラメーターを利用して、数分でタイムアウトが発生するようにすることを推奨する。
deadtime が 0 の場合、タイムアウトによる自動的な切断は行なわれない。
既定値: deadtime = 0
例: deadtime = 15
delete readonly このパラメーターにより、読み取り専用のファイルの削除が可能になる。これは DOS の仕様ではないが、UNIX では可能な処理である。
このオプションは、rcs のようなアプリケーションを動作させるのに有用で、UNIX ファイルの所有者に関する仕様がファイルのパーミッション変更を妨げたり、DOS の仕様が読み取り専用ファイルの削除を妨げたりする問題を回避する。
既定値: delete readonly = no
directory mask このパラメーターは、パーミッションを示す8進数の数値であり、UNIX 側のディレクトリ作成時に DOS の属性から UNIX のパーミッションを生成する際に使われる。
ディレクトリ作成時に付与されるパーミッションは、DOS の属性と UNIX のパーミッションとのマッピングにしたがって、DOS の属性を UNIX のパーミッションに変換することにより生成されるが、最終的には、このパラメーターとビット単位の AND 演算が行なわれる。このパラメーターは、ディレクトリの UNIX のパーミッションに対するビットマスクと 考えることができる。ここで設定されないビットは、ディレクトリ作成時のパーミッションから削除される。
このパラメーターの既定値は、「group」と「other」の書き込み権を UNIX のパーミッションから取り除き、ディレクトリの所有者のみが変更可能にしたものである。
この処理に引き続いて、Samba はこのパラメーターで生成された UNIX のパーミッションと force directory mode パラメーターの値との OR 演算を行う。このパラメーターは既定では 000 に設定されている(つまり、追加されるパーミッションはない)。
このパラメーターは、Windows NT/2000 の ACL エディターで設定される アクセス許可には適用されない。ACL に対しても強制的にマスクを適用したい場合は、directory security mask パラメーターを設定することが必要である。
既定値: directory mask = 0755
directory security mask このパラメーターは、Windows NT クライアント上のセキュリティダイアログボックスを使って、UNIX ディレクトリのパーミッションを操作する時に、設定可能な UNIX 側のパーミッションを指定する。
このパラメーターは、変更されるパーミッションビットに対して、マスクとして適用され (AND 操作が適用され)るため、このマスクにないビットは変更操作から保護される。このパラメーターを、AND ではなく OR 操作を実行するパラメーターである force directory security mode と混同しないように。基本的に、マスク中で 0 と指定されたビットは、常時0であるビットと見なされる。
基本的に、このマスク中ですべてのビットを0に設定することは、ファイル上の、このビットの以前のステータスにかかわらず、ファイルのパーミッション上の 対応するビットを0に設定する結果となる。
このパラメーターが明示的に指定されなかった場合は、0777 に設定される。これにより、ディレクトリに対する全ての user/group/world パーミッションが変更可能となる。
注意 : 他の方法を使って Samba サーバーにアクセスすることが可能なユーザーは、この制限を簡単に回避できてしまう。そのため、このパラメーターの主な用途はスタンドアロンで動作する”アプライアンス” システムになるだろう。通常のシステムの管理者のほとんどは、このパラメーターを規定値の 0777 のままにしておきたいと考えるだろう。
既定値: directory security mask = 0777
display charset Samba がメッセージを標準出力や標準エラー出力に出力する際に 用いる文字コードセットを指定する。既定値は “LOCALE”であり、これは、ロケールに従い、自動的に設定される ことを意味する。この値は、通常、unix charset と同じに 設定すべきである。
既定値: display charset = “LOCALE” or “ASCII” (システムに依存)
例: display charset = UTF8
dont descend システムに存在するディレクトリには、クライアントに参照させたくないものや、無限に深い(再帰的)なものが存在する(たとえば Linux での /proc)。このパラメーターは常に空のように見せかけるサーバー側のディレクトリをコンマで区切って指定する。
Samba が要求する「dont descend」の書式は一定ではない。たとえば /proc ではなく ./proc でなければならないかもしれない。実験してみるのが最良の方法である。
既定値: dont descend =
例: dont descend = /proc,/dev
dos charset DOS SMB クライアントは、サーバー側でも自身と同じ文字コードセットを使用していると想定する。このオプションにより、Samba が DOS クライアントと通信する際に用いられる文字コードセットを指定する。
デフォルトは Samba にインストールされた文字コードセットによって異なる。Samba は、文字コードセット 850 の使用を試みるが、使用できない場合は ASCII を使用する。testparm(1) コマンドを実行することで、システム上の既定値を確認することが可能である。
既定値なし
例: dos charset = CP932
fstype このパラメーターは、クライアントが共有のファイルシステムを問い合わせた際に、smbd(8) が返却する共有のファイルシステム名を指定する。デフォルトは Windows NT 互換の NTFS だが、必要に応じて Samba や FAT といった別の文字列に、変更することができる。
既定値: fstype = NTFS
例: fstype = Samba
guest account このパラメーターは、guest ok (以下を参照のこと) が設定されたサービスにアクセスする際に使用されるユーザー名である。ゲストサービスに接続しているクライアントすべてに対して、ここで設定したユーザーの権限が適用される。このユーザーはパスワードファイルに存在している必要があるが、ログイン可能となっている必要はない。このパラメーターとして、「ftp」ユーザーを利用するのもよいであろう。
システムによっては、アカウント「nobody」では印刷することができない。この場合は別のアカウントを使用すること。ゲストユーザーでログイン(su -コマンドなどを使用する)して、lpr(1) や lp(1) などの、システムにある印刷コマンドを実行して印刷を行ってみることで、これを確認しておくべきであろう。
このパラメーターは % マクロを受け付けない。システムの大半の箇所では、正常動作する上でこの値が静的に設定されていることが必要とされるためである。
既定値: guest account = nobody # default can be changed at compile-time
例: guest account = ftp
guest ok このパラメーターが yes のサービスに付いては、サービスへの接続の際にパスワードが要求されない。この場合、guest account の権限で操作が行われる。
このパラメーターは restrict anonymous = 2 のメリットを無効にする。
既定値: guest ok = no
guest only このパラメーターが yes のサービスについては、ゲスト接続のみが許可される。このパラメーターは、guest ok が有効になっていないサービスでは無効である。
既定値: guest only = no
hide dot files この真偽値パラメーターにより、ドットで始まるファイル名のファイルを隠しファイルとして扱うかどうかが制御される。
既定値: hide dot files = yes
hide files これは、見せたくないがアクセスは許可したいファイルやディレクトリのリストを指定する。DOSの「隠し」属性が該当するファイルやディレクトリに付加される。リストの各エントリは、スペースをエントリ中に含められるようにするため、「/」で区切る必要がある。「*」と「?」は、DOSのワイルドカードと同様にして、複数のファイルやディレクトリを指定するために利用することができる。各エントリはUNIXのパス形式で指定すること。DOSのパス形式で指定したり、UNIXでディレクトリを意味する「/」を含んだりはできない。
この設定には、case sensitive オプションの設定が影響することに注意。
このパラメーターを設定すると、全てのファイルやディレクトリに対して該当するかどうかの確認を行う必要が発生するため、Samba のパフォーマンスに影響がでる。
以下の設定例は、Thursby から入手可能な Macintosh 上の SMB クライアント (DAVE) が内部的な用途に作成するファイルの指定に加え、ドットで始まるファイルを隠しファイルとして指定したものである。
このパラメーターの設定例を以下に示す。
既定値: hide files = # どのファイルも隠されない
例: hide files = /.*/DesktopFolderDB/TrashFor%m/resource.frk/
inherit acls このパラメーターは、親ディレクトリに既定値のACLが設定されており、サブディレクトリの作成時に、その ACL の設定を引き継がせたい場合に用いられる。既定値ではディレクトリ作成時に 設定されるモードが用いられる。このオプションを有効にすると、モードが 0777 となり、ディレクトリの既定値のACLを確実に継承できるようになる。ネイティブなWindowsデータをメタデータとして格納する、VFSモジュールacl_xattrか acl_tdbは、ロードされるどのような共有に対しても、WindowsのACLを正しく エミュレートするために、このオプションを自動的にオンにする事が要求される ことに注意。
既定値: inherit acls = no
inherit owner 新規作成したファイルやディレクトリの所有者としては、通常接続しているユーザーの実行 UID の値が用いられる。このパラメーターにより、Samba の管理者は、新規作成したファイルやディレクトリの所有者を 親ディレクトリの所有者と同一にすることが可能となる。
この動作が有用な状況としては、ユーザーがファイルの作成や修正はできるが、削除はできないようにした drop box や、あるユーザーの移動プロファイルのディレクトリ内に新規作成されたファイルの所有者が そのユーザーとなるようにしたい場合などが挙げられる。
既定値: inherit owner = no
inherit permissions 通常、新規作成したファイルやディレクトリのパーミッションは、 create mask 、directory mask 、 force create mode 、 force directory mode パラメーターによって決定されるが、 真偽値パラメーターである inherit permissions は、それらに優先される。
新しいディレクトリはsetgid のようなビットも含め、 親ディレクトリのパーミッションを引き継ぐようになる。
新しく作成されたファイルは、read/write ビットの設定を親ディレクトリから引き継ぐようになる。 execute ビットについては、従来どおり map archive 、 map hidden 、map system などにより制御される。
setuid ビットが引き継がれることは、決して ない(コード上で明示的に禁止している)。
このパラメーターは、数千人レベルの多くのユーザーが存在する大規模なシステムで、 単一の [homes] 共有を各ユーザーが柔軟に利用できるようにさせる際に、 特に有用であろう。
既定値: inherit permissions = no
invalid users これは、サービスに対するログインを許可しないユーザーのリストを指定する。このパラメーターは、不適切な設定により発生しうるセキュリティ上の問題を完全に抑止する、パラノイド的設定である。
「@」ではじまる名前は(システムがNISをサポートしている場合)、まずNISネットグループとして解釈され、NISネットグループデータベースに名前が存在しない 時は、UNIXのグループとして解釈される。
「+」で始まる名前は、NSS getgrnam() インタフェース経由でUNIXのグループ名として のみ解釈される。「 & 」で始まる名前は、NISネットグループの名前としてのみ解釈される (この場合システムでNISが稼働している必要がある)。名前の前に付けられた「+」および「 & 」文字は、検索の順番を示す意味で使うこともできる。例えば、+&groupは、UNIXグループを検索してから、NISネットグループを検索するという意味になり、&+groupは、NIS ネットグループを検索してから UNIXグループを検索するという意味になる(これは「@」と同等になる)。
%Sは、現在のサービス名に置換される。これは [homes] セクションで有効である。
既定値: invalid users = # invalid users は空である
例: invalid users = root fred admin @wheel
log level このパラメーターの値(整数値)により、smb.conf ファイル中でデバッグレベル(ログレベル)を設定することが可能になる。このパラメーターは Samba 2.2.x 系列と比べ強化されており、デバッグクラス毎にデバッグレベルを指定することが可能となっている。これにより、システムの設定が非常に柔軟に行なえるようになる。以下の デバッグクラスが現在実装されている。
all、tdb、printdrivers、lanman、smb、rpc_parse、rpc_srv、rpc_cli、passdb、sam、auth、winbind、vfs、idmap、quota、acls、locking、msdfs、dmapi、registry
既定値: log level = 0
例: log level = 3 passdb:5 auth:10 winbind:2
read list これは、サービスに対して読み取りアクセス許可のみを与えられたユーザーのリストである。接続したユーザーがこのリスト中に存在する場合、read only パラメーターの値がどのように設定されていても、書き込みアクセス許可は与えられない。リストには invalid users パラメーターの説明で記述した形式を使って、グループ名を含めることも可能である。
Samba 3.0 系列において、このパラメーターは security = share の環境で動作しない。これは仕様である。
既定値: read list =
例: read list = mary, @students
read only writeable の反意語である。
このパラメーターが yes の場合、ユーザーは、サービスのディレクトリ内におけるファイルの作成も修正もできない。
印刷サービス(printable = yes)の場合、ユーザーは常に(アクセス権を持っている) ディレクトリに対して書き込むことが可能であるが、書き込みはスプール操作経由に限られる。
既定値: read only = yes
unix charset Samba が動作する UNIX マシンで使われている文字コードを指定する。この情報は、Samba が SMB クライアントの使用している文字コードと文字列の変換を行なうために必要である。
ここで設定した文字コードは、Samba から実行するスクリプトの引数にも用いられる。
既定値: unix charset = UTF8
例: unix charset = ASCII
valid users サービスにアクセスできるユーザーのリストを指定する。’@’、’+’、’&’ からはじまる名前は、invalid users パラメーターで説明した規則にしたがって解釈される。
このパラメーターが設定されていない場合(既定値)、どのようなユーザーでもログインできる。このリストと invalid users の両方に含まれるユーザーのアクセスは拒否される。
%S は、現在のサービス名に置き換えられる。これは [homes] セクションで用いると便利である。
既定値: valid users = # No valid users list (anyone can login)
例: valid users = greg, @pcusers
veto files このパラメーターは、一覧することもアクセスすることもできないファイルとディレクトリのリストを指定する。リストの各エントリは ‘/’ で区切ること。これにより、エントリ中に空白文字を用いることが可能になっている。’*’と ‘?’は DOS のワイルドカードと同様、複数のファイルやディレクトリを指定するために利用できる。
各エントリはDOSの形式ではなく、UNIXでのパス形式である必要があり、UNIX のディレクトリ区切りである ‘/’を含めてはならない。
case sensitive オプションが、この処理に影響することに注意。
veto files パラメーターの利用に際して注意すべき重要な点が、ディレクトリ削除時の動作である。削除されるディレクトリに veto files パラメーターに一致するファイルが存在する場合、delete veto files パラメーターが yes でない限り、削除は失敗する。
このパラメーターを設定した場合は、ファイルやディレクトリの一覧を取得する際、すべてのファイルとディレクトリについて、このパラメーターのマッチング処理が行なわれるようになるため、Samba の性能に影響が発生する。
以下に設定例を記載する:
veto files = /*Security*/*.tmp/*root*/
veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/
既定値: veto files = アクセスできないファイルやディレクトリはない
vfs objects このパラメーターは、Samba の VFS I/O 操作において用いられるバックエンド名を指定する。デフォルトでは通常のディスク I/O 操作が行なわれるが、VFS オブジェクトによりこの操作を変更することが可能である。
既定値: vfs objects =
例: vfs objects = extd_audit recycle
writeable read only の反意語である。
既定値なし
write cache size この数値パラメーターを 0 以外に設定すると、Sambaは oplock された各ファイルに対してメモリキャッシュを作成するようになる (oplock されないファイルに対しては 行なわれない 。クライアントがディスクへの書き出しを直接要求していない書き込みは全て、可能な限りこのキャッシュに蓄積される。キャッシュはキャッシュに適さない位置からの書き込みが行なわれた時か、ファイルがクライアントによってクローズされた時に書き出される。データがキャッシュ中に存在していれば、ファイルからの読み出しにキャッシュが使用される。
Sambaは、このキャッシュにより、RAID ディスクに対して適切な書き込みサイズでクライアントからの書き込みを処理できるようになり (例えば、書き込みサイズをRAIDのストライプサイズに合わせる)、ディスクサブシステムがボトルネックとなっているが、ユーザー空間のプログラム向けの空きメモリがあるシステムのパフォーマンスを向上させることができる。
この数値パラメーターにより、(oplock を行なったファイル単位での) キャッシュサイズがバイト単位で指定される。
既定値: write cache size = 0
例: write cache size = 262144 # 1 ファイルあたり 256k のキャッシュサイズ
write list これは、サービスに対して読みとりおよび書き込み権が与えられるユーザーのリストである。接続したユーザーがこのリストに存在している場合は、例え read only オプションが no であっても書き込み権が与えられる。このリストには、@group という形式を用いることでグループ名を含めることもできる。
Samba 3.0 において、このパラメーターは security = share では動作しない。これは仕様である。
既定値: write list =
例: write list = admin, root, @staff

CentOS7+Samba4での無料ActiveDirectory構築

今回はプライマリとセカンダリの2台を構成する。

プライマリとセカンダリの共通設定

ホスト名の設定。それぞれ test-dc1 test-dc2 とする。

# hostnamectl set-hostname test-dc1

NTPサーバーにする。
※構築手順はこちらの記事を参照

必要なコンポーネントのインストールらしい。

yum -y install \
perl \
gcc \
libacl-devel \
libblkid-devel \
gnutls-devel \
readline-devel \
python-devel \
gdb \
pkgconfig \
krb5-workstation \
zlib-devel \
setroubleshoot-server \
libaio-devel \
setroubleshoot-plugins \
policycoreutils-python \
libsemanage-python \
setools-libs-python \
setools-libs \
popt-devel \
libpcap-devel \
sqlite-devel \
libidn-devel \
libxml2-devel \
libacl-devel \
libsepol-devel \
libattr-devel \
keyutils-libs-devel \
cyrus-sasl-devel \
cups-devel \
bind-utils \
libxslt \
docbook-style-xsl \
openldap-devel

最新版のSambaをダウンロードする。この記事を書いたときは4.6.5だった。

$ wget http://www.samba.org/samba/ftp/samba-latest.tar.gz

解凍してインストールする。

$ tar zxf samba-latest.tar.gz
$ cd samba-*
# ./configure; make; make install

ファイアウォールの例外を登録する。

# firewall-cmd --permanent --add-port=42/tcp
# firewall-cmd --permanent --add-port=53/tcp
# firewall-cmd --permanent --add-port=53/udp
# firewall-cmd --permanent --add-service=kerberos
# firewall-cmd --permanent --add-service=ntp
# firewall-cmd --permanent --add-port=135/tcp
# firewall-cmd --permanent --add-port=137/udp
# firewall-cmd --permanent --add-port=138/udp
# firewall-cmd --permanent --add-port=139/tcp
# firewall-cmd --permanent --add-service=ldap
# firewall-cmd --permanent --add-port=389/tcp
# firewall-cmd --permanent --add-port=389/udp
# firewall-cmd --permanent --add-service=samba
# firewall-cmd --permanent --add-port=464/tcp
# firewall-cmd --permanent --add-port=464/udp
# firewall-cmd --permanent --add-service=ldaps
# firewall-cmd --permanent --add-port=1024-5000/tcp
# firewall-cmd --permanent --add-port=49152-65535/tcp
# firewall-cmd --permanent --add-port=5722/tcp
# firewall-cmd --permanent --add-port=9389/tcp
# firewall-cmd --reload

SELinuxの例外を登録する。

# setsebool -P samba_domain_controller true
# setsebool -P samba_export_all_ro true
# setsebool -P samba_export_all_rw true
# setsebool -P samba_enable_home_dirs true

systemdにsambaサービスを登録する。
/etc/systemd/system/samba.service を下記内容で作成。

[Unit]
Description= Samba 4 Active Directory
After=syslog.target
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/samba/var/run/samba.pid
ExecStart=/usr/local/samba/sbin/samba
[Install]
WantedBy=multi-user.target

プライマリの設定

ドメインをセットアップする。
※–use-rfc2307 (Linux/BSD/macOSを認証する場合は必須)
※–interactive (セットアップを対話式で行う)
※–function-level=2008_R2 (機能レベルを2008_R2に)

# /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive --function-level=2008_R2

Realm: LOCAL.EXAMPLE.COM
Domain: EXAMPLE

下記のエラーが発生した場合は/etc/krb5.confの includedir /etc/krb5.conf.d/ をコメントアウトする。

ERROR(ldb): uncaught exception - operations error at ../source4/dsdb/samdb/ldb_modules/password_hash.c:2816

参照DNSを自身のIPアドレスにする。
dns-searchをRealmに変更する。

サービスを有効にして起動する。

# systemctl enable samba
# systemctl start samba

セカンダリの設定

参照DNSのプライマリをプライマリドメコンのIPアドレスにする。
dns-searchをRealmに変更する。

プライマリでkrb5.conf内をコメントアウトしている場合は同じく /etc/krb5.conf の includedir /etc/krb5.conf.d/ をコメントアウトする。

ドメコンとしてドメイン参加させる。

# samba-tool domain join example DC -U administrator --realm=LOCAL.EXAMPLE.COM

/usr/local/samba/etc/smb.confに下記を追記する。

dns forwarder = [プライマリと同じforwarder]
idmap_ldb:use rfc2307 = yes

参照DNSのセカンダリを本サーバーのIPアドレスにする。

サービスを有効にして起動する。

# systemctl enable samba
# systemctl start samba

グループポリシーが自動では同期されないので、グループポリシーの変更後はセカンダリにて下記コマンドを実行する必要がある。

# rsync -a -u -e ssh root@test-dc1:/usr/local/samba/var/locks/sysvol/ /usr/local/samba/var/locks/sysvol/
# /usr/local/samba/bin/samba-tool ntacl sysvolreset

その他

Windowsの管理ツールではパスワードやアカウントロックのポリシーが変更できなかった。samba-toolで直接変更する。

# /usr/local/samba/bin/samba-tool domain passwordsettings set --complexity=on
# /usr/local/samba/bin/samba-tool domain passwordsettings set --min-pwd-length=5
# /usr/local/samba/bin/samba-tool domain passwordsettings set --min-pwd-age=30
# /usr/local/samba/bin/samba-tool domain passwordsettings set --max-pwd-age=0
# /usr/local/samba/bin/samba-tool domain passwordsettings set --account-lockout-duration=60
# /usr/local/samba/bin/samba-tool domain passwordsettings set --account-lockout-threshold=3
# /usr/local/samba/bin/samba-tool domain passwordsettings set --reset-account-lockout-after=60
# /usr/local/samba/bin/samba-tool domain passwordsettings set --reset-account-lockout-after=60
# /usr/local/samba/bin/samba-tool domain passwordsettings set --history-length=5

DNSの更新状況の確認。
No DNS updates needed ならOKらしい。

# /usr/local/samba/sbin/samba_dnsupdate --verbose

FSMOの確認。

# /usr/local/samba/bin/samba-tool fsmo show

FSMOの移行。転送先サーバーで下記コマンドを実行する。

# /usr/local/samba/bin/samba-tool fsmo transfer --role all

batファイルで変数を扱う

変数に値を入力するには SET を使い、値を使うには %変数名% で利用可能。

SET test=abcd
ECHO %test%

→ 結果はabcd

変数の文字を抽出するには :~0,0 を使う。

ECHO %test:~0,2%

→ 結果はab

変数内の文字を置き換えするには :x=y を使う。

ECHO %test:cd=ef%

→ 結果はabef

応用してyyyyMMddHHmmssを取得する。

SET test=%date%%time:~0,8%
SET test=%test:/=%
SET test=%test: =0%
SET test=%test::=%
ECHO %test%

→ 結果は20161106100152

WebBrowserコントロールで互換表示を無効に

以下のレジストリエントリを追加する。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"exeName.exe"=dword:00002af9

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"exeName.exe"=dword:00002af9