【问题标题】:Minimum privilege for Powershell Remoting user to create a Task on Task SchedularPowershell Remoting 用户在任务计划程序上创建任务的最低权限
【发布时间】:2014-08-25 11:49:01
【问题描述】:

我希望能够以某个随机间隔在各种 Windows 节点上远程运行一些作业。我可以使用 PS remoting 登录到远程计算机并在那里创建一个任务以在某些特定用户帐户下运行它。

为了让 PS Remoting 正常工作,我知道我不需要成为 following article 的管理员,但是我无法理解安排任务所需的最低权限 在该脚本用户的远程计算机上。

我不想使用管理员帐户,因为这可能是我在这些机器上打开的安全风险。

谁能帮帮我。我正在使用 C# 应用程序启动与该计算机的远程 powershell 连接,如下所示。

private void StartCollection(string triggerId, ActivationData parameters)
        {
            string scriptUserName = parameters.Params["PSUser"];
            string scriptUserPassword = parameters.Params["PSUserPassword"];
            string remotecomputerName = parameters.Params["ComputerName"];
            string scheme = parameters.Params["PSScheme"];
            string port = parameters.Params["PSPort"];
            var agentFile = Path.Combine(parameters.AssemblyPath, parameters.FileName);

            List<string> allParams = new List<string>();

            allParams.Add(String.Format("-trigger {0} -collector {1} ", triggerId, parameters.CollectorId));
            allParams.Add(String.Format("-monitored_by {0} -monitored_at {1}", parameters.Monitoring.Name, parameters.Monitoring.InterfacePoint));

            foreach (var param in parameters.Params)
            {
                if (!ConfigurationKeys.Contains(param.Key))
                {
                    allParams.Add(string.Format("-{0} {1}", param.Key, param.Value));
                }
            }

            var cmdLineParams = string.Join(" ", allParams.ToArray());

            // Cred to execute PS on the remote computer.
            SecureString securePassword = scriptUserPassword.ToSecureString();
            PSCredential scriptCred = new PSCredential(scriptUserName, securePassword);

            var remoteUriStr = String.Format("{0}://{1}:{2}/wsman", scheme, remotecomputerName, port);
            var remoteComputer = new Uri(remoteUriStr);

            var connection = String.IsNullOrEmpty(scriptUserName) ? new WSManConnectionInfo(remoteComputer) : new WSManConnectionInfo(remoteComputer, null, scriptCred);
            //connection.AuthenticationMechanism = AuthenticationMechanism.Credssp;

            var runspace = RunspaceFactory.CreateRunspace(connection);
            runspace.Open();

            using (var powershell = PowerShell.Create())
            {
                powershell.Runspace = runspace;

                //Cred to run the agent under: Job credential.
                SecureString jobPass = parameters.UserCred.Item2.ToSecureString();
                string jonUser = parameters.UserCred.Item1;
                PSCredential jobCred = new PSCredential(jonUser, jobPass);

                var scriptfile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Start-Program.ps1");
                Command command = new Command(scriptfile);
                command.Parameters.Add("ComputerName", remotecomputerName);
                command.Parameters.Add("StartTime", "22:50");
                command.Parameters.Add("Program", agentFile);
                command.Parameters.Add("Parameters", cmdLineParams);
                command.Parameters.Add("TaskCredential", jobCred);

                powershell.Commands.AddCommand(command);

                var results = powershell.Invoke();

                runspace.Close();

                Console.WriteLine("Outputing the PS1 Result: {0}: " ,parameters.CollectorId);
                foreach (var obj in results.Where(o => o != null))
                {
                    Console.WriteLine("\t" + obj);
                }
                if (powershell.Streams.Error.Count > 0)
                {

                    var errors = from err in powershell.Streams.Error select err.ErrorDetails.Message;
                    throw new Exception(String.Join(Environment.NewLine, errors.ToArray()));
                }
            }
        } 

【问题讨论】:

    标签: powershell scheduled-tasks powershell-2.0 powershell-remoting


    【解决方案1】:

    一旦您设置了 PS Remoting 权限,授予他们任务计划访问权限的简单方法是让您的远程用户成为目标服务器上本地“备份操作员”组的成员。这将赋予他们在服务器上安排和管理任务所需的权限,同时也赋予他们对该服务器上文件的间接读取权限。

    如果这仍然是太多的访问权限,那么我已经看到通过 ACL 授予对目标服务器上 C:\Windows\Tasks 文件夹的控制权的引用,但我自己从未尝试过。

    【讨论】:

    • 谢谢,“备份操作员组”是否可以在从 winXP sp3 及更高版本开始的所有类型的操作系统上运行?我有许多不同类型的节点要支持。另外,如果此帐户被盗用会有多严重?
    猜你喜欢
    • 2017-07-02
    • 2010-10-21
    • 1970-01-01
    • 2014-12-28
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多