Os usuários neste sistema são cuidadosos e têm suas umasks definidas para o 0077 muito privado. No entanto, os usuários gostariam de ter diretórios específicos de grupo, onde arquivos podem ser copiados de modo a compartilhá-los explicitamente apenas entre outros membros do grupo. Pode haver vários desses diretórios de compartilhamento, embora cada um seja específico para um grupo.
Definir o sticky bit de grupo em um determinado diretório a ser usado para compartilhamento não é suficiente. Embora definir o sticky bit faça com que a propriedade do grupo seja correta em arquivos colocados no diretório, as permissões em tais arquivos são frequentemente definidas de forma que os arquivos não possam ser lidos ou editados, ou seja, não podem ser realmente compartilhados. Eles apenas aparecem na lista de diretórios. Isso ocorre porque alguns usuários não pensam ou não sabem como fazer manualmente o ajuste de permissões de grupo necessário para permitir leitura e gravação. Podemos dar um tempo a eles porque os usuários não são administradores, afinal. acls pode ser usado para especificar que um determinado grupo tem acesso aos arquivos no diretório de compartilhamento, independente de quais seriam as permissões do grupo sem acls. Essa é a solução perfeita, mas não está funcionando muito bem.
A seguir, o grupo compartilhado é “customer_gateway” e o usuário de exemplo tentando compartilhar um arquivo é “svw”. Como pode ser visto na transcrição, o usuário svw é um membro do grupo customer_gateway. O diretório onde o compartilhamento deve ocorrer também é chamado de “customer_gateway /”
O seguinte usa acls. Eu defino as permissões de grupo, as permissões de grupo padrão, a máscara e a máscara padrão. Funciona bem para arquivos criados no diretório ou para arquivos movidos para lá via cat (ou tar), mas, estranhamente, não para arquivos que “cp” ed lá:
# rm -r customer_gateway/ # umask 0077 # cat ~/script1 mkdir customer_gateway chown :customer_gateway customer_gateway/ chmod g+rwx customer_gateway/ setfacl -m group:customer_gateway:rwX customer_gateway/ setfacl -m d:group:customer_gateway:rwX customer_gateway/ setfacl -m m::rwX customer_gateway/ setfacl -m d:m::rwX customer_gateway/ getfacl customer_gateway cd customer_gateway touch cga cat << EOF > cgb c g b EOF ls -l # . ~/script1 # file: customer_gateway # owner: root # group: customer_gateway user::rwx group::rwx group:customer_gateway:rwx mask::rwx other::--- default:user::rwx default:group::rwx default:group:customer_gateway:rwx default:mask::rwx default:other::--- total 4 -rw-rw----+ 1 root root 0 Mar 2 20:43 cga -rw-rw----+ 1 root root 6 Mar 2 20:43 cgb # su - svw /home/svw/bin:/usr/local/bin:/usr/bin:/bin (note umask is 0077) > cd /share/customer_gateway/ > groups svw adm dip video plugdev google-sudoers customer_gateway > cat >> cga e f g > cat > cgc c g c > ls -l total 12 -rw-rw----+ 1 root root 6 Mar 2 20:44 cga -rw-rw----+ 1 root root 6 Mar 2 20:43 cgb -rw-rw----+ 1 svw svw 6 Mar 2 20:44 cgc > ls ~/dat ta tb tc > cat ~/dat/ta > ta > cp ~/dat/tb tb > ls -l total 20 -rw-rw----+ 1 root root 6 Mar 2 20:44 cga -rw-rw----+ 1 root root 6 Mar 2 20:43 cgb -rw-rw----+ 1 svw svw 6 Mar 2 20:44 cgc -rw-rw----+ 1 svw svw 4 Mar 2 20:45 ta -rw-------+ 1 svw svw 4 Mar 2 20:45 tb > getfacl ta # file: ta # owner: svw # group: svw user::rw- group::rwx #effective:rw- group:customer_gateway:rwx #effective:rw- mask::rw- other::--- > getfacl tb # file: tb # owner: svw # group: svw user::rw- group::rwx #effective:--- group:customer_gateway:rwx #effective:--- mask::--- other::--- >
O que isso mostra é que quando um arquivo é criado no diretório, ele recebe as permissões padrão e pode ser compartilhado. Mas os usuários nem sempre criam seus arquivos lá, normalmente eles os copiam lá.
Mas fazer uma cópia é a mesma coisa, porque para fazer uma cópia devemos primeiro criar um novo arquivo. Estamos falando de uma cópia simples aqui, não uma cópia de permissões de preservação. É o mesmo que a seguinte forma, que, aliás, funciona e copia um arquivo que poderá ser compartilhado no diretório independente de suas permissões de grupo originais:
cat < data.in > shared/data.out
funciona bem, canalizar através do tar também funciona, mas o formulário
cp data.in shared/data.out
falha. O cat
arquivo ed obtém a máscara padrão e as permissões padrão. O arquivo cp
ed preserva suas permissões na máscara acl e as permissões do grupo, como se fosse a cp -p (mas não era) e, portanto, as permissões efetivas são lidas como o arquivo original, não como as acls foram definidas.
Como uma segunda tentativa, executei este experimento com o group sticky bit, chmod g + rwxs, junto com o facl ch anges e obtiveram exatamente os mesmos resultados. Embora as listas de diretórios sejam mais bonitas devido à propriedade do grupo exibida para todos os arquivos compartilhados. Eu também o executei com apenas o bit sticky de grupo sendo definido, sem o setfacl. Também teve o mesmo resultado para arquivos copiados (então facls parecem bastante inúteis para um diretório onde os arquivos são copiados para serem compartilhados).
Com base e com que justificativa o facls do linux distingue entre diferentes formas de criando dados? Por que forçar o cp a preservar as permissões quando não foi dito para fazer isso? Qual motivo justificaria a confusão causada por esta distinção entre cat e piping through tar funcionando, mas cp não funcionando? Estou perdendo um encantamento mágico que faria essa distinção evaporar?
Este resumo está correto: facls permitirá que você ultrapasse a propriedade para compartilhar arquivos, tornará as permissões mais permissivas do que o umask ao “criar” arquivos, a menos que a criação seja devido ao comando cp e por um bom motivo porque … por quê?
Comentários
Resposta
Este fato de fazer um diretório onde os usuários podem acessar é muito simples e pode ser feito facilmente.
-
Em primeiro lugar, você precisará encontrar um local apropriado para fazer este diretório, recomendo fazê-lo em um diretório que seja acessível para todos (por enquanto). Use o comando sudo mkdir para criar seu novo diretório.
-
Em segundo lugar você precisa fazer um grupo, um grupo é simplesmente uma coleção de usuários que são arredondados para restringir ou acessar certas partes de um sistema Linux. Você deve ter visto grupos ao digitar o comando ls -l que lista algo assim:
rwxrwxrwx 3 administradores root 4736 24 de outubro 12:32 Arquivo1.doc
A parte que diz root é o proprietário e ** admins ** é o grupo que possui o arquivo. Os grupos garantem uma maneira fácil de permitir que certas pessoas vejam os arquivos. Para fazer um grupo, digite “sudo groupadd, este será o grupo usado para o diretório.
- Uma vez que os grupos tenham sido criados, você pode adicionar usuários aos quais deseja acessar o diretório, por usando o seguinte comando sudo adduser Isso permitirá que você adicione usuários, você pode verificar se o usuário está no grupo com o grupo .
Uma vez feito isso, navegue até o diretório que você criou e defina a permissão do grupo para 7 (rwx) lembre-se de que você pode ajustá-los às suas preferências, mas o 7 dá aos usuários do grupo permissões totais ao diretório, você pode fazer isso digitando “sudo chmod 770”
Em seguida, você precisa alterar a propriedade do grupo do diretório, então o proprietário do grupo do diretório é o grupo que você criou, faça isso com com o seguinte comando “sudo chown -R: groupname.
Uma vez que tudo isso tenha sido feito, você pode adicionar quem quiser ao grupo e eles terão acesso para copiar e compartilhar arquivos enquanto th Eles estão naquele grupo específico para acessar o diretório. Informe se você achou isso útil !!!!!!
Comentários
- Obrigado, esclareci a postagem original para explicar por que não ‘ não use esta abordagem manual.
Resposta
I removeria todas as acl “se apenas usaria as permissões de usuário e grupo. Em seguida, chmod 777
a pasta que você deseja que todos tenham acesso. Em seguida, teste seu acesso.
Então chmod 770
a pasta teste o acesso novamente.
Quando isso funcionar, deve-se adicionar as acl de volta uma por vez.
Se eles não precisarem executar perms, você pode reduzi-lo ainda mais para rw *, rx *, *** com chmod 660 foldername
Lembre-se de que, para o período em que você não tem permissões ACL e chmod 777, A pasta estará totalmente aberta a todos, portanto, não a deixe assim.
Comentários
- Nem todos, apenas pessoas em um determinado grupo. Eu poderia definir o bit sticky do grupo no diretório. O problema é que os usuários colocam os arquivos no diretório e o grupo está correto, mas eles não ‘ sabem ou esquecem de definir o acesso do grupo. acls podem ser usados para especificar que um determinado grupo tenha acesso aos arquivos independentemente de suas permissões de grupo. Essa é a resposta perfeita. O problema é que os acls têm uma máscara e cp está limpando a máscara acl para corresponder ao umask do usuário, então as permissões efetivas não permitem que os arquivos sejam lidos.
Resposta
Eu tentei. Parece que o umask está destruindo as permissões do grupo, já que as permissões do grupo são a máscara da ACL. Ele está bloqueando todos os grupos e ACLs.
Uma solução alternativa é tornar o umask menos restritivo.Para fazer isso com segurança, você precisa adicionar um grupo para cada usuário e torná-lo o grupo padrão. (veja Por que cada usuário tem seu próprio grupo? ).
Isso não é o ideal, pois ainda há um caso para diferentes umasks (g = rx e g = rwx). Essa estratégia apenas remove a necessidade de não haver permissões de grupo.
Comentários
- Sim, foi isso que eu fiz. Em vez disso, defini máscaras de usuário para 007 de 077 como uma solução alternativa. Não é ´ perfeito, entretanto, já que muitos arquivos ainda têm menos permissões e são copiados. O que eu esperava aprender aqui era por que o cp está se comportando dessa maneira. Parece-me que este deve ser o comportamento cp -p. Eu esperava que alguém aqui pudesse explicar.
Resposta
Todas as respostas até agora forneceram conselhos sobre como para lidar com o compartilhamento de arquivos por meio de diretórios de grupo. Non respondeu à sua pergunta principal, eu acho, que foi: Por que cp a b
se comporta como se cp -p a b
fosse especificado? A página do manual não fala sobre isso, de fato, mas texinfo tem os detalhes. info coreutils "cp invocation"
mostra:
‘-p’ ‘--preserve[=ATTRIBUTE_LIST]’ Preserve the specified attributes of the original files. ... ... In the absence of this option, the permissions of existing destination files are unchanged. Each new file is created with the <=== mode of the corresponding source file minus the set-user-ID, <=== set-group-ID, and sticky bits as the create mode; the operating system then applies either the umask or a default ACL, possibly resulting in a more restrictive file mode. ...
Portanto, se o destino existe, o conteúdo é substituído, mas os bits de modo são Não mudou. Se o destino não existir, os bits do modo serão copiados da origem.
cat
, talvez por meio de um shellscript dedicado para este propósito?