none
暗号化したスクリプトをタスクスケジューラで実行できない RRS feed

  • 質問

  • 皆様お世話になります。

    会社のPCで、下記条件でのタスクスケジュール実行ができず、行き詰まっています。

    (1) タスクスケジューラで、Powershell スクリプトを実行
    (2) スクリプトはローカル(NTFS)に置き、プロパティの詳細設定でで暗号化する
    (3) サインインしていない状態で実行
    (4) パスワードは保存しない

    問題は(2)の暗号化と思われますが、自宅のPCではこの条件でも問題なく実行できます。

    それぞれの Windows のバージョンは次の通りです。

    会社:Windows10 Pro 64bit バージョン1803   実行不可
       Windows10 Pro 64bit バージョン1809   実行不可
    自宅:Windows10 Pro 64bit バージョン1903   実行可

    バージョン固有の問題で、1903まで上げれば解消するものなのか、ご存じでしたらご教示ください。
    (会社のPCは勝手にバージョンアップはできません)

    関係しそうな設定として、会社では「ネットワーク アクセス: ネットワーク認証のためにパスワードおよび資格情報を保存することを許可しない=有効」がドメインコントローラにより適用されていますが、自宅PCにもsecpol.mscにて同じ設定をしています。

    なお、会社のPCでも、起動後、一度でもサインインした後ならサインアウトしてもスケジュール実行できるので、テストで何度確認しても本番で動かず長い間悩まされてしまいましたが、再起動してテストすると、スクリプトが実行されず、タスクスケジューラの前回の実行結果が(0x1)になる事象を再現できました。
    最終的に試したスクリプトは、
    Get-Date > C:\Users\<ユーザー>\Test\Test.log
    だけです。

    よろしくお願いします。

    2019年10月21日 13:14

回答

  • チャブーンです。

    この件ですが、EFS暗号化とはどういうものか、をある程度学ばれることをお奨めします。しくみがわかれば「ネットワーク アクセス: ネットワーク認証のためにパスワードおよび資格情報を保存することを許可しない」が無関係だということが理解できます。

    https://www.petri.com/how_does_efs_work
    https://www.youtube.com/watch?v=rnuCitzSgQ8

    文章でしくみの要諦を書いたつもりですが、伝わっていなければご自身で学んでいただいた方が早いし、確実かと思います。

    「ログオンしていない状態でタスクスケジューラで実行する場合はEFS暗号化したファイルはアクセスできない」が本来で、アクセスできる環境の方がおかしい、という結論もありかと思いますが、その結論だと、チャブーン様ご自身が示す2つの可能性につながらないですよね。

    私自身は現状では、おそらくサポートしていない(少なくとも今までは)という認識です。ただ世の中には変わった方もいて「設計者の意図を超える実装を行うことができた。これぞエンジニアリング!」という風なのか、このような要求が非常に多いので、そのようなケースを想定して「ムリに書いた」という部分があります。質問者さんがそうだ言っているわけではありません。

    まずEFS暗号化をスクリプトに使うことが、どのような影響や制限を与えているのか、理解し確認してください。そのうえで、1809と1903の動作に何か差がないか確認する、ということになるかと思います。最近のWindows 10では「Client Hyper-V」が使えますので、仮想環境で評価するという方法が適切かと思います。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。


    2019年10月22日 17:22

