sudo가 필요한 스크립트가 없으면 sudo와 prompt를 사용해야합니까?


26

백라이트 밝기를 세밀하게 제어 sudo하고 실행 해야하는 스크립트 가 있습니다. 본질적으로 이것입니다 :

backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | tee $backlight

에 살고 있습니다 ~/bin/backlight-adjust. 권한있는 위치에 쓰기 sudo때문에 스크립트에 권한 이 필요합니다 tee $backlight. 로 실행되지 않으면 실패합니다 sudo.

이 방법은 환경 에 있지 않고 내 환경에만 sudo backlight-adjust있기 때문에 실행할 수 없기 때문에 문제 ~/bin가 있습니다. 그래서 나는 달리 거나 비슷한 것을해야합니다.$PATHsudosudo env "PATH=$PATH" backlight-adjust

또는 다음과 같이 작성할 수 있습니다.

backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | sudo tee $backlight

암호를 입력하라는 메시지가 표시됩니다.

두 번째 접근 방식은 sudo를 입력 할 필요가 없기 때문에 더 효과적입니다. 프롬프트가 표시됩니다. 그리고 $PATH그대로 유지합니다. 이것은 전반적으로 더 편리하다고 생각하지만 두 번째 방법으로하지 않아야하는 이유가 있습니까?

