2017-03-23 13 views
0

シェフを使用してクライアント用のWindows 2012サーバーを管理するソリューションを提供しようとしましたが、残念ながらシェフクライアントの実行にはChef::Exceptions::WindowsNotAdmin: can not get the security information for <some_file> due to missing Administrator privileges例外。シェフ::例外:: WindowsNotAdmin:管理者権限がないためセキュリティ情報を取得できません

サーバーをリモート管理するために使用したドメインアカウントがAdministratorsグループのメンバーであることが確認されたため、これはちょっと変わったものでした。また、同じドメイン内の他のサーバーを管理するためにも使用できました。また、リモートデスクトップ経由でドメインアカウントを使用してサーバーに接続し、管理者としてPowerShellを起動し、シェフクライアントの実行を開始したときも同じ例外が発生して失敗しました。

以下のコマンドを実行すると、ドメインアカウントが実際にAdministratorsグループのメンバーであることがわかります。これはグループのSIDによって確認できます。

Get-WmiObject -Class Win32_UserAccount 
Get-WmiObject -Class Win32_Group 
[System.Security.Principal.WindowsIdentity]::GetCurrent().Groups 

サーバーでどのような設定がこれを引き起こした可能性があるかわかりません。さらにシェフのコードに掘り、このthreadによって提供洞察と

答えて

1

は、Win32関数GetNamedSecurityInfoWがオブジェクト(ファイル、フォルダなど)のセキュリティ情報を決定するためにhereに呼び出されることが明らかになりました。これは、いくつかのリソースファイルまたは宝石をエンドポイントサーバー上に作成する必要のあるクックブックのインストール時に発生します。

まず、空のファイルが作成されます。その後、オプションの場合はファイルコンテンツが自動的に更新されます。ファイルコンテンツの更新中、ファイルのセキュリティアクセス制御リストをGetNamedSecurityInfoW関数でチェックする必要があります。この関数を呼び出すには、ログオンしているユーザーに特権SE_SECURITY_NAMEが必要です。シェフ自身も、関数を呼び出す前にこの特権を追加して処理し、関数呼び出しの後に元に戻しますが、これは必ずしも保証されません。システム設定が優先されるようです。

私たちは、GetNamedSecurityInfoWで関数呼び出しの出力を表示しようとするためにビットを少しハッキングしました。ステータスコードは1314であり、ユーザーが必要な特権を保持していないことを示しています。

サーバー上でwhoami /privを実行しようとしましたが、リストにSeSecurityPrivilege特権が見つかりませんでした。以下は、通常のWindowsサーバーでの出力例です。

Privilege Name    Description       State 
======================================================================== 
SeLockMemoryPrivilege  Lock pages in memory     Disabled 
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled 
SeSecurityPrivilege   Manage auditing and security log  Disabled 
... 

注意:状態列は、特権がユーザーによって使用されているかどうかを示します。その存在は、ユーザーが持っているかどうかを示します。

Local Securtiy Policyエディタのセキュリティ設定をManage auditing and security logに変更してAdministratorsグループに設定し、サーバーを再起動すると、chef-clientの実行が成功しました。

シェフがWindowsノードを管理するためにWin32 API関数を頻繁に使用しているようです。これらのAPI関数は、実行するためにはさまざまな特権が必要です。 Chefがすべてのwin32 APIエラーを救済し、Chef::Exceptions::WindowsNotAdminをシェフクライアントの実行ログに伝えたのはちょっと奇妙です(here)。実際には少し誤りを解析し、より有用な情報を提供するのが良いでしょう。

+0

最後の文章によれば、https://github.com/chef/chefに問題を開いてください – Tensibai

関連する問題