쉘 스크립트에서 비밀번호를 묻지 않고 루트가 됩니다.

쉘 스크립트에서 비밀번호를 묻지 않고 루트가 됩니다.

사용자로부터 비밀번호를 얻지 않고 루트로 "chrome"을 실행하는 스크립트를 작성하고 싶습니다. 사용자는 스크립트를 열 때 비밀번호를 알거나 볼 수 없어야 합니다. (루트 비밀번호를 스크립트에 작성해야 하는 경우 이를 암호화해야 합니다.) 어떻게 가능합니까? 나는 지불했다이것하나지만 쓸모없어

#!/usr/bin/expect -f 
"right here i need to be root"
chrome -P http://www.google.com.tr & sleep 4 

답변1

sudo를 사용하세요. 사용자가 루트로 특정 명령이나 스크립트를 실행할 수 있도록 sudoers 파일에 규칙을 추가합니다.

sudo 사용을 사용자에게 추상화하려면 일반 스크립트를 사용하여 사용자 대신 sudo를 호출하십시오.

하지만 걱정되는 것은 크롬을 루트로 사용하는 것입니다. 이유를 물을 필요는 없지만 이것이 보안상 위험하다는 점을 기억하시기 바랍니다. 무엇을 하든 권한이 없는 전용 사용자 사용을 고려해야 합니다. 루트의 일부 기능이 필요한 경우 Linux 기능( man 7 capabilities)을 참조하여 Chrome 사용자에게 필요한 수퍼유저 권한만 부여하세요.

답변2

스크립트가 그래픽 애플리케이션을 시작하는 경우에는 사용하면 안 됩니다 sudo. 예를 참조하세요.

그래픽 애플리케이션을 시작하기 위해 sudo를 사용하면 안되는 이유는 무엇입니까?

GUI 애플리케이션에서 sudo 사용

나는 루트(!)로 chrome을 실행하는 것을 권장하지 않지만 원칙적으로 루트로 로그인하지 않고 루트로 그래픽 응용 프로그램을 시작하려면 에 설명된 대로 를 사용해야 합니다 pkexec.이 답변명령에서 필요한 환경 변수를 설정하는 것으로 충분합니다.

 pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY ./your-script

사용자에게 비밀번호를 입력하라는 메시지가 표시됩니다. 하지만 엄밀히 말하면(또는 실패하면) 정책 파일을 만들어야 합니다. 바라보다man pkexec그리고 더 자세한 내용여기특히 대본에 관해서여기

답변3

실제로 이것은 스크립트에서 구문을 명확하게 설정해야 하기 때문에 매우 나쁜 생각입니다.

이는 보안 측면에서 좋은 점은 아니지만 다음과 같이 할 수 있습니다.

#!/bin/bash

set pass "YOUR_PASSWORD"

sudo your_command

expect "Password"
send "$pass\r"

그런데 chmod u+s는 왜 안되는 걸까요?

답변4

당신이 정말로 원하는 것은 특정 사용자로 프로세스를 실행하는 것이 아니라 실행 프로세스의 UID를 설정하는 것 같습니다.

아마도 당신이 원하는 것은 프로그램의 SUID를 다음과 같이 올바르게 설정하는 것입니다.여기에 설명.

간단한 예:

프로그램이 run루트(사용자 및 그룹) 소유라고 가정합니다.

$ chmod u+s run
$ ls -l run
-rwsrwxr-x. 1 root root 0 Aug  5 15:08 run*

사용자 블록의 실행 비트에 있는 "s"를 참고하세요. 이제 다른 사람이 실행하면 프로세스는 파일이 속한 사용자(예: 루트)로 실행됩니다.

노트:Doug O'Neal이 올바르게 지적했듯이 이는 Linux의 해석 언어에는 적용되지 않습니다!(자세한 내용은여기)예를 들어, C로 작은 래퍼 프로그램을 만들고 컴파일해야 합니다.

관련 정보