Linux에서 sudo를 사용하여 출력 리디렉션에 대한 권한 부여

Linux에서 sudo를 사용하여 출력 리디렉션에 대한 권한 부여

의 가상 파일에 "1" 값을 넣으려고 하는데 다음 /proc을 사용했음에도 불구하고 "권한이 거부되었습니다"라는 메시지가 나타납니다 sudo.

name@comp-name:/etc/dhcp$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward 
bash: /proc/sys/net/ipv4/ip_forward: Permission denied

해당 echo명령은 루트 권한으로 실행되지만 리디렉션( >)은 루트 권한 없이 실행될 수 있습니까? 루트 권한으로 둘 다 실행할 수 있나요?

답변1

이 경우 말씀하신 대로 sudo에만 적용됩니다 .echo

대신 다음과 같이 관리자 권한 쉘을 실행할 수 있습니다.

sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

또는 더 짧게:

sudo -s 'echo 1 > /proc/sys/net/ipv4/ip_forward'

답변2

권장되는 방법은 프로그램에 파이프를 연결하는 것입니다.tee

echo 1 | tee /proc/sys/net/ipv4/ip_forward

답변3

문제는 리디렉션이 .dll이 아닌 쉘에 의해 수행된다는 것입니다 sudo. 일반적으로 실행하는 프로그램은 exec()리디렉션 후에 실행됩니다. 파일에 쓸 수 있는 권한이 없으므로 리디렉션이 실패합니다. 위에서 언급했듯이 권장되는 방법은 tee다음과 같이 사용하는 것입니다.

echo stuff | sudo tee /some/file/path

관련 정보