すべての返信

  • チャブーンです。

    この件ですが、ここでいう「プロパティの詳細設定で暗号化」はEFS暗号化と理解しています。EFSで暗号化した場合、復号できるのは「暗号化したユーザー」のみです。暗号用秘密鍵証明書は該当ユーザーの証明書ストア(ユーザープロファイル内)にあり、システムアカウント含め他のユーザーはアクセスできない領域です。

    なので、うえのタスクをみたすためには、本来は「ログオンした状態で実行」と実行ユーザーがログオンユーザーである必要があるでしょう。念のためコメントしますが、スクリプトファイルはEFS暗号化を基本的に想定していないはずなので、質問者さんが「できる」といっている実行環境がサポータブル(サポート可能)なのか、こちらでは判断できません。

    採算度外視して、何が何でもそうしたい(試験環境でうまく動くモノを本番環境で動かしたい)というなら、以下の2つに可能性があります。

    1. スクリプトをいったん「非暗号化」し、本番環境に移した後「試験と同じように再度暗号化」して、タスクを設定する
    2. 試験環境の「EFS暗号化証明書」を秘密鍵ごとエクスポートし、本番環境の利用アカウントにインポートして、タスクを設定する

    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。


    2019年10月22日 9:36
  • チャブーン様、コメントありがとうございます。

    >ここでいう「プロパティの詳細設定で暗号化」はEFS暗号化と理解しています。

    恐らくそうだと思います。
    私は長年NTFS暗号化と呼んでおり、つい数日前にEFSを認識したところですが、覚えたての用語は避けて、実際の操作を書きました。
    正確に書くと、「内容を暗号化してデータをセキュリティで保護する」にチェックです。

    >復号できるのは「暗号化したユーザー」のみです。

    スクリプト作成-暗号化-タスク作成-テストー本番は一貫して単一のPCかつ単一のローカルユーザーで、Administratorsに属しています。

    >システムアカウント含め他のユーザーはアクセスできない領域です。

    自宅PCですが、スクリプトを
    whoami > test.log
    として、サインインしていない状態でタスクスケジューラで実行したところ、タスクの実行時に使うユーザーアカウント(=タスクを作成したユーザー=スクリプトを暗号化したーユーザー)になっています。
    明日、会社のPCでも確認してみます。

    >本来は「ログオンした状態で実行」と実行ユーザーがログオンユーザーである必要があるでしょう。

    会社でうまく実行できないことに対し、自分で考えた推察も、タスクスケジューラで「パスワードを保存しない」設定としたため、複合キーにアクセスできないと考えたのですが、もう少し勉強しようと自宅のPCで試してみたら難なく実行できてしまったので、分からなくなっていました。

    >質問者さんが「できる」といっている実行環境がサポータブル(サポート可能)なのか、こちらでは判断できません。

    「ログオンしていない状態でタスクスケジューラで実行する場合はEFS暗号化したファイルはアクセスできない」が本来で、アクセスできる環境の方がおかしい、という結論もありかと思いますが、その結論だと、チャブーン様ご自身が示す2つの可能性につながらないですよね。

    ちなみに、自宅PCのEFS暗号化は機能しており、暗号化したファイルは、他のユーザではNTFSの読取権があってもアクセス拒否されます。
    アクセス拒否されてしまうので、実際に暗号化された状態を確認したわけではありませんが。

    また、もう一つ試したこととして、Powershellリモートセッションでも同様の事象となり、会社のPCでは、自身で暗号化したファイルでもアクセスできませんが、自宅のPCだと自身で暗号化したものなら読めますし、他のユーザはアクセス拒否されます。

    >試験環境でうまく動くモノを本番環境で動かしたい

    誤解を与えてしまいすみません。
    テスト環境を用意するほど大そうな話ではなく、テスト環境と本番環境は同一のPCです。

    2019年10月22日 14:34
  • チャブーンです。

    この件ですが、EFS暗号化とはどういうものか、をある程度学ばれることをお奨めします。しくみがわかれば「ネットワーク アクセス: ネットワーク認証のためにパスワードおよび資格情報を保存することを許可しない」が無関係だということが理解できます。

    https://www.petri.com/how_does_efs_work
    https://www.youtube.com/watch?v=rnuCitzSgQ8

    文章でしくみの要諦を書いたつもりですが、伝わっていなければご自身で学んでいただいた方が早いし、確実かと思います。

    「ログオンしていない状態でタスクスケジューラで実行する場合はEFS暗号化したファイルはアクセスできない」が本来で、アクセスできる環境の方がおかしい、という結論もありかと思いますが、その結論だと、チャブーン様ご自身が示す2つの可能性につながらないですよね。

    私自身は現状では、おそらくサポートしていない(少なくとも今までは)という認識です。ただ世の中には変わった方もいて「設計者の意図を超える実装を行うことができた。これぞエンジニアリング!」という風なのか、このような要求が非常に多いので、そのようなケースを想定して「ムリに書いた」という部分があります。質問者さんがそうだ言っているわけではありません。

    まずEFS暗号化をスクリプトに使うことが、どのような影響や制限を与えているのか、理解し確認してください。そのうえで、1809と1903の動作に何か差がないか確認する、ということになるかと思います。最近のWindows 10では「Client Hyper-V」が使えますので、仮想環境で評価するという方法が適切かと思います。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。


    2019年10月22日 17:22
  • チャブーン様、コメントありがとうございます。

    >まずEFS暗号化をスクリプトに使うことが、どのような影響や制限を与えているのか、理解し確認してください。

    理解力不足で済みません。諦めます。

    ありがとうございました。

    2019年10月23日 14:17