Unix: Como posso permitir que apenas uma pessoa veja minha pasta no mesmo fs?

9

Quero dar acesso a um dir para um amigo. Ele tem acesso ao sistema de arquivos, onde o dir está localizado. Não quero definir as permissões para todos os usuários. Como posso permitir que apenas uma pessoa veja o diretório? Nenhum de nós é um superusuário.

[BOUNTY CHALLENGE] Nenhuma das respostas funciona, usando o Ubuntu:

1. A abordagem de jamuraa não está funcionando

$ setfacl -m user:friend:rwx classroom.xml 
setfacl: classroom.xml: Operation not supported

2. A abordagem do nik não está funcionando: não é possível acessar o arquivo inexistente

3. A abordagem do ba não está funcionando: não consigo criar grupos, nem uma raiz.

4. A abordagem do ToK não está funcionando, os usuários estão em dois grupos: "usuários" e "campo"

chown -R myFriend:users ~/TEST
chown: changing ownership of `/u/myFriend/TEST/you_see_it': Operation not permitted
chown: changing ownership of `/u/myFriend/TEST': Operation not permitted

fonte
1
Seria útil se você explicasse como essas respostas representam um problema para você - daria uma definição melhor do problema para formar outras opções.
Nik
nik: perfis de erro adicionados.

Respostas:

12

Com apenas permissões normais do UNIX (usuário, grupo, todos), você não pode fazer isso facilmente. Se você não precisar mais acessar o diretório, poderá alterar o proprietário do diretório para seu amigo, o que é válido em alguns Unices, mas a maioria não é.

No entanto - se você tiver ACLs ativadas no Linux, poderá fazer isso se for o proprietário do arquivo. Basta executar o comando em setfacl -m user:friend:rwx filenameque friend é o nome da conta do seu amigo e o nome do arquivo é o arquivo. Você pode verificar se ele entrou em vigor executando getfacl filename, você deve ver a tríade user:friend:rwxna lista. Não vi muitos sistemas Linux com as ACLs ativadas.

jamuraa
fonte
As ACLs são a solução padrão para esse problema, supondo que seu sistema de arquivos as habilite.
Ryan C. Thompson
HHH parece dizer que isso não vai funcionar. Eu acho que sim, a menos que, por algum motivo estranho, as ACLs não estejam ativadas. HHH, o que dá?
Pboin
pboin: esse método não funciona; aparentemente, o motivo pode ser que as ACLs não estão ativadas ou outras coisas, não tenho certeza.
11

Isso é algo que discutimos na escola.
É mais ou menos assim,

  1. Crie um diretório (nomeado data, para referência aqui)
    • alterar permissões como " chmod 711 data"
    • grupo e outros têm apenas x- acesso para entrar no diretório
    • eles não podem listar o diretório
    • Agora, crie um diretório difficult-name-here(isso pode ser uma string com hash)
    • alterar permissões como " chmod a+rx difficult-name-here"
    • o conteúdo deste diretório é seguro, enquanto o diretório externo não pode ser listado
    • pessoas que conhecem o "nome difícil" podem pular para este segundo diretório
      • " cd path/to/data/difficult-name-here"
      • outras pessoas não podem ver o nome e não podem acessar o conteúdo do diretório
      • No entanto, rootsempre é possível acessar tudo (o que não é um problema aqui)
    • compartilhe difficult-name-herecom as pessoas que você deseja fornecer esses dados
    • Mantenha os arquivos compartilhados nesse segundo diretório

Muito rude, mas se isso puder ser quebrado sem a quebra do controle de acesso ao unix, eu gostaria de saber.


Atualização no comentário de dmckee,
Esta é exatamente a conclusão que chegamos!
"segurança pela obscuridade" tem segurança limitada .

Dito isto, ao projetar proteção para dados,
é importante identificar seu valor.

Você deve ter como alvo,

  • Um custo de quebra da segurança superior a,
  • O custo do conteúdo protegido,
  • Por um fator proporcional à sua paranóia

Nesse caso, se você rootdecidir enumerar a árvore de diretórios em algum lugar de acesso público,
seu segredo será revelado! Mas você está protegendo da raiz ou de sua potencial irresponsabilidade?
Se for esse o caso, você terá muito mais com que se preocupar do que com os arquivos compartilhados.


Atualização sobre a nota que não está funcionando na pergunta .
Eu usei isso nos primeiros dias do linux para saber que funciona.
Se você receber ' cannot access non-existant file' em vez de 'permissions denied'', provavelmente cometeu um erro na sequência. O que você deseja deve ficar assim,

 755 711 755 o que for - === Permissões de acesso

 BasePath / CoverDir / Obscure / protectedFile.txt
          | | ^^^^^^^^^^^^^^^^^ Não pode ser visto sem
          | ^^^^^^^ Nome do diretório, acesso de leitura a
          ^^^^^ Público compartilhado com um amigo. Diretório obscuro.
                acessível 
                diretório.
  1. Se você definir ' CoverDir' acesso como 'rwx--x--x'', o
    grupo e outros só poderão entrar no diretório, mas não poderão ler seu conteúdo.
  2. Agora, se você usar um nome de diretório obscuro
    ' Obscure', dentro dele e conceder acesso de leitura completo com ' rwxr-xr-x',
    qualquer pessoa que conheça esse nome poderá listar seu conteúdo.
  3. Esse acesso terá que ser feito de fora com um ' ls BasePath/CoverDir/Obscure'
    Porque as pessoas do seu grupo e outras pessoas não poderão ' ls BasePath/CoverDir'.
