# [Programación C] Permiso denegado al ejecutar programa(Sol.)

## Popolous

¡Hola!

Estoy tratando de aprender C y tras hacer un simple programa como el siguiente:

```

#include <stdio.h>

int main(void)

{

   printf("Hola mundo\n");

   return 0;

}

```

Y compilarlo con:

```

gcc -o hola hola.c

```

Lo trato de ejecutar con poniendo en la consola:

```

./hola

```

Pero obtengo (tanto como usuario normal como root) el siguiente error:

 *Quote:*   

> 
> 
> $ ./hola
> 
> -bash: ./hola: Permiso denegado
> ...

 

La verdad es que no sé ni por donde empezar a tratar el problema. A ver si me podéis indicar por dónde empezar a buscar, ya que me parece muy raro que no consiga ejecutar nada compilado y luego compile el sistema sin problemas. La versión de gcc que tengo es la 4.4.3:

 *Quote:*   

> 
> 
> Usando especificaciones internas.
> 
> Objetivo: x86_64-pc-linux-gnu
> ...

 

¡Saludos!Last edited by Popolous on Tue Mar 30, 2010 7:20 pm; edited 1 time in total

----------

## Coghan

¿El directorio/partición donde creas el binario "hola" te permite ejecutar aplicaciones?, comprueba en tu /etc/fstab si tienes la opción "noexec". Es obvio pero comprueba los permisos/propietario del ejecutable.

----------

## Popolous

Coghan:

Ahora que lo mencionas, en mi directorio home, que es desde donde trato de ejecutar esto, no me permitía tampoco utilizar archivos bash ejecutables. Los permisos del archivo hola son 775 y el propietario es mi usuario. En el archivo fstab no tengo la opción noexec en la partición donde reside mi /home....

¡Saludos!

----------

## esteban_conde

Cambia a /home y haz un ls -l para ver los permisos y el propietario del directorio de tu usuario.

----------

## Popolous

Acabo de mirar los permisos del directorio /home y aparentemente están bien:

```

/home $ ls -al

total 22

drwxr-xr-x  5 root   root   1024 nov 15 19:56 .

drwxr-xr-x 20 root   root   4096 dic  4 17:46 ..

drwxr-xr-x 45 juanjo users  4096 mar 28 14:08 juanjo

-rw-r--r--  1 root   root      0 nov  5 02:34 .keep

drwx------  2 root   root  12288 nov 11 11:58 lost+found

drwxr-xr-x  2 p2p    root   1024 nov 15 19:56 p2p

```

¡Saludos!

----------

## esteban_conde

Pues no se me ocurre que puede ser.

Por si acaso mira como me queda despues de compilar, observa que el ejecutable sale con la x, a ti deberia salirte igual.

 *Quote:*   

> esteban@mimaquina ~ $ ls -l hola*
> 
> -rwxr-xr-x 1 esteban esteban 8125 mar 28 14:23 hola
> 
> -rw-r--r-- 1 esteban esteban   80 mar 28 14:23 hola.c
> ...

 

----------

## Popolous

Yo estoy más sorprendido que nadie...

 *Quote:*   

> 
> 
> $ ls -l hola*
> 
> -rwxrwxr-x 1 juanjo juanjo 7864 mar 27 21:47 hola
> ...

 

Ni idea de por qué no lo hace. Como superusuario es exactamente lo mismo, tanto en mi directorio de usuario normal, como en el /root....

 :Confused: 

¡Saludos!

----------

## Coghan

Se me ocurre que copies el binario "hola" al directorio /usr/bin y lo ejecutes desde allí, doy por entendido que los ejecutables en tu sistema funcionan bien dado que si no, no tendrías el sistema activo. Con esto descartamos que sea un problema de particiones marcadas como no ejecutables y puedes centrarte en buscar algún error en gcc.

También se me ocurre mirar en el kernel los formatos binarios:

```
CONFIG_ELF_CORE=y

CONFIG_BINFMT_ELF=y

CONFIG_COMPAT_BINFMT_ELF=y

CONFIG_BINFMT_MISC=y

CONFIG_MISC_DEVICES=y

CONFIG_INPUT_MISC=y

CONFIG_MISC_FILESYSTEMS=y
```

----------

## esteban_conde

No se exactamente como afecta el directorio /tmp con permisos 1777 y que el usuario pertenezca al grupo wheel.

----------

## Popolous

Gracias, voy a probar lo que me decís a ver si es algo del kernel, que creo Coghan que vas a dar en el blanco, en un rato os lo digo.

