Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
# cat ping.php
<?php print 'pingowanie'; $result = shell_exec('/bin/ping -c3 172.20.2.42 2>&1'); print "<pre>$result</pre>"; print 'koniec pingowania'; ?>
Po wejściu w apache2 na ping.php mam:
pingowanie ping: socket: Operation not permitted koniec pingowania
ls -la /bin/ping
-rwsrwxrwx 1 root root 65272 sie 3 2018 /bin/ping
Co mogę z tym fantem zrobić?
To jest problem jakiejś konfiguracji na debianie ponieważ na innych maszynach mi to lata z palca.
Ostatnio edytowany przez jkl (2020-03-27 11:47:25)
Offline
setcap 'cap_net_admin,cap_net_raw+ep' $(which ping)
powinno pomóc
Offline
Chyba cap_net_raw+ep powinno wystarczyć:
getcap $(which ping) /bin/ping = cap_net_raw+ep
Offline
SUID i Capabilities dla /ibn/ping owszem, może pomoc, o ile Apache nie jest chroniony profilem Apparmora,
bo ten został wprowadzony w Busterze, a Apache to jedna z pierwszych chronionych przez AA aplikacji.
W takim przypadku w profilu AA trzeba pozwolić na uruchamianie polecenia ping przez mod_php, bo inaczej żadne cuda z binarką ping nie pomogą.
@jkl
Pokaż z roota wyniki:
aa-status
sestatus
oraz:
cat /proc/`pgrep apache2 |head -n1`/attr/current
Ostatnio edytowany przez Jacekalex (2020-04-11 22:37:06)
Offline
# getcap $(which ping)
/bin/ping = cap_net_raw+ep
# aa-status
-bash: aa-status: nie znaleziono polecenia
# sestatus
-bash: sestatus: nie znaleziono polecenia
Ok to jest kontener LXC z debianem busterem. Nie widziałem, że to może mieć wpływ.
Dzięki za naprowadzenie to na 90% apparmor hosta matki.
Offline
1. Nie - jednak to nie wina apparmora.
Wyłączyłem go dla tego kontenerka.
/bin/ping onet.pl - z kontenera działa więc powinno latać.
z apache2 nadal dostaje:
ping: socket: Operation not permitted
2. Próbowałem użyć nowszej paczki iputils-ping z testing.
Też nie pomaga.
Offline
zrobiłem tak:
- zmieniłem shell dla użytkownika www-data na /bin/bash w /etc/passwd
sudo -u www-data ping onet.pl
ping: socket: Operation not permitted
To się pokazuje nawet gdy www-data jest właścicielem /bin/ping.
Offline
A co powiadają logi Apacha i PHP o tym poleceniu ping?
Zobacz backdoory c100 i c99, z nich można było pingować z poziomu php.
Przynajmniej się wtedy dowiesz, czy twój sposób na shell_exec jest jedyny, czy da się to lepiej zrobić.
Może PHP ma obecnie jakoś okrojony shell_exec, to w końcu jedna z najgroźniejszych funkcji w PHP.
Offline
Zaraz zaraz... rzadko używam PHP więc mogę się mylić, ale w przypadku CGI i SSI Apacz po prostu olewa bit SUID rzadkim sikiem. Czyżby w przypadku php też tak było?
Dawno tego nie robiłem, ale kiedyś tego potrzebowałem i wykombinowałem jakiś wrapper w C - wybaczcie, ale to było gdzieś na początku tysiąclecia i za nic nie pamiętam co ja tam nawyczyniałem; w każdym razie działało.
Offline
Obstawiam że apache to blokuje, zmieniłem adres do pingania na 8.8.8.8. Odpaliłem skrypt w taki sposób i działa:
www-data@smietnik:~/html$ php -S 0.0.0.0:3000 ping.php [Mon Apr 13 22:25:34 2020] PHP 7.4.4 Development Server (http://0.0.0.0:3000) started [Mon Apr 13 22:25:38 2020] 10.128.254.135:37292 Accepted [Mon Apr 13 22:25:40 2020] 10.128.254.135:37292 Closing
% curl 10.128.254.132:3000 pingowanie<pre>PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=53 time=25.4 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=53 time=24.7 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=53 time=23.7 ms --- 8.8.8.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 23.687/24.596/25.382/0.697 ms </pre>koniec pingowania
to samo jest na nginx. Szukałbym w error.log apache co go blokuje.
Offline
Jeżeli apache zrzuca uprawnienia na usera www-data, a tenże user www-data ma powłokę /dev/null albo podobną.
to prawdopodobnie ze względów bezpieczeństwa Apache też blokuje SUID na vhostach.
Gdyby Apache pozwalał na SUID, to byłaby dziura w systemie, jakiej świat nie widział, porównywalna z register_globals w PHP.
Offline
@Jacekalex zmiana powłoki w pliku /etc/passwd dla usera www-data + restart apache2 nie pomaga.
@mati75 tak to blokuje apache2, mam dokładnie takie samo zachowanie
Offline
Strony: 1