Eu tenho todos os meus arquivos em uma invasão de servidor e ele tem uma quantidade de espaço razoavelmente excessiva, então não terei que excluir nada com frequência.
Ainda tenho coisas escrevendo para o ataque o tempo todo, então não quero usar o sudo para fazer isso. Mas é possível definir permissões para que a gravação seja permitida, mas a exclusão de arquivos não?
Presumo que isso também exigirá que eu use sudo para comandos mv, mas isso não é um problema
Informação extra:
Raid usa btrfs raid1
O sistema operacional está em uma unidade separada (servidor Ubuntu 14.04)
Responder1
Você precisa de permissões de gravação de diretório para criar ou excluir arquivos. Você precisa de permissões de gravação de arquivo para alterar o arquivo.
Considerando esta árvore:
FolderA: (no write permissions for you)
- FileX (write permissions)
- FileY (write permissions)
Agora você pode alterar FileX e FileY, mas não pode excluí-los. Você também não pode criar um FileZ na PastaA.
Responder2
Eu não acho que seja possível. A criação e exclusão de arquivos no Unix são controladas pela capacidade de gravar no diretório --- basicamente o mesmo sinalizador.
Agora o que você pode fazer é criar dois diretórios --- um com permissão de gravação e outro restrito ao root.
[romano:~/tmp/test] % ls -l
total 8
drwxrwxr-x 2 romano romano 4096 Oct 8 18:06 normal
drwxrwxr-x 2 root root 4096 Oct 8 18:06 onlyroot
Você normalmente trabalha normal
. Suponha que você tenha nele:
[romano:~/tmp/test/normal] % ls
one.txt three.txt two.txt
Você pode excluir arquivos claramente e criar novos; suponha que você queira proteger " one.txt
" contra exclusão. O que você pode fazer é criar um link físico para ele em onlyroot
:
[romano:~/tmp/test/normal] 1 % sudo ln one.txt ../onlyroot
Isso criará outro nome para one.txt
in onlyroot
(usando uma quantidade insignificante de espaço; o arquivo não será copiado). Agora, como usuário normal, você pode excluir one.txt
a normal
pasta, mas terá uma versão intocável abaixo dela onlyroot
.
[romano:~/tmp/test/normal] % ls
one.txt three.txt two.txt
[romano:~/tmp/test/normal] % rm one.txt
rm: remove regular empty file ‘one.txt’? y
[romano:~/tmp/test/normal] % cd ..
[romano:~/tmp/test] % cd onlyroot
[romano:~/tmp/test/onlyroot] % ls
one.txt
[romano:~/tmp/test/onlyroot] % rm one.txt
rm: remove regular empty file ‘one.txt’? y
rm: cannot remove ‘one.txt’: Permission denied
Responder3
No meu entendimento (com base emhttps://btrfs.wiki.kernel.org/index.php/Project_ideas#RichACLs_.2F_NFS4_ACLS), o btrfs suporta apenas permissões Unix tradicionais e ACLs POSIX.1e e, portanto, não pode fazer o que deseja.
Muitos/a maioria dos outros sistemas de arquivos suportam pelo menos um dos richacls do Linux (que eu não acredito que esteja na linha principal ainda), ACLs NFSv4, ACLs ZFS ou ACLs do Windows, todos os quais permitem negar especificamente 'exclusão', mas eu não não imagine que você estaria disposto a desistir dos recursos do btrfs apenas por isso.
Por outro lado, como você pretende especificamente proteger contra erros simples, talvez seja melhor aproveitar as vantagens dos recursos de instantâneo do btrfs usando algo como autosnap.
Responder4
Acho que uma solução seria apenas criar uma função no seu bashrc
, por exemplo:
sudowrapper () {
sudo -k;sudo "$@";sudo -K;
}
vimf() {
echo "pass" | sudowrapper -S nvim "$1"
}
sudowrapper
é necessário fazer sudo
esquecer as credenciais toda vez que vimf
for chamado, caso contrário, ocorrerá um comportamento estranho.
Faça isso apenas se quiser evitar que você mesmo faça algo errado. Se seu objetivo é evitar que outras pessoas façam algo ruim, então escrever sua senha .bashrc
é uma má ideia.