@esteban_conde: tengo el directorio /tmp con esos permisos....Ahora estaba instalando Gentoo en un Netbook Acer Aspire One desde una Ubuntu...he compilado sin problemas el programa en Ubuntu y al ejecutarlo, sin errores...

¿Podrías por favor explicarme mejor por qué crees que puede tener algo que ver?

¡Saludos!

----------

## esteban_conde

 *Quote:*   

> ¿Podrías por favor explicarme mejor por qué crees que puede tener algo que ver?
> 
> 

 Pues la verdad es que no, es una sensación, creo haber tenido ese mismo problema, haberlo resuelto y no recuerdo como.

Cuanto más quiero forzar la memoria mas se me niega.

----------

## esteban_conde

Me he dado una vuelta por el kernel y creo que el archivo que compilamos es del tipo a.out, es decir si compilamos el archivo así: gcc hola.c 

el resultado es un ejecutable llamado a.out y por tanto esa opción deberia estar habilitada en el kernel, el kernel en el que lo estoy viendo es un 2.6.20 y viene así:

 *Quote:*   

>    Executable file formats / Emulations  --->   

 

despegando el menu viene la opción aout binary support, echa un vistazo para ver si la tienes habilitada.

----------

## upszot

 *Popolous wrote:*   

> Yo estoy más sorprendido que nadie...
> 
>  *Quote:*   
> 
> $ ls -l hola*
> ...

 Hola... me parece que encontre el error... el archivo compilado es "hola.c" y ese no tiene permiso de ejecucion "x"

saludos

----------

## Popolous

¡Hola!

El archivo hola.c es el código fuente. El compilado se llama hola, sin más y tiene permisos de ejecución para todo el mundo...

¡Saludos!

----------

## esteban_conde

¡Eh! popolous no se si has leido mi anterior post, compila con la orden gcc hola.c sin darle nombre al archivo, si todo va bien deberias obtener un archivo llamado a.out que es el equivalente a tu hola luego ejecutalo a ver que pasa.

En tu kernel deberias tener la obción de seleccionar los formatos de ejecutables (ejecutable file formats), si no ha cambiado la cosa serian tres elf (ejecutable and linking files), aout (una herencia de fat32) y misc binaries, en mi compilación del kernel tengo seleccionados los tres <*>.

No se por que creo que va a ser eso lo que hace que no se te ejecuten los archivos a.out.

Suerte.

----------

## i92guboj

Por favor, publica el resultado de "mount | grep home".

No creo que los formatos ejecutables tengan nada que ver por varias razones. En primer lugar gcc por defecto hoy día debería producir ejecutables ELF, independientemente del nombre que tenga el archivo de salida, en segundo lugar, si el sistema no soporta el código objeto contenido en el archivo y no se trata de algo que el shell pueda interpretar entonces el error debería ser del tipo "instrucción ilegal" o algo por el estilo.

Asumiendo que los permisos y el par grupo:usuario son correcto el problema debería estar en el sistema de ficheros (ya sea por noexec, ya sea por corrupción o algún otro problema más extraño).

----------

## codestation

 *Popolous wrote:*   

> Coghan:
> 
> Ahora que lo mencionas, en mi directorio home, que es desde donde trato de ejecutar esto, no me permitía tampoco utilizar archivos bash ejecutables. Los permisos del archivo hola son 775 y el propietario es mi usuario. En el archivo fstab no tengo la opción noexec en la partición donde reside mi /home....
> 
> ¡Saludos!

 

La opción "user" del fstab también implica noexec, así que asegúrate que no la tengas como opción de montaje en /home

----------

## esteban_conde

 *codestation wrote:*   

> La opción "user" del fstab también implica noexec, así que asegúrate que no la tengas como opción de montaje en /home

 

Efectivamente lo dice la pagina man de mount y tiene que ser algo así ya que lo que yo sugeria mas arriba no es pues he hecho la prueba de quitar el soporte aout del kernel y me deja correr el ejecutable.

----------

## esteban_conde

 *Quote:*   

> esteban@mimaquina ~ $ ./hola
> 
> -bash: ./hola: Permiso denegado
> 
> 

 

Reproducido el error añadiendo user al cuarto campo de la linea de montaje de /home en fstab.

----------

## Popolous

¡Hola!

Efectivamente, como siempre habéis dado en el clavo:

 *mount | grep home wrote:*   

> 
> 
> $ mount | grep home
> 
> /dev/sda7 on /home type ext4 (rw,noatime)
> ...

 

