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.