Equivalente ao chmod para alterar as permissões de arquivo no Windows

59

Existe algum equivalente do Windows ao Linux chmodpara alterar as permissões de um arquivo?

nhinkle
fonte

Respostas:

25

Greg menciona attrib - mas attrib não está nem perto chmod- attribpode definir atributos Somente leitura / Oculto de um único arquivo - ele não fornece controles refinados como icaclsfaz.

icaclsdefine / redefine as listas de controle de acesso, para que você possa conceder / negar direitos para SIDs e grupos individuais. É bastante complicado.

Aqui está um exemplo que eu salvei na minha lista do github ; redefine a propriedade e a lista de controle de acesso para todos os arquivos em uma pasta e é particularmente útil para corrigir aqueles irritantes "Você precisa de permissões de .. para executar esta ação", especialmente ao mover arquivos de uma instalação anterior:

icacls * /reset /t /c /q 

Redefinir substitui o existente pela lista padrão.
/tage recursivamente em todos os arquivos, pastas e subpastas
/qnão exibe nenhuma mensagem de sucesso
/ccontinua com os arquivos restantes, mesmo que ocorra um erro.

Você também pode fazer backup de ACLs existentes e aplicá-las a todos. Dê uma olhada no ss64, que explica muito bem as diferentes opções e opções.

Sathyajith Bhat
fonte
O problema é que não posso fazer isso, para cada arquivo existe a mensagem: "Acesso negado". Não há maneira de contornar isso? Em um sistema escolar que bloqueia isso, mas não o cmd?
theonlygusti
Você precisa de privilégios de administrador; o "normal" cmdque você obtém pressionando [Win] + [R] não possui. Para essas necessidades especiais, tenho um atalho "Admin shell", com "Executar como administrador" (ou semelhante; estou em um sistema Windows alemão) marcado (e com uma cor de fundo vermelho escuro).
Tobias
Na verdade, eu enfrento o problema com o erro de permissão negada. Por que diabos eu posso fazer algo se eu sou um administrador e um console que eu corro também é executado como administrador. O que é isso?
camo
13

Ou cacls , xcacls , ou o meu favorito icacls vai provavelmente fazer o que você precisa.

Bryan
fonte
1
Eu acredito que icaclssó está disponível no Vista / 7.
Hello71
9

(Infelizmente) não pode haver um equivalente exato, pois o Linux e o DOS / Windows usam atributos para propósitos diferentes e (como Chathuranga disse antes) o modelo de segurança é diferente:

  • Nos sistemas de arquivos do Windows, existem atributos "hidden" ( H) e "system" ( S) que não têm equivalente no Linux; lá, os arquivos são ocultados acrescentando o nome com um ponto ( .).
  • Também não há equivalente ao Aatributo "archive" ( ) do Windows .
  • Não há equivalente aos xatributos "executáveis" ( ) do Linux nos atributos de arquivo do DOS / Windows.
  • Não é um equivalente ao Windows "diretório" ( D) atributo (mas não pode ser alterado de qualquer maneira).
  • Nos sistemas de arquivos Linux, cada entrada pertence a exatamente um usuário e exatamente um grupo, e a leitura / gravação / execução pode ser permitida para cada um deles e para outros. As ACLs (como usadas pelo Windows) são ainda mais flexíveis, mas também mais complicadas, e a sintaxe da linha de comando é uma PITA (na minha humilde opinião, é claro)

O atributo de arquivo do DOS R(somente leitura) é aquele que pode ser considerado como tendo um equivalente: esse conjunto de atributos é aproximadamente o watributo de todos que estão faltando; mas a permissão para alterar esse atributo está sujeita às ACLs.

Pode ser legal ter um chmod/ chownequivalente no Windows, talvez escrito em alguma linguagem de script, que por sua vez chama attribe cacls(ou sucessores), mas eu não tenho um.

Tobias
fonte
Bom primeiro post!
Slm
Você está confundindo atributos e permissões de arquivo. O Linux possui atributos de arquivo que podem ser alterados via chattr . O Linux possui controle de acesso refinado para atributos (por exemplo, o atributo [i] mmutable pode ser definido apenas pela raiz ou por um CAP_LINUX_IMMUTABLEprocesso), enquanto o acesso aos atributos definidos no Windows é tudo ou nada. É um erro comum nas implementações do chmodWindows usar este comando para definir o atributo de arquivo somente leitura. Infelizmente, os sistemas são tão informados quanto os programadores que os desenvolvem.
Eryk Sun
@eryksun: Interessante - eu não estava ciente desse chattrcomando. Mas você não quis dizer "confundir atributos e permissões de arquivos", certo? AFAICS, todas as palavras que escrevi sobre atributos do DOS ainda estão corretas.
Tobias
Um arquivo consiste em muitos atributos (estendidos). No Unix, o conjunto principal de atributos é armazenado no inode, incluindo o modo de arquivo (permissões). Outros atributos estendidos (por exemplo, ACLs) podem ser armazenados externamente. O Windows não tem equivalente ao atributo "modo" do Unix. Ele também não possui um registro de inode comum para sistemas de arquivos. Um registro NTFS MFT é semelhante. No seu POV, os atributos de arquivo padrão do Windows são um único atributo do registro do arquivo. Eles correspondem aos atributos de arquivo do Linux configurados via chattr, exceto que o Windows possui um atributo de diretório, pois não há inode.
Eryk Sun
A pergunta é sobre um "[e] equivalente ao chmod para alterar as permissões de arquivo no Windows". Não há equivalente direto chmodno Windows porque não há nada como o atributo "mode" do arquivo. O conjunto padrão de atributos de arquivo do Windows não tem nada a ver com isso. O atributo somente leitura não é uma permissão de arquivo. Ele basicamente diz que o arquivo está escrito em pedra, portanto, todas as tentativas de modificá-lo devem falhar. O atributo de arquivo "imutável" do Linux é semelhante. O Windows usa apenas ACLs para permissões, portanto, icacls.exe e similares são os únicos comandos semelhantes no assunto de permissões.
Eryk Sun
6
icacls "C:\folder" /grant:r "Domain\Users":(OI)(CI)M /T /C

Funciona como um encanto para alterar as permissões em uma pasta para usuários do domínio. Informações adicionais sobre caclse icacls.

MDT Guy
fonte
Bom primeiro post! Nunca ouvi falar de icacls.
Slm
5

O attribcomando é a correspondência mais próxima para itens muito básicos (somente leitura, sinalizadores de arquivamento). Depois, há o comando ACL (lista de controle de acesso) cacls. Por último, mas não menos importante, como o Windows é realmente compatível com Posix, os sinalizadores do tipo unix existem. Se você instalar o conjunto de ferramentas Cygwin, receberá um chmod. (Um pouco fora de tópico, já que você está procurando o equivalente a um comando unix, fazer o download e instalar o Cgygwin pode ser algo interessante para você.)

user27570
fonte
2

Não há nada chamado chmod no windows porque o modelo de segurança do Windows é diferente do Linux. Você pode usar o attribcomando para alterar as propriedades dos objetos. (Mas eles são mais direcionados às propriedades globais.)

Chathuranga Chandrasekara
fonte
2

Para mim, a solução alternativa é instalar o Cygwin e adicionar sua pasta bin ao caminho do sistema. Então, se você executar "chmod" na linha de comando, ele funcionará. Embora eu não tenha verificado sua correção.

WHOIF
fonte
1
Referência: simples e detalhada
Bob