Chef を使用して別のユーザーのレジストリにアクセスすることはできますか? シェフクライアントをシステムとして実行していて、User1 のレジストリを変更したいですか? これを行う方法はありますか?
registry_keyリソースはHKEY_Users にアクセスする方法を提供しますが、ユーザー名を SID にマップする方法がわかりません。
Chef を使用して別のユーザーのレジストリにアクセスすることはできますか? シェフクライアントをシステムとして実行していて、User1 のレジストリを変更したいですか? これを行う方法はありますか?
registry_keyリソースはHKEY_Users にアクセスする方法を提供しますが、ユーザー名を SID にマップする方法がわかりません。
これは最終的にやや複雑になり、それを見ると私はうんざりします. しかし、それはうまくいくようです!
この Server Fault answerで説明されているように、レジストリを介して別のユーザーの環境変数を変更したかったのですが、Chef でユーザーを作成したかったのです。問題は、ユーザーがログインするまで Windows がユーザーのレジストリ ハイブを作成しないことです。
関連するユーザーが確実に存在する場合は、ユーザーのレジストリ キーの変更にスキップできます。
Chef ビルトインexecuteとbatchリソースはパスワードの提供をサポートしていないようです。そのuserため、どちらの属性も Windows で使用できるようには見えません。ただし、公式の Chef Windows クックブックには、ユーザーのパスワードを指定するための属性を含むリソースが含まれてwindows_taskいます。
問題は、関連するユーザーに「バッチ ジョブとしてログオン」するローカル セキュリティ ポリシーの権利を付与することです。それを達成するために、SecEditを使用できます。
クックブックが公式の Chef Windows クックブックに依存していることを確認してください。クックブックのmetadata.rbファイルに以下を追加します。
depends "windows"
Chef のレシピ コードは次のとおりです。
group "BatchJobUsers" do
append true
members ["AnotherUser"]
action :create
end
cookbook_file "BatchJobUsers-AddBatchLogonRight.inf" do
path "#{ENV['TEMP']}\\BatchJobUsers-AddBatchLogonRight.inf"
action :create_if_missing
end
execute "secedit" do
cwd "#{ENV['TEMP']}"
command "secedit /configure /db secedit.sdb /cfg BatchJobUsers-AddBatchLogonRight.inf"
end
windows_task "force-creation-of-AnotherUser-user-registry-hive" do
command "echo Force creation of AnotherUser user registry hive"
user "AnotherUser"
password "password-for-another-user"
action [:create, :run]
end
windows_task "force-creation-of-AnotherUser-user-registry-hive" do
action :delete
end
BatchJobUsers-AddBatchLogonRight.infという名前のCOOKBOOK/files/defaultディレクトリにファイルを追加する必要があります。次のものが含まれている必要があります。
[Unicode]
Unicode=yes
[Version]
signature="$CHICAGO$"
Revision=1
[Privilege Rights]
SeBatchLogonRight = "BatchJobUsers"
クックブックが公式の Chef Windows クックブックに依存していることを確認してください。クックブックのmetadata.rbファイルに以下を追加します。
depends "windows"
レシピに次の行を追加します。
::Chef::Recipe.send(:include, Windows::RegistryHelper)
resolve_user_to_sid次に、次のようにレシピで関数を使用できます。
get_user_sid = lambda { resolve_user_to_sid("USER_NAME") }
registry_key "Create environment variable registry keys" do
key lazy { "HKEY_USERS\\#{ get_user_sid.call }\\Environment"
values [{
:name => "Variable",
:type => :string,
:data => "variable_data"
}]
recursive true
action :create
end
存在しないユーザーを処理するには、key属性を遅延評価する必要があります (つまり、レシピを実行する Chef の収束フェーズで評価する)。