Linux에서 Windows와 유사한 관리자 비밀번호 프롬프트를 시뮬레이션하는 방법은 무엇입니까?

Linux에서 Windows와 유사한 관리자 비밀번호 프롬프트를 시뮬레이션하는 방법은 무엇입니까?

앱을 정기적으로 사용 mint install하지만 일반 사용자에게 앱에 대한 전체 권한을 허용하면 안전하지 않다고 생각합니다. 루트 비밀번호를 입력해야만 이 애플리케이션에 접근할 수 있는 방법이 있는지 알고 싶습니다. 기본적으로 터미널에 새 애플리케이션을 설치할 때 Windows의 관리자 비밀번호 프롬프트와 유사한 것을 사용할 수 있습니다. 나는 su를 사용하여 루트로 로그인할 수 있다는 것을 알고 있지만 이것이 확실히 안전하지 않다는 것을 알고 있습니다. 어떤 아이디어가 있나요?

편집: 다시 말하지만, 일반 사용자에게 권한을 부여하기 위해 sudo나 chmod 또는 다른 것을 사용하고 싶지 않습니다.

답변1

루트 액세스가 필요한 작업을 수행해야 하는 경우 루트 액세스를 얻기 위한 몇 가지 방법을 사용해야 합니다. 이는 대부분의 최신 시스템에서 의미하거나 su이들 sudo중 하나에 대한 래퍼를 의미합니다. 루트로 명령을 실행하는 경우( 또는 사용 여부 su와 상관없이 sudo) 시스템을 손상시킬 수 있는 방법이 더 많아진다는 위험이 있습니다. 따라서 명령에 실제로 필요한 경우에만 루트로 명령을 실행해야 합니다.

su의 일반적인 구성과 의 주요 차이점 은 로그인할 때와 동일한 비밀번호를 입력하는 반면, 다른 비밀번호(사용자 비밀번호 )를 입력해야 한다는 sudo점 입니다. 일반적인 단일 사용자 컴퓨터의 경우 둘 사이의 보안에는 큰 차이가 없습니다. 비밀번호를 요구하지 않도록 구성할 수도 있습니다 .sudosurootsudo

터미널에서 작업 중이고 루트로 명령을 실행하려면 다음을 실행하세요 su.

su -c 'somecommand an_argument another_argument'

그리고 sudo:

sudo somecommand an_argument another_argument

어느 쪽이든 비밀번호(루트 비밀번호 su, 자신의 비밀번호 sudo)를 입력하라는 메시지가 표시됩니다. Sudo는 귀하의 비밀번호를 기억하고 있으며 앞으로 몇 분 동안 비밀번호를 다시 입력하라고 요청하지 않습니다. su매번 비밀번호를 다시 입력해야 합니다.

비밀번호를 입력하라는 그래픽 프롬프트를 표시할 수도 있지만( gksu, kdesu, ... 사용) 이미 터미널에서 작업 중인 경우에는 그다지 편리하지 않습니다.

답변2

세상에 무료 식사는 없지만 위험을 최소화할 수는 있습니다.

루트로 스크립트를 실행하고 비밀번호 프롬프트 및 exit명령 없이 즉시 종료하려면 몇 가지 타협을 해야 합니다.

다음 솔루션을 사용하면 root현재 사용자의 권한이 있는 어느 곳에나 암호화된 두 번(또는 그 이상) 비밀번호를 저장할 수 있습니다.

높은 레벨:

  1. root비밀번호를 두 번 암호화 base64하고 파일을 아무 곳에나 배치합니다(예: 1234.txt 가능).

  2. expect인수(위에서 디코딩된 문자열)를 사용하여 스크립트 호출

  3. Expect필요한 스크립트를 실행하고 종료합니다.

  4. 깨끗한 파일로 /root호출 expect하고 bash_history(일반 사용자의 경우) root비밀번호로 암호화된 파일 및 base64. 추적을 제거하려면 (일반 사용자의 관점에서) 스크립트를 호출하십시오. 이 스크립트는 root사용자만 액세스할 수 있습니다.

전반적으로 일반 사용자의 관점에서 보면 이 스크립트는 한 번도 실행된 적이 없으며 민감한 비밀번호가 포함되어 있지 않은 것으로 보입니다.

또한 이중 base64암호화는 나에게 매우 무작위적이거나 무해한 것처럼 보입니다(비록 저는 보안 전문가가 아니고 2x 로 식별하지 않지만 base64). 예를 들어:

V1c5MVFYSmxWMlZzWTI5dFpRbz0K decrypted to YouAreWelcome 

비밀번호를 두 번 인코딩base64 한 번:

$ cat pass.txt | base64 | base64 > innocent_name.txt
$ rm pass.txt

그 다음에:

스크립트를 실행합니다:

$ ./root_wrap.exp "$(cat innocent_name.txt | base64 -d | base64 -d)"

예상 스크립트:

#!/usr/bin/expect -f

set root_user root;
set root_pass [ lindex $argv 0 ];

spawn bash
expect "*$ "
send -- "whoami\r"
expect "*$ "
send -- "su $root_user\r"
expect "*?assword:*"
send -- "$root_pass\r"
expect "*# "
send -- "./whoam.sh\r"
expect "*# "
send -- "/root/rm_trace.sh\r"
expect "*# "
send -- "exit\r"
send -- "whoami\r"
expect "*$ "
expect eof

깨끗한 기록 스크립트 /root/rm_trace.sh:

#!/bin/bash

sed -i '/base64/d' /home/<user>/.bash_history
sed -i '/root_wrapp/d' /home/<user>/.bash_history
sed -i '/innocent_name/d' /home/<user>/.bash_history

루트로 실행하기 위한 샘플 bash 스크립트:

 #!/bin/bash

 echo "now running as root"
 whoami

관련 정보