Jump to content

POWERED BY:

Archived

This topic is now archived and is closed to further replies.

codercss

Permissões para a pasta git

Recommended Posts

Olá a todos,

Não sei se este é o melhor local para esta questão, mas cá vai! Caso esteja no local errado agradeço que me informem! Obrigado

Configurei pela primeira vez o git numa máquina, que está a servir de servidor.

A pasta do git está em /media/local/git

Que permissões devo colocar na pasta git e na sua estrutura "/media/local/"?

Acabei por colocar a pasta git como utilizador comum e com 777. Fiz bem?

Obrigado

Share this post


Link to post
Share on other sites

depende quem vai acessar

Share this post


Link to post
Share on other sites

Abaixo segue a tabela com os códigos de permissão (formato octal):

| | r | w | x | Descrição
| 0 | - | - | - | Nenhuma permissão de acesso.
| 1 | - | - | x | Permissão somente de execução (x).
| 2 | - | x | - | Permissão somente de gravação (w).
| 3 | - | x | x | Permissões de gravação e execução (wx).
| 4 | x | - | - | Permissão somente de leitura ®.
| 5 | x | - | x | Permissões de leitura e execução (rx).
| 6 | x | x | - | Permissões de leitura e gravação (rw).
| 7 | x | x | x | Permissão total (leitura, gravação e execução, rwx).
Exemplos mais comuns

Usaremos o código de cores para facilitar a compreensão quanto ao owner, grupo e outros:

Permissão 644:
644 ou [rw-r--r--]: Owner com permissão de leitura e gravação, grupo com permissão somente de leitura, outros com permissão somente de leitura.
Permissão 755:
755 ou [rwxr-xr-x]: Owner com permissão total, grupo com permissão de leitura e execução, outros com permissão de leitura e execução.
Permissão 777:
777 ou [rwxrwxrwx]: Owner com permissão total, grupo com permissão total, outros com permissão total.

Share this post


Link to post
Share on other sites

Obrigado pela explicação.

O que pretendo é ter um servidor onde qualquer pc que se ligue na rede possa fazer um pull. E consequentemente um push.

Quais níveis e qual proprietário deve ter essa pasta, git, no servidor?

Obrigado

Share this post


Link to post
Share on other sites

Você vai permitir push e pull via SSH, certo? Se todos os usuários fizerem SSH com o usuário dono da pasta (como é no GibHub, onde você faz SSH com o usuário git), basta que o owner tenha as permissões de escrita e leitura (0 755 padrão já resolve).

Se os usuários fizerem SSH com seus próprios usuários, recomendo que configure-os no mesmo grupo do usuário git e deixe a pasta com 775. Dessa forma não precisará deixar 777.

Meu tutorial completo sobre chmod e permissões: http://rberaldo.com.br/chmod-permissoes-em-sistemas-linux-e-unix-like/

Share this post


Link to post
Share on other sites

Viva Beraldo,

Antes de mais parabéns pelo seu excelentes emails sobre php, aprendo bastante :) Continue esse excelente legado e trabalho que tem criado :)

Sim, o objectivo é que os usurário consigam fazer push and pull, via ssh.

Pelo quer percebi existe duas maneiras:

1-Todo o developer que entrar na minha rede pode ser acesso aos códigos que estão no git, via ssh, e via usuário git. Terei apenas que lhe passar a pass do utilizador. Ele vai fazer algo como "git clone git@ip/schacon/grit.git

2-Para todos os usuarios que entrarem e quiserem aceder ao reposotório terei que lhes dar acesso diretamente no servidor. A vantagem disso é que tenho um acesso mais controlo, certo?

Obrigado

Share this post


Link to post
Share on other sites

Na verdade, o diretório <projeto>.git no servidor não deve ser acessado diretamente. Ele é só um conjunto de dados sobre os arquivos, não os arquivos em si.

O correto é sempre fazer um clone do projeto. Esse clone terá a estrutura de arquivos correta.

E para isso, basta que o usuário faça um clone via SSH com o próprio usuário git. É só cadastrar as chaves de cada usuário no authorized_keys do usuário git

Em outras palavras, use só o primeiro método que você citou. O segundo não te dá mais controle, pois é possível limitar cada chave do authorized_keys, desabilitando acesso ao terminal. Assim a chave só servirá pra autenticar e fazer o clone/push/pull, sem dar acesso ao shell :)

Share this post


Link to post
Share on other sites

