3

Chef を使用して別のユーザーのレジストリにアクセスすることはできますか? シェフクライアントをシステムとして実行していて、User1 のレジストリを変更したいですか? これを行う方法はありますか?

registry_keyリソースはHKEY_Users にアクセスする方法を提供しますが、ユーザー名を SID にマップする方法がわかりません。

4

1 に答える 1

4

これは最終的にやや複雑になり、それを見ると私はうんざりします. しかし、それはうまくいくようです!

この Server Fault answerで説明されているように、レジストリを介して別のユーザーの環境変数を変更したかったのですが、Chef でユーザーを作成したかったのです。問題は、ユーザーがログインするまで Windows がユーザーのレジストリ ハイブを作成しないことです。

関連するユーザーが確実に存在する場合は、ユーザーのレジストリ キーの変更にスキップできます。

Windows にユーザー レジストリ ハイブを強制的に作成させる

Chef ビルトインexecutebatchリソースはパスワードの提供をサポートしていないようです。その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 の収束フェーズで評価する)。

于 2015-01-29T20:31:35.873 に答える