Page 1 sur 2

Erreur de permission pour la commande Chown

Publié : 12 septembre 2013, 01:58
par Misoss
Bonsoir,

J'ai un soucis avec un script php sur mon serveur centOS.
je n'ai pas l'autorisation d'exécuter "chown" avec l'utilisateur apache

Code : Tout sélectionner

Warning: chown(): Operation not permitted
cependant le Safe_mode du php.ini est bien sur OFF

je pense donc il est nécessaire de faire exécuter l'utilisateur apache en mode sudo, mais sans mot de passe cependant je ne sais pas comment faire, je me tourne donc vers vous ^^ (à moins que vous ayez une autre idée pour régler ce problème).

Merci d'avance

Re: Erreur de permission pour la commande Chown

Publié : 12 septembre 2013, 08:50
par jibe
Salut,

Si je pratique assez souvent PHP, je n'en fais toutefois pas une utilisation si avancée. D'ailleurs, ça me semble un peu dangereux d'utiliser PHP pour modifier des droits d'accès aux fichiers... Est-ce d'ailleurs bien PHP qui est en cause ici ?

Pour moi, sauf besoin et autorisation spéciaux (root, et pas dans n'importe quel cas...), chown ne devrait (et normalement ne peut) être utilisé que par le propriétaire du fichier concerné, voire le groupe, pour le "donner" à quelqu'un d'autre. Le langage n'a rien à voir là-dedans, c'est simplement la sécurité du filesystem.

Il faudrait que tu précises ce que tu veux faire, et si ce n'est pas trop indiscret pourquoi, si tu veux qu'on puisse te proposer des solutions ou des contournements : donner des droits root à PHP/apache me semble très dangereux du point de vue de la sécurité du système ! Sans compter que je ne suis pas certain que ce soit possible... ni utile.

Il me semble à priori que, si plusieurs utilisateurs doivent avoir accès à ce fichier, il devrait être dès le départ créé avec les droits correspondants, en particulier au niveau du groupe : c'est là son utilité !

Re: Erreur de permission pour la commande Chown

Publié : 12 septembre 2013, 10:08
par Misoss
Salut,
Est-ce d'ailleurs bien PHP qui est en cause ici ?
Je pense oui, car le chown je peux le faire "à la main" et du coup la j'ai accès au ftp
Il faudrait que tu précises ce que tu veux faire, et si ce n'est pas trop indiscret pourquoi, si tu veux qu'on puisse te proposer des solutions ou des contournements : donner des droits root à PHP/apache me semble très dangereux du point de vue de la sécurité du système ! Sans compter que je ne suis pas certain que ce soit possible... ni utile.
Oui je sais que c'est dangereux, mais c'est pour un cas d'école ;) ... dans ce que j'ai pu survolé sur le net, j'ai vu que ça semble possible sur Ubuntu

je crée une appi Intranet avec laquelle je fais de la gestion d'utilisateur (création de profil LDAP; et FTP) j'ai donc besoin pour cela de créer les fichiers de config à la volée dans /etc/vsftpd/vsftpd_user_config/ et créer le répertoire FTP /home/ftp/users/$USER
(Je me demande si l'erreur de droit ne vient pas du fait que je suis dans le rep /home)
(Le problème n'aurais surement pas lieux si je restais dans le dossier d'apache /var/www/html ? ... Si oui, ce qui poserais autant de probleme de sécurité vis à vie des config client FTP, non ?)

Le problème de base est quand j'essaie de me connecté au ftp avec un utilisateur créée via l'intranet, j'ai cette erreur 500 oops config file not owned by correct user or not a file ... après plusieurs tests, j'ai résolu le problème en changent le propriétaire de mon fichier de config utilisateur.
exemple :

Code : Tout sélectionner

apache:apache /etc/vsftpd/vsftpd_user_conf/$USER
en

Code : Tout sélectionner

root:root /etc/vsftpd/vsftpd_user_conf/$USER
Ce qui me pousse donc à faire le chown automatiquement via le script php

Re: Erreur de permission pour la commande Chown

Publié : 12 septembre 2013, 23:27
par jibe
Misoss a écrit :
Est-ce d'ailleurs bien PHP qui est en cause ici ?
Je pense oui, car le chown je peux le faire "à la main" et du coup la j'ai accès au ftp
Ce n'est une preuve que si tu le fais par le même utilisateur ! Or, je ne pense pas que tu t'authentifies comme étant apache...

Le répertoire dans lequel tu veux intervenir appartient très probablement à root. Il faut donc être root pour avoir le droit de changer le propriétaire. Donc, ce n'est pas PHP qui est en cause, c'est simplement le système de droits d'accès de Linux !

Pas très clair, ton truc... Tu arrives à créer le fichier avec PHP, mais pas à le changer de propriétaire ? C'est assez bizarre ! Que ce soit en PHP ou en ligne de commande, je vois mal comment ça peut se produire... Si le répertoire appartient à root comme je suppose, tu ne devrais pas pouvoir créer le fichier. Et s'il appartient à apache, je ne vois pas pourquoi PHP refuserait de changer le propriétaire !

Re: Erreur de permission pour la commande Chown

Publié : 24 septembre 2013, 22:17
par Misoss
Bon j'ai changé la méthode mais toujours sans résultat concluant, le chown ne s’exécute pas alors que les autres commande ne pose aucun soucis, comment puis-je faire pour voir s'il me retourne une erreur ?

Au lieu de faire la procédure toute la procédure en PHP, je l'ai fais en Shell, et je l’exécute via PHP

Script PHP

Code : Tout sélectionner

<?php [...]
$commandAdd = escapeshellcmd("sh /etc/vsftpd/addftpuser.sh ".$login);
$outputAdd = shell_exec($commandAdd);
if ($outputAdd){echo '<br/>Enregistrement de la configuration ftp  effectu&eacute; pour l\'utilisateur '.$login.'<br/>';
var_dump($outputAdd);}
else{echo '<br/>Erreur d\'&eacute;criture de la configuration ftp pour l\'utilisateur '.$login.'<br/>';
var_dump($outputAdd);}
[...] ?>
/etc/sudoers

Code : Tout sélectionner

apache ALL=(ALL) NOPASSWD:/etc/vsftpd/addftpuser.sh
/etc/vsftpd/addftpuser.sh

Code : Tout sélectionner

#!/bin/sh

var1=$1

	# cree le dossier utilisateur
	mkdir /home/ftp/users/$var1 
	chmod 775 /home/ftp/users/$var1
	sudo chown -hR vsftpd:vsftpd /home/ftp/users/$var1
        #chown -R vsftpd:vsftpd /home/ftp/users/$var1 #HS ...

	#cree le fichier de config
	echo "#Config file for "$1 >> /etc/vsftpd/vsftpd_user_conf/$var1
	echo "dirlist_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/$var1
	echo "download_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/$var1
	echo "local_root=/home/ftp/users/"$var1 >> /etc/vsftpd/vsftpd_user_conf/$var1
	echo "write_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/$var1
	sudo chown -R root:root /etc/vsftpd/vsftpd_user_conf/$var1
        #chown -R root:root /etc/vsftpd/vsftpd_user_conf/$var1 # HS ...
	
# affiche le succés 
	echo "Utilisateur FTP "$var1" ajouté avec succès" 
________________________________________________________________

Peut-être qu'une autres solution est à envisagé, est-ce que les fichiers de conf des utilisateurs se trouvant dans /etc/vsftp/vsftps_user_conf/ doivent être obligatoirement en root (ce qui est le cas pour le moment), n'y a t'il pas une solution pour qu'il exécute les conf qui appartienne à apache:apache et à vsftpd:vsftpd

/etc/vsftpd/vsftpd.conf

Code : Tout sélectionner

# No ANONYMOUS users allowed
anonymous_enable=NO
# Allow 'local' users with WRITE permissions (0755)
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES

# if you want to LOG vsftpd activity then uncomment this log_ftp_protocol
# log_ftp_protocol=YES

connect_from_port_20=YES

# uncomment xferlog_file and xferlog_std_format if you DIDN'T use the line above
# with log_ftp_protocol - it must be excluding each other
# The name of log file when xferlog_enable=YES and xferlog_std_format=YES
# WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log
#xferlog_file=/var/log/xferlog
#
# xferlog_std_format Switches between logging into vsftpd_log_file and xferlog_file files.
# NO writes to vsftpd_log_file, YES to xferlog_file
# xferlog_std_format=YES

#
# You may change the default value for timing out an idle session (in seconds).
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection (in seconds).
#data_connection_timeout=120
#
# define a unique user on your system which the
# ftp server can use as a totally isolated and unprivileged user.
nopriv_user=vsftpd

chroot_local_user=YES

listen=YES

# here we use the authentication module for vsftpd to check users name and passw
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

# If userlist_deny=YES (default), never allow users in this file
# /etc/vsftpd/user_list , and do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
userlist_deny=yes

# here the vsftpd will allow the 'vsftpd' user to login into '/home/vsftpd/$USER directory
guest_enable=YES
guest_username=vsftpd
local_root=/home/ftp/users/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf

force_local_data_ssl=NO
force_local_logins_ssl=NO

# PASV - passive ports for FTP (range 44000 - 44100 ; 100 PASV ports,
# REMEMBER to OPEN FIREWALL FOR ALLOWING FTP Passive CONNECTIONS
# check "how to enable Passive FTP in IPTABLES": here or here

pasv_enable=YES
pasv_min_port=44000
pasv_max_port=44100


Re: Erreur de permission pour la commande Chown

Publié : 27 septembre 2013, 22:50
par Misoss
hey !!!
bon toujours plus de test et toujours autant de mauvaise nouvel le :cry:
J'ai testé d’exécuter le chown, avec cron (en tache planifié) ... mais toujours rien.
vsftpdtext.txt, est bien créée, mais la commande chown n'est pas exécuté...

Code : Tout sélectionner

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

*/5 * * * * sudo chown -R vsftpd:vsftpd /home/ftp/users/
*/5 * * * * sudo chown -R root:root /etc/vsftpd/vsftpd_user_conf/ 
*/5 * * * * echo "test" >> /etc/vsftpd/vsftpdtest.txt

Re: Erreur de permission pour la commande Chown

Publié : 08 octobre 2013, 21:28
par Misoss
bon bah un petit up, car je ne trouve toujours pas de solution :/

Re: Erreur de permission pour la commande Chown

Publié : 09 octobre 2013, 00:35
par nouvo09
à tout hasard que renvoient les commandes

cat /etc/passwd | grep vsftp

et

cat /etc/group | grep vsftp


?

Re: Erreur de permission pour la commande Chown

Publié : 09 octobre 2013, 11:32
par MarbolanGos
nouvo09 a écrit :à tout hasard que renvoient les commandes

cat /etc/passwd | grep vsftp

et

cat /etc/group | grep vsftp


?
Roh nouvo09 qui nous fait des UUOC ! Cette commande fait la même chose :

Code : Tout sélectionner

grep vsftp /etc/passwd
grep vsftp /etc/group

Re: Erreur de permission pour la commande Chown

Publié : 09 octobre 2013, 14:38
par nouvo09
Mea culpa. Je reconnais volontiers que pour chaque commande on peut économiser 5 caractères.

Et que pour me le faire remarquer il en aura fallu 131.