2011-05-07 6 views
8

이것은 바보 같은 질문 일 수 있습니다.bash 스크립트에서 단일 명령에 대한 sudo

Mac OS X과 내가 사용하는 Linux 상자간에 이식하기를 원하는 스크립트가 있습니다. OS X에서 스크립트의 명령은 sudo이 필요합니다. Linux 상자에서는 그렇지 않습니다.

간단히 말해서, sudo으로 스크립트에서 하나의 명령을 실행하고 나머지 스크립트에 대한 상승 된 권한을 제거하는 방법은 무엇입니까?

나는

su - 

su -c 

를 사용하려고했지만 둘 다 오류가 밖으로 보인다. (그들은 "미안하다"라고 말하고 계속 나아 간다. 나는 그것이 root이고, root은 암호가 없다고 생각하기 때문에).

나는이 일을 어리 석고 쉬운 방법이 있어야한다는 것을 알고 있습니다. 모두는 무엇을 제안합니까?

답변

6

당신은 (실제로 : 초기 sudo는 시간 창을 닫습니다) sudo는 권한을 '취소'할 수 있습니다 수행하여 : 또한

sudo -k 

을, 당신은 특정 명령에 대한 관리자 권한, 또는으로 할 수 있도록 sudo를 구성 할 수 있습니다 특정 명령에 대해 비 루트가 아닌 것으로 가장합니다. man sudoers을 참조하십시오. 예제 섹션은 sudo (역할, 호스트, 명령, 이스케이프 허용, 허용 된 대상에 대한 예외 허용, 허용되지 않는 암호 부여 등)의 구성 가능성에 거의 제한이 없다는 것을 분명히합니다. 당신의 맥락에서

희망 흥미로운 예 :

프레드 암호를주지 않고 DB의 Runas_Alias ​​(오라클이나 사이베이스)의 모든 사용자로 명령을 실행할 수 있습니다 사용자.


당신이 정말로은/etc /의 sudoers에 참견하고 싶지 않아/할 수없는 경우

fred   ALL = (DB) NOPASSWD: ALL 
(visudo를가!) 그때없이

{ 
    trap "sudo -k" EXIT INT QUIT TERM 
    sudo ls # whatever 
} 
+0

이것은 정확히 내가 필요로하는 것입니다. 명령을 실행 한 다음 sudo -k를 실행하십시오. 매우 감사합니다. – rick

+0

sudoers에게 감사드립니다. 내가 필요한 것 뿐이었다. –

0

일반 사용자로 다시 변경하려면 su 대신 sudo su을 시도하십시오.

+0

"sudo su umount/dev/disk1"을 시도하면 "su : unknown login : umount"가 표시됩니다. sudo를 통해 사람을보고, 나는 단지 "umount"라는 사용자를 찾고 있다고 결론 지을 수 있습니까? – rick

+0

@rick : 예, 'umount'라는 사용자를 찾고 있습니다. 'su'는 다른 사용자 (일반적으로 root)로 변경하기위한 것이며 루트로만 실행할 수 있습니다. 따라서 인수는 사용자 이름입니다. 'sudo'는 하나의 명령을 다른 사용자로 실행하기위한 것입니다.예를 들어 root로'su umount/dev/disk1' 명령을 실행하기를 원한다고 말하는데, 그러면'umount' 사용자로 변경하려고합니다. –

0

처럼 사용 sudo 뭔가를 사용하는 것이 좋습니다 su :

#!/bin/bash 
whoami # Runs under your regular account 
sudo whoami # Runs as root 
whoami # Runs under your regular account again 

다음은 그것 :

$ ./sudotest 
gordon 
Password: 
root 
gordon 
관련 문제