루트 터미널에 로그인하여 다음과 같이 실행한다고 가정해 보겠습니다.
sudo -u '#1000' dbus-launch chromium
- 우려해야 할 잠재적인 보안 문제가 있습니까?
- 더 안전한 방법이 있나요? GUI 응용 프로그램과 함께 사용해야 합니다.사용자 실행확실히. . 을 사용하면 .
runuser
을 얻습니다failed to open display
.
이렇게 하면 루트로만 시작할 수 있는 사용자 정의 드라이버(g15daemon)를 통해 키보드에서 터미널 명령을 실행할 수 있습니다.
답변1
스도
관련 매뉴얼 페이지에서:
실제 유효한 uid 및 gid는 passwd 파일에 지정된 대상 사용자와 일치하도록 설정됩니다.
-P
또한 sudo의 (그룹 벡터 유지) 옵션 설명에서:
그러나 실제 유효 그룹 ID는 여전히 대상 사용자와 일치하도록 설정됩니다.
기본적으로 sudo를 사용하여 실행되는 모든 명령은효과적인대상 사용자의 사용자 ID 및 그룹 ID입니다.
이 질문에 대답하려면,"더 안전한 방법은 없을까요?"-H
, 권한이 없는 사용자로 sudo를 실행할 때 (HOME) 옵션을 사용하는 것을 선호합니다"HOME 환경 변수를 대상 사용자의 homedir로 설정하십시오". 얼마 전에 -H
sudo를 사용하여 쉘 스크립트에 옵션을 추가함으로써 예방할 수 있었던 예상치 못한 동작(자세한 내용은 기억나지 않음)이 발생했습니다 .
또한 .run 의 secure_path
및 env_reset
옵션이 sudo가 실행하는 명령에 전달될 환경 변수와 기타 흥미롭고 유용한 정보를 전달하지 않는 환경 변수를 표시하는지 확인해야 합니다 ./etc/sudoers
sudo -V
수
또는 su $(id -un 1000) -c 'dbus-launch chromium'
사용자 #1000의 유효 사용자 ID와 그룹 ID를 사용하여 Chromium을 실행할 수 있습니다.
동일한 작업을 수행하기 위해 를 사용하는 경우 (기본적으로) 및 환경 변수 만 대상 사용자의 변수로 설정된다는 su
점에 유의해야 합니다 . 이 경우(대상 사용자는 권한이 없습니다. 즉, 슈퍼유저가 아닙니다) 대상 사용자의 권한으로 설정됩니다 . 나머지 환경 변수(예 : )는 유지됩니다.su
HOME
SHELL
USER
LOGNAME
PATH
권한이 없는 프로세스를 실행하는 데 환경 데이터가 유출되는 것을 방지하려면
su
로그인 셸의 또는 옵션을 사용하여
--login
실행 해야 합니다.-l
su $(id -un 1000) -lc 'dbus-launch chromium'
위에서 설명한 대로 , 및 --login
를 제외한 모든 환경 변수를 설정 해제 TERM
한 다음 ,
HOME
및 을 재설정합니다. SHELL
또한 대상 사용자의 로그인 스크립트를 실행하기 전에 미리 컴파일된 기본값으로 설정하고 현재 작업 디렉터리를 대상 사용자의 홈 디렉터리로 설정합니다.USER
LOGNAME
PATH
나는 일반적으로 로깅 기능과 이전에 sudo를 성공적으로 사용한 후 5분 이내에 비밀번호를 다시 입력하지 않아도 되는 "티켓팅 시스템" 때문에 su보다 sudo를 선호합니다.