Olá,

Então terei que fazer o seguinte:

  1. Criar um utilizador git;
  2. Esse utilizador será owner da pasta;
  3. O grupo estará da responsabilidade o root;
  4. As permissões, segundo o post do nosso colega xanburzum será de 600. Pois pretendo que o owner consiga ler e escrever mas não quero que ele execute. O resto, o grupo, incluindo o root, e o resto do mundo não tem acesso a nada;

A equipa tenho apenas que passar os seguintes dados:

  1. user: git;
  2. pass: ******

Certo?

Obrigado

Share this post


Link to post
Share on other sites

600 está bom, mas vale lembrar que "execução" em uma pasta é entrar nela (comando cd). Com 600, não será possível dar cd na pasta. Se esse for o comportamento desejado, ok, deixe 600

Você pode passar a senha do usuário para todos, sim. Mas eu nunca faria isso. Prefiro utilizar o sistema de chaves (tutorial aqui). Com chaves fica mais mais seguro e organizado

Share this post


Link to post
Share on other sites

Ok....ando um pouco confuso com isto :P

O que fiz foi:

1-Criar no servidor uma pasta com as seguintes permissões e users:

drwxrwx---  3 git  root 4096 Aug 17 23:21 projects

O user git não tem pasta home (tutorial bom: http://www.tecmint.com/add-users-in-linux/);

2-Criei uma pasta, chamada proj1.git com as mesmas permissões e users;

3-No interior dela fiz "git init --bare" (tutorial bom: https://blog.butecopensource.org/criando-um-git-server-local/);

No cliente fiz:

1-git clone user@ip_do_git_server:/path/to/my_project

Agora estou a ler este site (http://rogerdudler.github.io/git-guide/index.pt_BR.html). E estou a descobrir que ainda não sei mexer com o git :P Mas isso eu já desconfiava hehe, mas vamos lá estudar :)

Esbarrei com este site (https://git-scm.com/book/pt-br/v1/Git-no-Servidor-Configurando-Git-no-Servidor) Mas confesso, que neste momento, ainda me baralhou mais. Talvez numa fase mais a frente.

Estou a ver este livro (https://www.casadocodigo.com.br/pages/sumario-git-github) Aconselham a leitura? Ou é preferível ler o site do git?

Encontrei este artigo: https://www.atlassian.com/git/tutorials/comparing-workflows/centralized-workflow Gostei da explicação!

Obrigado

Share this post


Link to post
Share on other sites

Obrigado Beraldo,

Segui os seus artigos e consegui montar o ambiente. Mas tive que dar permissões 777, para toda a arvore que recebe os projectos git no servidor. Porque com 600 ou 775 o user comum no pc comum não consegui fazer os push ou pull.

É seguro manter o sistema assim?

Vou ler sobre as ssh keys, pois é bastante chato ter que ficar a passar a pass do user git todas as vezes que é necessário fazre push ou pull.

Obrigado

Share this post


Link to post
Share on other sites

Obrigado xanburzum obrigado pelos artigos, vão ler!

Uma questão que me está a mexer com a cabeça :P

Já consegui montar o git repositório no servirdor. Estão apenas as voltas com as permissões. Pois só funciona com 777. Apesar de configurar para user git, que não tem pasta home, e usergroup para root, fico preocupado com o 777. Acham, também que é nível a mais?

Mas a minha questão é referente ao workflow. Programo no meu ambiente e faço o push commit para o servidor git. Esse servidor também recebe o apache. Como faço para actualizar a versão que está no apache ao mesmo tempo que faço o commit? Ou isso não funciona assim?

A ideia era quando fazer o "git commit -am "mesage" ele actualiza-se logo o que está no apache.

Estive a explorar o conteúdo do repositório no git servidor, e não vejo lá os ficheiros :P Vejo que existe uma séria de pastas e arquivos, que serve de base de daods para o git, penso eu!

Obrigado malta, e caso queiram que abre um novo tópico digam por favor.

Share this post


Link to post
Share on other sites

Sobre rodar pull automaticamente, nunca fiz isso, mas encontrei este tutorial: https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps

777 me parece exagero. Se todos os usuários fazem login com o usuário dono do repositório, 700 deveria ser suficiente

O diretório <projeto>.git não terá os arquivos. Nessa pasta ficam só os diffs de cada commit e outros arquivos do git. Com base nesses dados o git gera a árvore de diretórios ao fazer o clone do projeto

Share this post


Link to post
Share on other sites

Resolvi com nível 700. Talvez antes, por ainda não saber utilizar o git, tive-se feito confusão.

Em relação em rodar o pull automaticamente achei uma solução de colocar uma tarefa no crontab -e para rodas todos os dias à meia noite. Essa tarefa iria rodar um script com o comando

git pull origin master

Na pasta do apache.

Apenas vejo vantagem neste processo de utilizar o branch master como versão final. Pois assim estarei sempre seguro que a versão que entra em produção é a versão final.

Quando comecei a pesquisar por git fiquei com a ideia que o envio da versão de desenvolvimento para produção era mais prática. Pois fiquem com ideia que o ftp tinha "morrido"!

De certa maneira, ainda com os meus conhecimentos básicos, acho que está mais prático e seguro que o ftp. Pois basta aceder no servidor e correr o comando "git pull origin master" e está tudo pronto!

Neste livro, https://www.casadocodigo.com.br/pages/sumario-git-github, que já li e aconselho, o autor sugere vários ambientes de desenvolvimento com o git. Um deles é o "Utilizando branches por funcionalidade com um repositório central" que gostei particularmente. Pois utiliza o branche master como versão final e para cada nova feature é criado um branch especifico. Após a aprovação o mesmo é "merge" com o branch master. O que dá para utilizar o script que falei à pouco.

Mas top, top será o ambiente "Utilizando branches por etapa de desenvolvimento com um repositório central" que sugere a utilização de branch para "hotfix" e tudo! :) Mas ainda tenho que partir muita unha no git para chegar aí!

[uPDATE]

Outra coisa que acabei por perceber foi a utilização do git. Antes pensava que o git era um vcs e um sistema de backup. Mas agora percebo que apenas devemos fazer um commit quando acabamos uma etapa importante de uma funcionalidade que estamos a desenvolver.

O desenvolvimento de uma nova funcionalidade, que depois será mesclada no projecto final, terá vários commits. O próprio ponto de mesclagem será ele também um commit!

Muito bom! Adoro a filosofia!

Nota: Eu não sou programador a tempo inteiro. Sou uma pessoa que gosta de programar e de momento estou desempregado, por isso estou a tentar aprender a área para ganhar algum dinheiro!

Share this post


Link to post
Share on other sites

A ideia do cron funciona, mas apenas uma vez por dia. Pensei que você queria forçar o pull sempre que um push for feito para o branch master.

O Git é muito bom. Bem mais organizado e rápido que usar FTP. Aliás, odeio FTP :P

Eu não diria que só devemos fazer commit ao finalizar uma tarefa. Acho que devemos fazer commit sempre que uma etapa da tarefa for finalizada. O push (ou o merge seguido pelo push), sim, deve ser feito apenas depois de finalizar a tarefa.

Dentro de uma tarefa, se houver vários commits, podemos desfazer alguma modificação que fizemos simplesmente voltando a versão. Por isso prefiro commitar várias vezes :)

Share this post


Link to post
Share on other sites

Sim a ideia era fazer o pull sempre que um push for feito. Partilhei a ideia do cron por achar interessante. Mas vou ler os links que me enviou!

Como é o seu workflow para o servidor web? Neste momento tenho o projecto no meu pc, onde faço commit de tudo o que vou fazendo. Quando quero enviar para o repositório central faço "git push origin master" e lá vai ele :P

A questão que ainda estou preço é como isso fica disponível para o apache. Antes pensava que os ficheiros do projecto ficavam no repositório central. Mas não, o que fica lá é apenas os diff's e mais alguns ficheiros que o git precisa para gerir o sistema.

Por isso, agora entendo que precise de fazer o pull na pasta do apache.

Mas o que ainda não consegui perceber é se isso pode ser feito quando eu fizer o push no meu pc ou se tenho que aceder ao servidor, via ssh, e fazer lá o pull.

Nota: Utilizei o ftp por pouco tempo, mas tive que muitas vezes que apontar num papel, ou arquivo txt, as vezes que fazia update no ftp. E confesso que ficava com medo ao ver os arquivos subir, muitas vezes tive arquivos que não subiram e tinha que andar a fazer overwrite a alguns deles! Medo!

Não estou a falar mal do ftp, foi muito bom no seu tempo e talvez ainda seja. Apenas estou a comentar que me sinto mais confiante com o git, apesar de ainda não estar a 100%

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.