2012-01-05 4 views
1

Mise à jour: s'avère que le problème est plus compliqué que je pensais au départ. J'essayais en même temps de résoudre pourquoi mon mkdir a cessé de fonctionner et c'était parce que j'avais manuellement changé les permissions du répertoire parent pour tester puis les ai commutés et ai ajouté un chmod au script qui ne fonctionne pas puisque celui-ci est exécuté par apache et pas moi. Je vais poster une nouvelle question avec le plus gros problème car je pense que l'ajout de tout cela dans celui-ci va devenir confus.chown dans les scripts


Je suis un instructeur de laboratoire à mon université et je l'ai été réécrire le script qu'ils fournissent pour des missions téléchargement parce que celui qu'ils ont est vieux et buggy. Au lieu de modifier le script existant (écrit en python), je l'ai écrit de toutes pièces en php.

J'ai rencontré un problème où il semble que chown ne fonctionne pas. Les scripts php s'exécutent sous l'utilisateur apache. Je ne suis pas sûr si cet utilisateur est «privilégié» ou non, mais le script original utilisé chown.

Puis-je supposer que par conséquent, apache devrait avoir l'autorité nécessaire et que mon problème est ailleurs ou est-ce une logique défectueuse?


Le serveur est celui de l'université et il ne me sera pas permis de faire des changements de configuration. Je crois que c'est CentOS qu'ils courent. Il n'y a pas de message d'erreur que je viens de remarquer que je peux chmod le fichier et modifier les permissions mais que la commande chown sur la ligne suivante semble n'avoir aucun effet.

ls -al sur les anciens scripts montrent:

-rwxr-xr-x 1 mattw labstaff 5067 Sep 1 17:52 File_Upload.cgi 

ne ressemble pas à le bit setuid est activé.

Stefan a mentionné "L'utilisateur apache n'a probablement pas assez d'autorisations pour choisir un fichier/dossier qu'il ne possède pas". Le répertoire que j'essaye de chown vient d'être créé avec un mkdir donc il devrait appartenir à Apache. Est-ce que chown devrait fonctionner quel que soit le privilège lorsque vous possédez déjà le fichier?

Répondre

2

Apache n'a probablement pas les privilèges pour le faire. Cela dépend de l'environnement dans lequel il fonctionne. Vous avez dit qu'apache fonctionne sous l'utilisateur apache, donc je vais juste supposer que c'est RHEL ou une variante RHEL comme Centos.

Vous seriez en mesure d'éditer le fichier sudoers (avec visudo) et de donner à apache la possibilité de sudo sans mot de passe dans un certain répertoire. Sachez que ce n'est pas recommandé si vous êtes très soucieux de la sécurité.

Ajouter quelque chose comme

apache ALL = NOPASSWD:/bin/chown 1 [1-9] [0-9] [0-9] \: 1 [1-9] [0-9] [ 0-9]/var/www/[a-zA-Z0-9] *

Vous pouvez ajouter apache à un groupe différent, ou un autre utilisateur au groupe apache ou quelque chose du genre et le chmodding à 0775 ou 0664 à la place.

Il est préférable de publier le code qui déclenche l'erreur, le message d'erreur éventuel et les utilisateurs et groupes devant accéder aux fichiers téléchargés.

1

Si l'ancien script est exécuté par le apache utilisateur, mais est en mesure d'exécuter chown il peut avoir le bit setuid à lui permettre de courir avec des privilèges élevés. Dans ce cas, votre hypothèse serait erronée.

Veuillez poster la sortie de ls -al /path/to/script pour le confirmer. Il devrait montrer root en tant que son propriétaire et s dans son mode. Pour activer le mode setuid pour le nouveau script, chmod u+s. Notez que cela peut avoir de sérieuses implications en termes de sécurité. En particulier, ne laissez jamais un script setuid ou binaire inscriptible.

1

L'utilisateur apache n'a probablement pas assez d'autorisations pour choisir un fichier/dossier qu'il ne possède pas, vous pouvez donner plus de droits à apache mais cela pourrait devenir un problème de sécurité.