web-dev-qa-ko.com

쉘 스크립트에서 UID를 설정할 수 없습니다

누구든지 여기서 무슨 일이 일어나고 있는지 알아낼 수 있습니까? 나는 추적 패킷 카운트를 추적하는 규칙을 가지고있다. 다음 스크립트를 루트로 실행할 때 :

#!/bin/bash
iptables -t mangle -xnvL

나는 출력을 얻는다 :

//snip
233203 199929802 MARK  //blah blah blah
//snip

그러나 나는이를 선인장의 일환으로 실행하고 싶어합니다. 이는 Apache로 실행됩니다. 이제 Apache는 iptables를 실행할 수 없으며 스크립트가있는 이유입니다. 나는 그것을 suid root 로 설정했다.

-rwsr-sr-x 1 root root   37 May 14 23:06 iptables_packet_report.sh

그런 다음이 출력을 얻습니다.

server # Sudo -u Apache ./iptables_packet_report.sh
iptables v1.4.2: can't initialize iptables table `mangle': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

분명히 내 커널이 괜찮 았고, 내가 루트가 아닌 것처럼 움직이는 사실은 뭔가를 망치지 만, 나는 그 이유를 이해하지 못합니다. [시위] ( http://en.wikipedia.org/wiki/setuid#demonstration 와 함께 일하고 있는지 확인한 것으로 확인했습니다.

server # Sudo -u Apache ./printid
Real UID  = 81
Effective UID = 0
Real GID  = 81
Effective GID = 0

내 최종 목표는 iptables -t -t mangle -xnvl의 출력을 Apache로 실행하면서 Cacti를 사용하여 모든 것을 모두 멋지게 사용할 수 있습니다.

14
Tom Ritter

셸 스크립트에 Suid 루트를 사용할 수 없습니다. 실제 프로그램 만 suid root 일 수 있으며 쉘 스크립트는 "#!"로 시작합니다. 그리고 통역사는 윗몸을 운영해야하며 알지 못했던 이유로 작동하지 않습니다.

Sudo를 살펴보고 그것을 설치하십시오!/etc/sudoerrs 편집, 다음과 같은 선을 추가하십시오.

www-data        ALL=NOPASSWD: /usr/local/sbin/iptables_packet_report.sh

그럼 그냥 달리기

Sudo /usr/local/sbin/iptables_packet_report.sh

코드에서.

그런 다음 암호를 묻는 것이 아니라 프로세스를 자동으로 평가해야합니다.

WWW 데이터를 수동으로 수동으로 SUE로 수동으로 실행하면 오류 메시지가 발생할 수 있습니다.

16
Christian

기독교인이 내 문제가 꼭대기 스크립트에 꼭 멈추려는 것이 었습니다. 여기서 설명한대로 쉘 스크립트에서 SUID를 설정하는 것은 매우 나쁜 아이디어입니다.

uNIX에서 쉘 스크립트를 실행하는 것은 2 단계 프로세스가 포함됩니다. 커널이 쉘 스크립트가 실행 되려고하는 것으로 판단되면 먼저 셸 인터프리터의 SUID 복사본을 시작한 다음 쉘 인터프리터가 쉘 스크립트를 실행하기 시작합니다. 이 두 작업은 두 가지 개별 단계에서 수행되므로 첫 번째 단계 후에 커널을 방해하고 셸 인터프리터가 실행하려는 파일을 전환 할 수 있습니다. 이 방식으로 공격자는 컴퓨터가 선택한 쉘 스크립트를 실행하도록 설정할 수 있습니다.

이 때문에 많은 현대적인 Linux 배포판이 사용중인 Gentoo를 포함하여 Suid Shell Scripts를 무시합니다. 나는 sudoers 파일을 편집하고 작동을 찍을 수있었습니다.

13
Tom Ritter