nik
fonte
7
"se isso pode ser quebrado [...], gostaria de saber" Bem, é o próprio exemplo de segurança pela obscuridade e, portanto, frágil. Não conte com isso a longo prazo. Legal, no entanto.
dmckee --- ex-moderador gatinho
Se seu controle de acesso unix for implementado com segurança, isso é quase tão seguro quanto um banco de dados de senhas sombreadas (ou sshchave privada).
Nik
5

Ryan estava 100% correto, apenas para trás. Como seu amigo (provavelmente) tem um grupo único associado ao seu nome de usuário, altere a propriedade do grupo do diretório em questão para esse grupo, provavelmente o nome de usuário do amigo. Para poder compartilhar o conteúdo entre vocês, você deve manter a propriedade como usuário:

chown -R youruser:friendgroup ~/foo/bar

Em seguida, atribua permissões apropriadas ao diretório, dependendo de qual acesso você deseja que o outro usuário tenha:

chmod -R 770 ~/foo/bar

concederia a você o acesso completo do RWX ao diretório e a todo o seu conteúdo.

Observe que isso pressupõe que nenhum outro usuário foi adicionado ao grupo de seus amigos. O sistema provavelmente não teria feito essa atribuição, no entanto, como mencionado anteriormente, o usuário root pode fazer o que escolher. Você pode usar o comando groups para ver cada grupo ao qual seu amigo ou usuário arbitrário pertence. Além disso, a menos que as permissões tenham sido alteradas por algum motivo, você poderá visualizar o arquivo / etc / group que contém as atribuições de grupo para cada grupo no sistema.

Tok
fonte
4

Eu criaria um novo grupo para você e seu amigo e definiria as permissões da pasta como completas para proprietário e grupo, juntamente com o bit setgid do diretório.

Mas, dependendo das suas necessidades, talvez você também precise mudar umask de você e de seus amigos para que ele defina automaticamente o grupo para poder alterar novos arquivos.

# groupadd bestfriends
# chmod 2770 dir
# chgrp bestfriends dir
# usermod -G bestfriends FRIENDLOGIN
gaqzi
fonte
3
Isso pode exigir privilégios de superusuário que ele não possui.
Keck3
1
Ah, eu perdi completamente essa linha: x Então estou perdida. Acho que eu iria enviá-lo por correio localmente - não a melhor solução, mas pelo menos o arquivo chegava ao outro cara.
gaqzi
2

As listas de controle de acesso são a maneira perfeita de fazer isso.

No entanto (se bem me lembro), o sistema de arquivos precisa ser inicializado com ACLs (por exemplo, "/ dev / sda6 / home ext3 padrões, acl "), via / etc / fstab, e isso é algo que somente o superusuário pode fazer. ..


fonte
2

É necessário RBACS como grsec / selinux.

kagali-san
fonte
Não tenho certeza se esse é o problema, você pode adicionar alguma citação?
2

Por padrão, cada usuário em um sistema Ubuntu também possui um grupo associado com o mesmo nome. Portanto, se você puder adicionar seu amigo ao seu grupo e marcar a pasta em questão como g+rwx, estará definido. Lembro-me vagamente que este caso de uso foi citado como o motivo para criar um grupo para cada usuário.

Ryan C. Thompson
fonte
Adicionar usuários a grupos requer acesso root, que o OP disse que não possui.
Dave Sherohman
2

não tentei isso, mas que tal um diretório público legível com um FS criptografado no espaço do usuário (por exemplo, encfs). Então você pode compartilhar essa senha com seu amigo e ninguém mais pode usar esses dados (bem, acho que eles poderiam obter os dados e executar um cracker de senha offline?).

Uma corrida
fonte
2

Para dar ao Linux a mesma fineza que as janelas em privilégios de arquivo, você precisa aninhar grupos. Crie um grupo que tenha acesso à sua pasta como gostaria que seu amigo tivesse. Adicione-o a esse grupo ou ao grupo em que ele reside. Por exemplo

/ foo é a pasta que você deseja compartilhar. Crie um grupo FooGroup que tenha o acesso desejado à pasta. Adicione grupos e usuários a esse grupo aos quais você deseja ter acesso a esta pasta.

É muito difícil ter um grupo para cada pasta ou arquivo, mas é a melhor maneira de restringir o acesso no mesmo nível do Windows.

Ge3ng
fonte
1

Você pode criptografar o diretório com gpg. E tente ofuscar a localização, como sugeriu o nik.

kzh
fonte