Voy a quitarle la opción user del archivo fstab que es el que está dando la brasa. Mil gracias de nuevo compañeros, no sé qué haría sin vuestra ayuda....

¡Saludos!

----------

## rgrajales.biotech

hola chicos, muy agradecido puesto tengo el mismo problema y me alegra que le hayan encontrado solucion, mi preunta es, como hago para eliminar el "user" ese que da error??? que comandos uso y que pasos sigo para hacerlo?? 

de antemano gracias....   :Very Happy: 

DLB.....

----------

## i92guboj

Solo tienes que editar el archivo /etc/fstab con el editor de texto que prefieras y asegurarte de no tener "user" o "noexec" en la línea que monta la partición afectada. Necesitas permisos de root para editar dicho archivo.

----------

## rgrajales.biotech

ok, primero que nada, gracias    :Very Happy: 

segundo, cmo llego a ese archivo, pongo en consola "/etc/fstab" y me sale : permiso denegado, cmo hago para obtener ese permiso? lo estoy haciendo bien? estoy haciendo algo mal?

disculpa si son muy tontas mis preguntas, pero la verdad, estoy empezando en esto y quiero desligarme por completo de windows.... 

gracias nuevamente....     :Very Happy: 

----------

## rgrajales.biotech

encontre en una pagina que conseguia permisos de super usuario, con "sudo -s" y lo hago, introduzco, mi contraseña, y me sale root@nombre de usuario-laptop: pero al poner "/etc/fstab" denuevo me dice: "permiso denegado"   :Sad: 

gracias de antemano...   :Very Happy: 

----------

## i92guboj

Tienes que abrir dicho archivo en un editor de text, como ya dije arriba, escoge el que tu prefieras. En Gentoo nano viene instalado por defecto. También puedes usar vim o cualquier otro, ya sea en modo gráfico o de texto. Asegúrate de ejecutar el editor como root porque si no no te dejará guardar el archivo tras editarlo. /etc/fstab es usualmente legible por todos los usuarios, pero solo root puede modificar el archivo.

----------

## edgar_uriel84

 *rgrajales.biotech wrote:*   

> encontre en una pagina que conseguia permisos de super usuario, con "sudo -s" y lo hago, introduzco, mi contraseña, y me sale root@nombre de usuario-laptop: pero al poner "/etc/fstab" denuevo me dice: "permiso denegado"  
> 
> gracias de antemano...  

 

Debes hacer esto:

```
$sudo su

#cp /etc/fstab /etc/fstab.old

#nano /etc/fstab

```

La primera línea hace que "te conviertas" en root. 

La segunda hace un respaldo de tu archivo original, si te equivocas solo lo remplazas y listo.

La tercera abre un editor de texto para que modifiques el archivo, en la parte baja del editor hay ciertas instrucciones para guardar cambios y salir.

Ahora mismo no se me ocurre ninguna buena guía para que aprendas los comandos básicos pero puedes pedir ayuda para que te recomienden una o bien buscar en google, así podrás experimentar y aprender más rápido.

----------

## rgrajales.biotech

muchas muchas gracias, voy a hacerlo y te aviso cmo me va, de verdad que gracias...  :Very Happy: 

----------

## rescobarcorrea

tengo instalada la versión 12.10 de ubuntu linux

resulta que no puedo ejecutar archivos ejecutables con el comando ./ .

estuve viendo el foro y mi archivo fstab tiene lo siguiente:

/host/ubuntu/disks/swap.disk	none	swap	sw	0	0

mount grep home tiene lo siguiente:

gvfs-fuse-daemon on /home/roger/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=roger)

y un ~/home ls -al tiene lo siguiente:

total 3

drwxr-xr-x  3 root  root  1024 jul 18 04:56 .

drwxr-xr-x 24 root  root  1024 nov 16 10:00 ..

drwxr-xr-x 29 roger roger 1024 dic 12 13:24 roger

Que puedo hacer???

muchas gracias  :Wink: 

----------

## esteban_conde

 *Quote:*   

> gvfs-fuse-daemon on /home/roger/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=roger)
> 
> 

 

comenta esa linea dejandola asi:

##gvfs-fuse-daemon on /home/roger/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=roger)

luego mira a ver si da resultado y no se si será importante que tengas gvfs-fuse-daemon montado en un directorio oculto ni para que lo necesita ubuntu ahí eso creo que va de que se monte automaticamente el stick USB y en general el mass-storage pero no se como se lo hace ubuntu.

----------

