Programming/Go

Go언어 Windows 10 계정 관리자 권한 얻기[빌드]

KayEsQuo 2021. 7. 19. 12:08

서론

Go언어 기반 애플리케이션을 개발 시, exec 모듈을 통한 커맨드 명령 호출이 필요할 때가 있다. 커맨드 명령을 호출할 경우 권한 문제가 없이 진행이 잘 되는 경우도 있지만, 그렇지 않은 경우도 있다. 리눅스 환경에서의 경우 관리자 권한을 얻기 위한 명령어는 "sudo"가 있지만 윈도우 환경에서는 애플리케이션 아이콘에서 우클릭을 통해 관리자 권한을 받아오는 경우가 대다수다.

 

만일 windows10 환경에서 권한 문제를 우클릭으로 진행해야 하는 경우 개발 시 커맨드 명령어 호출을 통한 개발은 불가능하다. 따라서 이 글에서는 Go기반 서비스 애플리케이션이 마주하는 윈도우 권한 문제를 해결하는 방법에 대해 다루도록 한다.

 

본론

go언어에서 관리자 권한 얻기 위한 방법으로는 빌드를 통한 실행파일 만들기가 있다.

이는 예시를 통해 설명하겠다.

 

a. 상황

우선 아래의 그림 통한 상황설명은 다음과 같다.

1. 디렉터리를 만든다.

2. 만든 디렉토리를 C:\Windows 폴더 내부에 넣는다.

그림

그림과 같이 진행해본 결과 우리는 액세스가 거부되었다는 것을 알 수 있다. 우클릭을 통해 관리자 권한을 가져올 수 있지만, 이는 Go 빌드를 통해 해결이 가능하고, 사용된 코드와 빌드 방법은 아래와 같다.

 

 

b. 빌드(관리자 권한용)

b-1. [커맨드 명령어] main파일 생성(예시용 코드)

package main

func main(){
	cmd := exec.Command("cmd", "/C", "move", "C:/practiceFile", "C:/Windows")
}

 

b-2-1. 관리자 권한이 필요한 매니페스트 파일 설치

 

go get github.com/akavel/rsrc

b-2-2. 매니페스트 파일을 이용하여 app.syso 파일 생성

rsrc -manifest app.exe.manifest -o app.syso

b-2-3. 빌드

go build

 

결론

위의 설명대로 잘 따라왔다면, 관리자 마크가 들어간 exe파일이 보일 것이다. 이를 실행하면 실행파일은 관리자 권한을 요청하게 되고, 해당 명령어를 실행할 수 있다.

 

이상으로 go언어에서 윈도우 권한 문제에 대해 알아보았다. 권한 문제를 해결할 수 있는 방법이 있어서 다행이지만, 한 가지 번거로운 점이 있는데, 그것은 사용자가 관리자 실행파일을 실행할 때 매 순간 확인을 해야 하는 것이다. 추후 리눅스의 "su"명령어와 같이 매 순간 권한 체크가 아닌 단 한 번의 체크로 실행 가능하게 하는 방법을 다룰 예정이다. 

 

참고

https://stackoverflow.com/questions/31558066/how-to-ask-for-administer-privileges-on-windows-with-go

 

How to ask for administer privileges on Windows with Go

What I want to achieve for my application, is to not need to right click and choose Run as administrator each time I want to run it. I want Windows to prompt me to gain admin permissions as with ot...

stackoverflow.com

https://github.com/mozey/run-as-admin

 

mozey/run-as-admin

Golang example of using a manifest file to prompt "Run as administrator" on Windows - mozey/run-as-admin

github.com