Bon rapidement:
1)
www-data ALL=(francois) NOPASSWD: /home/francois/test
dans /etc/sudoers.d/test
-
/var/www/t.php
[code]
<?php
exec("sudo -u francois /home/francois/test",$test);
for ($index = 0; $index < count($test); $index++)
{
echo $test[$index]."
";
}
echo "\n";
?>
[/code]
- Exécutions:
a) Direct sous www-data:
[...]
export _='/bin/su'
www-data
uid=33(www-data) gid=33(www-data) groupes=33(www-data)
b) Exécution par moi
./test
export COLORTERM='Terminal'
export DBUS_SESSION_BUS_ADDRESS='unix:abstract=/tmp/dbus-RHF7efJ8c2,guid=ca885bfc7d4a1e6df6bfba6d00000010'
export DESKTOP_SESSION='lightdm-xsession'
export DISPLAY=':0.0'
export GDMSESSION='lightdm-xsession'
export GLADE_CATALOG_PATH=':'
export GLADE_MODULE_PATH=':'
export GLADE_PIXMAP_PATH=':'
export GNOME_KEYRING_CONTROL='/tmp/keyring-OD5IoP'
export GNOME_KEYRING_PID='3130'
export HOME='/home/francois'
export LANG='fr_FR.UTF-8'
export LIBGLADE_MODULE_PATH=':'
export LOGNAME='francois'
export LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:'
export PATH='/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/sbin:/sbin'
export PWD='/home/francois'
export SESSION_MANAGER='local/portos:@/tmp/.ICE-unix/3177,unix/portos:/tmp/.ICE-unix/3177'
export SHELL='/bin/bash'
export SHLVL='1'
export SSH_AGENT_PID='3157'
export SSH_AUTH_SOCK='/tmp/ssh-ZsafXgSX3139/agent.3139'
export TERM='xterm'
export USER='francois'
export USERNAME='francois'
export WINDOWID='44040288'
export XAUTHORITY='/home/francois/.Xauthority'
export XDG_CONFIG_DIRS='/etc/xdg'
export XDG_DATA_DIRS='/usr/local/share:/usr/share'
export XDG_MENU_PREFIX='xfce-'
export XDG_SEAT_PATH='/org/freedesktop/DisplayManager/Seat0'
export XDG_SESSION_COOKIE='bbd486d3448a1144b0c5751300000b7b-1377095674.569320-1805019319'
export XDG_SESSION_PATH='/org/freedesktop/DisplayManager/Session0'
export _='./test'
francois
uid=1000(francois) gid=1000(francois) groupes=1000(francois),4(adm),7(lp),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),103(fuse),105(scanner),108(lpadmin),110(netdev),116(bluetooth),124(vboxusers),125(sambashare),201(powerdev)
c) Exécution par le t.php (localhost/t.php)
export HOME='/home/francois'
export LANG='C'
export LOGNAME='francois'
export MAIL='/var/mail/francois'
export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
export PWD='/var/www'
export SHELL='/bin/sh'
export SUDO_COMMAND='/home/francois/test'
export SUDO_GID='33'
export SUDO_UID='33'
export SUDO_USER='www-data'
export TERM='unknown'
export USER='francois'
export USERNAME='francois'
francois
uid=1000(francois) gid=1000(francois) groups=1000(francois),4(adm),7(lp),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),103(fuse),105(scanner),108(lpadmin),110(netdev),116(bluetooth),124(vboxusers),125(sambashare),201(powerdev)
(coopier/coller en direct brutal). Ça marche mais l’environnement est différent. Note que $HOME est correct contrairement à ce que je supposais. Encore une fois il faut voir le script que tu lances.
Toutes les commandes faites dans le script «test» seront faites par «francois» et non www-data. Inutile de donner plus de droit à www-data. Par contre il faut blinder le script test mais c’est plus simple. Ne fais pas cette erreur de donner les droits root (via sudo) à celui qui trouve une faille dans ton serveur web.