从 Swift Code 以 root 身份执行终端命令

Posted

技术标签:

【中文标题】从 Swift Code 以 root 身份执行终端命令【英文标题】:Execute terminal command as root from Swift Code 【发布时间】:2020-12-16 16:02:58 【问题描述】:

下面的代码允许我创建 ui 并在没有 root 权限的情况下运行终端命令。 我的目标是从我的 swift 代码中运行关闭命令,该代码需要具有 root 权限。 谁能帮我解决这个问题?

//
//  ContentView.swift
//  Created by laughinggg on 8/27/20.
//  Copyright © 2020 laughinggg. All rights reserved.
//

import SwiftUI

struct windowSize 
let minWidth : CGFloat = 500
let minHeight : CGFloat = 200
let maxWidth : CGFloat = 200
let maxHeight : CGFloat = 250


struct ContentView: View 
    @State var message = "+"
    @State var isRunning = false
    var body: some View 
        VStack 
            Text("HELLO World!!!")
                .font(.largeTitle)
            .padding()
            HStack 
                TextField("Message", text: $message)
                    .padding(.leading)
                Button(action: 
                    let exe = URL(fileURLWithPath: "/sbin/shutdown")
                    self.isRunning = true
                    try! Process.run(exe,
                                     arguments: [self.message],
                                     terminationHandler:  _ in self.isRunning = false )
                ) 
                    Text("Say")
                .disabled(isRunning)
                    .padding(.trailing)
            
        .frame(maxWidth:500, maxHeight: 500)
    


struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
    



【问题讨论】:

【参考方案1】:

看看这个项目:https://github.com/sveinbjornt/STPrivilegedTask

有一个名为AuthorizationExecuteWithPrivileges 的函数早已被弃用,但仍然有效。

Apple 的文档:https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg

【讨论】:

我也检查了这些。那些是贬值的。还是谢谢。

以上是关于从 Swift Code 以 root 身份执行终端命令的主要内容,如果未能解决你的问题,请参考以下文章

sh 确保以root身份执行脚本

如何在root下以nobody身份执行程序

即使以 root 身份也无法执行 bash 脚本?

以 root 身份运行结构脚本

通过 ADB 以 root 身份启动脚本

Linux C 编程以用户身份执行