(Xubuntu 14.04를 실행 중이며 쉘이 GNU bash 4.2.45입니다.


수정 해 주셔서 감사합니다. LMDE (modified Debian)를 실행 중이며 sudo실제로 $PATH는 기본적으로이 문제가 발생하지 않습니다.
terdon

답변:


27

개인적으로 나는 다른 접근법을 사용할 것입니다. 스크립트의 별명을 만드십시오. 이 줄을 당신의 ~/.bashrc(또는 다른 껍질과 동등한)에 추가하십시오

alias backlight-adjust='sudo ~/bin/backlight-adjust'

이런 식으로 실행을 기억하는 것에 대해 걱정할 sudo필요가 없으며 sudo스크립트에 스크립트 를 추가 할 필요가 없습니다 . 그것은 당신에게 완전히 투명하고 시도하고 실행할 때 단순히 암호를 요구합니다 backlight-adjust.


이것은 매우 현명한 접근 방법으로 보이고 나머지 시스템에는 최소한의 영향을 미칩니다. +1.
John Feminella

@JohnFeminella 다른 한편으로,이 스크립트를 다른 사람과 공유하려면 별명도 필요합니다. 개인적으로 sudo실제 스크립트 에 넣지 않는 이유는 없습니다 . 특히 스크립트의 어떤 요소가 실제로 루트 권한을 필요로하는지 쉽게 알 수 있기 때문입니다.
Kyle Strand

@KyleStrand 아니 그들은하지 않습니다. 스크립트에 의해 호출 된 명령은 단순히 액세스 권한이없는 것에 대해 불평합니다.
terdon

@terdon 나는 조금 더 명확했을 수 있음을 알고 있지만 아마도 내가 의미하는 바를 알 것입니다. 또한이 특정 사용 딜레마에 대한 개인 솔루션을 공유합니다.
Kyle Strand

@KyleStrand 그렇습니다. 그러나 문제는 없었습니다. OP가 가진 유일한 문제는 그와 별개로 "sudo를 입력해야한다는 것을 기억하고 싶지 않다"는 것입니다. 스크립트는 완벽하게 이식 가능합니다. 내 요점은 별칭이 완전히 선택적이며 아무것도 해결하지 않고 사용하기가 더 쉽다는 것입니다.
terdon

7

나는 그것이 왜 틀릴 수 있는지 알 수 없다 --- 나는 보통 명령이 나에게 묻지 않기 때문에 스크립트 가능하도록 선호한다. 암호없이 작동 /etc/sudoers하도록 조정할 수 있습니다 sudo.

하지만 ... 왜 추가하지 않습니까

chgrp  one-of-your-groups-here /sys/class/backlight/acpi_video0/brightness     
chmod g+w /sys/class/backlight/acpi_video0/brightness 

당신 /etc/rc.local과 잊어 sudo?

(우분투에서는 사용할 수 있다면 sudo당신은에 sudo는 당신이 사용할 수 있도록, 그룹 chgrp sudo /sys...과 행복합니다.)


3

또는 추가 할 수 있습니다

Defaults        env_keep +="PATH"

당신에 /etc/sudoers파일.


2

당신은 주 ~ / 빈은 sudo는 환경에서 $ PATH에 없기 때문에 sudo는, 백라이트 조정

그렇다면 왜 그렇게해야합니까? 나는 당신이 그 줄을로 바꾸면 좋을 것이라고 생각합니다 /home/user/bin/backlight-adjust.

그러나 나는 별칭을 사용하는 Terdon의 솔루션을 정말로 원합니다. 또는 스크립트를 넣을 /usr/bin/수 있으며 모든 사용자가 사용할 수 있습니다 (루트 포함).


예,하지만 그렇게하는 것은 성가신 일입니다. 그렇지 않으면 처음에 $ PATH에 넣는 요점은 무엇입니까? 또한 ~/bin내 집의 도트 파일 저장소 아래 에 있기 때문에 버전 관리를 유지하기 때문에 파일을 좋아 합니다.
John Feminella

@JohnFeminella 그건 그렇고, 경로를 변경할 이유가 없습니다 -E. 환경을 보존하기 위해 깃발을 사용하십시오 .sudo -E command
terdon

@terdon 데비안에서는 작동하지 않습니다. 보안상의 이유로 재정의되었습니다. 내 질문 ( sudo env "PATH=$PATH" ...) 에서 언급했듯이 환경 변수를 명시 적으로 전달해야합니다 .
John Feminella

1

일반적인 규칙을 제시 할 수없는 경우 ... 스크립트 / 프로그램이 일부 재구성 (예 : 프린터)을 수행하도록 설계되고 일반 사용자가 호출 할 수 있어야합니다. 그렇지 않으면, 나는 충분히 잘 떠날 것입니다 : 일반 사용자가 그것을 실행하면 (명시한 검사의 결과로 또는 무언가를 할 수 없기 때문에) 실패합니다.

상승 된 특권은 아예 드물게 나눠 져야합니다. 높은 권한으로 전환하는 것은 까다롭기 때문에 전문가 (예 :)에게 맡기는 것이 좋습니다 sudo(1).


0

필자는 개인적 ${SUDO}으로 내 스크립트와 같은 것을 사용하여 호출자가 필요할 경우 설정하거나 ${SUDO:-sudo}기본적으로 사용할 수 있도록합니다.

귀하의 특정 경우에, 나는 받아 들여진 대답을하고 있습니다.


-1

sudo와 같은 적절한 사용자 전체 위치에 (없이 ) 스크립트를 넣은 /bin후 다음을 수행하십시오.

sudo chown root /bin/backlight-adjust
sudo chmod 4755 /bin/backlight-adjust

setuid 플래그를 설정하면 작동합니다. 즉, 항상 파일 소유자로 실행됩니다. 자세한 내용은 http://major.io/2007/02/13/chmod-and-the-mysterious-first-octet/ 를 참조하십시오 . 나는 이것이 어떻게 작동하는지에 대해 많이 알지 못하고 몇 년 전에 읽은 것으로 생각하여 인터넷 검색을 발견했습니다.


1
쉘 스크립트는 더 이상 설정 될 수 없습니다. 감사합니다.… 이것은 완전히 악의적 인 답변입니다. 특히 보안 측면에서.
mirabilos

@mirabilos 그룹 또는 일반 쓰기 플래그가 켜져있는 경우에만 위험합니다. setuid의 위험은 파일에 대한 쓰기 권한이있는 사용자는 마치 마치 마치 사용자처럼 원하는 것을 실행할 수 있으므로 보호해야하는 쓰기 권한입니다. 4755는 항상 소유자로 실행, 소유자가 읽고, 쓰고, 실행할 수 있고, 그룹을 읽고 실행할 수 있으며, 사용자가 읽고 실행할 수 있음을 의미합니다. 이는 루트 권한으로 모든 사용자에게 허용되는 표준 권한 수준입니다.
AJMansfield

@mirabilos 그리고 setuid를 가진 쉘 스크립트가 setuid를 가진 바이너리보다 더 많은 취약점을 도입한다는 생각은 어리석은 일입니다. 바이너리는 ptrace 익스플로잇에도 영향을받지 않습니다. 이는 setuid를 이용하는 주요 익스플로잇입니다.
AJMansfield

2
현재의 모든 유닉스 계열 OS는 setuid 스크립트를 금지합니다. 이것은 단지 사실입니다. 당신이 저를 믿지 않는다면 스스로 이유를 물어보십시오. OpenBSD로 시작하십시오.
mirabilos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.