앱을 정기적으로 사용 mint install
하지만 일반 사용자에게 앱에 대한 전체 권한을 허용하면 안전하지 않다고 생각합니다. 루트 비밀번호를 입력해야만 이 애플리케이션에 접근할 수 있는 방법이 있는지 알고 싶습니다. 기본적으로 터미널에 새 애플리케이션을 설치할 때 Windows의 관리자 비밀번호 프롬프트와 유사한 것을 사용할 수 있습니다. 나는 su를 사용하여 루트로 로그인할 수 있다는 것을 알고 있지만 이것이 확실히 안전하지 않다는 것을 알고 있습니다. 어떤 아이디어가 있나요?
편집: 다시 말하지만, 일반 사용자에게 권한을 부여하기 위해 sudo나 chmod 또는 다른 것을 사용하고 싶지 않습니다.
답변1
루트 액세스가 필요한 작업을 수행해야 하는 경우 루트 액세스를 얻기 위한 몇 가지 방법을 사용해야 합니다. 이는 대부분의 최신 시스템에서 의미하거나 su
이들 sudo
중 하나에 대한 래퍼를 의미합니다. 루트로 명령을 실행하는 경우( 또는 사용 여부 su
와 상관없이 sudo
) 시스템을 손상시킬 수 있는 방법이 더 많아진다는 위험이 있습니다. 따라서 명령에 실제로 필요한 경우에만 루트로 명령을 실행해야 합니다.
su
의 일반적인 구성과 의 주요 차이점 은 로그인할 때와 동일한 비밀번호를 입력하는 반면, 다른 비밀번호(사용자 비밀번호 )를 입력해야 한다는 sudo
점 입니다. 일반적인 단일 사용자 컴퓨터의 경우 둘 사이의 보안에는 큰 차이가 없습니다. 비밀번호를 요구하지 않도록 구성할 수도 있습니다 .sudo
su
root
sudo
터미널에서 작업 중이고 루트로 명령을 실행하려면 다음을 실행하세요 su
.
su -c 'somecommand an_argument another_argument'
그리고 sudo
:
sudo somecommand an_argument another_argument
어느 쪽이든 비밀번호(루트 비밀번호 su
, 자신의 비밀번호 sudo
)를 입력하라는 메시지가 표시됩니다. Sudo는 귀하의 비밀번호를 기억하고 있으며 앞으로 몇 분 동안 비밀번호를 다시 입력하라고 요청하지 않습니다. su
매번 비밀번호를 다시 입력해야 합니다.
비밀번호를 입력하라는 그래픽 프롬프트를 표시할 수도 있지만( gksu
, kdesu
, ... 사용) 이미 터미널에서 작업 중인 경우에는 그다지 편리하지 않습니다.
답변2
세상에 무료 식사는 없지만 위험을 최소화할 수는 있습니다.
루트로 스크립트를 실행하고 비밀번호 프롬프트 및 exit
명령 없이 즉시 종료하려면 몇 가지 타협을 해야 합니다.
다음 솔루션을 사용하면 root
현재 사용자의 권한이 있는 어느 곳에나 암호화된 두 번(또는 그 이상) 비밀번호를 저장할 수 있습니다.
높은 레벨:
root
비밀번호를 두 번 암호화base64
하고 파일을 아무 곳에나 배치합니다(예: 1234.txt 가능).expect
인수(위에서 디코딩된 문자열)를 사용하여 스크립트 호출Expect
필요한 스크립트를 실행하고 종료합니다.깨끗한 파일로
/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