Como criar um arquivo usando fopen em um diretório com permissão de gravação proprietária? [RESOLVID

1. Como criar um arquivo usando fopen em um diretório com permissão de gravação proprietária? [RESOLVID

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/07/2018 - 02:16h

Como faço para gravar um arquivo usando fopen dentro de um diretório onde só há permissão de gravação proprietária (S_IWUSR)?

Segue uma tentativa que fiz:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>

int main(void){

mkdir("/home/isaak/Documents/phrase", S_IWUSR);

FILE *file=fopen("/home/isaak/Documents/phrase/phrase.txt", "w");

if(file==NULL){

perror("ERROR");
exit(EXIT_FAILURE);

}else{

fprintf(file, "I shot the cat using an AK-47!!!");
fclose(file);
}

return 0;
}


Quando executado:
ERROR: Permission danied 


Como faço para ganhar a permissão de gravação nesta pasta a partir do meu código (de preferência temporária)?


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 02/07/2018 - 16:13h

Não deveria ser necessário o sudo para um diretório que ele acabou de criar.

A questão é que faltou colocar no diretório a permissão de execução. Sem ela, o diretório não pode ser atravessado, mesmo que se tenha permissão de escrita sobre ele. Assim sendo, aquele S_IWUSR é insuficiente: ele precisa ser associado a S_IXUSR (associação pelo operador ou bit-a-bit, “|”).
mkdir("diretorio", S_IWUSR|S_IXUSR); 


Além disso, seria interessante testar se a função mkdir() completa com sucesso.

3. Re: Como criar um arquivo usando fopen em um diretório com permissão de gravação proprietária? [RESOLVID

Diego Mendes Rodrigues
diegomrodrigues

(usa Ubuntu)

Enviado em 02/07/2018 - 07:54h

Você pode utilizar o comando sudo.
$ gcc programa.c -o programa
$ sudo programa

Abraço,
Diego M. Rodrigues


4. Re: Como criar um arquivo usando fopen em um diretório com permissão de gravação proprietária?

Perfil removido
removido

(usa Nenhuma)

Enviado em 03/07/2018 - 07:42h

paulo1205 escreveu:

A questão é que faltou colocar no diretório a permissão de execução. Sem ela, o diretório não pode ser atravessado, mesmo que se tenha permissão de escrita sobre ele. Assim sendo, aquele S_IWUSR é insuficiente: ele precisa ser associado a S_IXUSR (associação pelo operador ou bit-a-bit, “|”).
mkdir("diretorio", S_IWUSR|S_IXUSR); 


Eu adicionei o 'S_IXUSR'. "Funcionou", mas agora qualquer um pode abrir a pasta sem permissão de um usuário administrador, eu não queria isso, eu queria que o bloqueio continuasse, porém sendo o programa uma exceção nesse bloqueio.

Além disso, seria interessante testar se a função mkdir() completa com sucesso.


Sim, é interessante, mas por ser tratar de um simples teste eu resolvi deixar da forma como estava.




5. Re: Como criar um arquivo usando fopen em um diretório com permissão de gravação proprietária?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 03/07/2018 - 08:34h

isaak escreveu:

Eu adicionei o 'S_IXUSR'. "Funcionou", mas agora qualquer um pode abrir a pasta sem permissão de um usuário administrador, eu não queria isso, eu queria que o bloqueio continuasse, porém sendo o programa uma exceção nesse bloqueio.


Como “qualquer um”? S_IXUSR só liga o bit de execução para o dono do diretório, não para os demais usuários. E isso é feito pelo sistema operacional, não dependendo de concessões de permissão de um usuário administrador. Por que você diz que “qualquer um pode abrir a pasta”?

Creio que seria bom você descrever o que deseja fazer. Talvez uma abordagem que use outras permissões, ou uma que use ACLs, ou ainda uma que vá além de as meras permissões em disco sejam mais adequadas à solução do seu problema.


6. Re: Como criar um arquivo usando fopen em um diretório com permissão de gravação proprietária? [RESOLVID

Perfil removido
removido

(usa Nenhuma)

Enviado em 04/07/2018 - 00:11h

paulo1205 escreveu:

Como “qualquer um”? S_IXUSR só liga o bit de execução para o dono do diretório, não para os demais usuários. E isso é feito pelo sistema operacional, não dependendo de concessões de permissão de um usuário administrador. Por que você diz que “qualquer um pode abrir a pasta”?


Ah..sim..sim! Desculpe, entendi errado.








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts