cp: no se puede crear un archivo normal: Permiso denegado
On febrero 15, 2021 by admin Estoy ejecutando un script PHP en mi servidor Apache y desde el script necesito copiar algunos archivos (para ejecutar un script Bash que copia archivos). Puedo copiar a un directorio /tmp
sin problemas, pero cuando quiero copiar a /tmp/foo
, aparece este error:
cp: cannot create regular file "/tmp/foo/file.txt": Permission denied
aunque los permisos para el directorio /tmp
y /tmp/foo
están establecidos al mismo valor.
¿Sabes cuál es el problema?
Comentarios
Responder
/tmp
Directorio tiene todos los permisos (lectura / escritura) para todos los usuarios. pero si creó /tmp/foo
con su propia cuenta, ¡tiene sus permisos solo para usted! si desea que otros usuarios (o programas) puedan escribirlo, cambie su permiso con este comando:
chmod 777 /tmp/foo
Si tiene cualquier otro archivo dentro de este directorio desde antes, agregue la marca -R
al comando anterior.
Actualización: Utilice este comando para cambiar el /tmp/foo
propietario del suyo al usuario predeterminado de apache:
sudo chown www-data:www-data /tmp/foo -R
también verifique su configuración de apache2 para ver qué usuario tiene para ejecutar los scripts php.
Comentarios
- Gracias por la respuesta, pero no funciona. Establecí los permisos para / tmp / foo en 777 y todavía obtengo el mismo error. Cuando ejecuto el script como un usuario normal, está bien. Pero el problema es cuando lo ejecuto desde un script php
- ¿Puedo ver sus scripts, por favor? y estás usando php o php-fpm? su problema es que, por defecto, php usa el usuario configurado de apache para ejecutar scripts, mientras que usted hizo
/tmp/foo
con su propia cuenta. Actualizaré mi respuesta, verifíquela nuevamente por favor. - php script: <? Php shell_exec (" bash /path/to/script.sh)? > y script.sh es #! / bin / bash cp /my/folder/file.txt / tmp / foo
- ¿Cómo puedo encontrar qué usuario usa apache para ejecutar scripts php? Cuando pongo whoami en el comando php script bash, obtengo " apache "
- ¿puedes darme el salida de este comando:
ls -alh /tmp | grep foo
si el directorio tienefoo
nombre.
whoami
yll /tmp
/tmp
es siempre para root por defecto. los resultados de los dos comandos no están relacionados en este caso, porque/tmp
tiene todos los permisos para todos los usuariostmp
es para root, pero no para/tmp/foo
OP podría estar ejecutando el script como un usuario diferente al que pertenece/tmp/foo
.