Arquivo com permissões --- S - l ---

1

Alguém pode explicar qual é o significado desses atributos: ---S--l--- ?

Quando e por que precisamos definir esse atributo? e para quê?

$ ls -ltr
---S--l---   1 root     root          0 Mar 10 04:25/opt/sm/OP/Tor/kur/ll3/tur_lock
    
por maihabunash 10.03.2015 / 12:31

2 respostas

3

Espero que você esteja familiarizado com a notação básica -rwxrwxrwx . Você provavelmente sabe que set-user-ID recebe -rwsrwxrwx e set-group-ID obtém -rwxrwsrwx . Mas, sem mais esclarecimentos, essas formas são ambíguas. Se você vir -rws------ , você pode assumir que o modo é 04700 (set-user-ID + usuário ler + escrever + executar), mas como você sabe que o bit de execução está ativado quando x não é exibido? A resposta é que o modo 04600 (set-user-ID + usuário lê + escreve, mas sem executar) é mostrado como -rwS------ . Similarmente, 02060 (set-group-ID + grupo read + write, mas sem executar) é mostrado como ---rwS--- .

Agora, a documentação sobre esse l está sendo difícil de encontrar. Por sorte, eu estou aqui há um tempo e sei onde alguns dos corpos estão enterrados. Eu encontrei esta página fcntl (2) que diz,

(Non-POSIX.) … record locks may be either advisory or mandatory, and are advisory by default.  Advisory locks are not enforced and are useful only between cooperating processes.

Mandatory locks are enforced for all processes.  If a process tries to perform an incompatible access (e.g., read(2) or write(2)) on a file region that has an incompatible mandatory lock, then the result depends upon whether the O_NONBLOCK flag is enabled for its open file description.  If the O_NONBLOCK flag is not enabled, then system call is blocked until the lock is removed or converted to a mode that is compatible with the access.  If the O_NONBLOCK flag is enabled, then the system call fails with the error EAGAIN.

To make use of mandatory locks, mandatory locking must be enabled both on the file system that contains the file to be locked, and on the file itself.  Mandatory locking is enabled on a file system using the "-o mand" option to mount(8), or the MS_MANDLOCK flag for mount(2).  Mandatory locking is enabled on a file by disabling group execute permission on the file and enabling the set-group-ID permission bit (see chmod(1) and chmod(2)).

The Linux implementation of mandatory locking is unreliable. See BUGS below.

TL; DR

Em alguns sistemas (n˜ao POSIX?) * nix, ativando o bit do modo set-group-ID enquanto deixa o bit de execução do grupo ativa o bloqueio obrigatório nesse arquivo, se estiver ativado no sistema de arquivos. E assim, os programas ls em alguns desses sistemas mostram um l (em vez de S ) na sétima posição da representação textual do modo para indicar que a l ocking obrigatória está ativada. Então, seu arquivo tur_lock tem o modo 06000.

TL; DR 2

  • Um S na quarta posição indica que o bit de modo set-user-ID (04000) está definido mas o bit de modo de permissão de execução do usuário (proprietário) (00100) está desativado.
  • Um S ou um l na sétima posição indica que o bit do modo set-group-ID (02000) está definido mas o bit de modo de permissão de execução do grupo (00010) está desativado.
  • Se ls exibe um S ou um l na sétima posição (quando o bit do modo set-group-ID é definido, mas o bit do modo de permissão de execução do grupo está desativado) é determinado por regras que não estão claramente documentadas; mas parece que você recebe o l se o seu sistema operacional e sistema de arquivos suporte a bloqueio de arquivo obrigatório. O l indica que o bloqueio de arquivo obrigatório está ativado para este arquivo.

Você pode ver os modos numéricos (ou, pelo menos, os bits de modo que estão sob controle do usuário) para todos os arquivos e outras coisas em uma árvore de diretórios com um comando como

find directory -printf "%.5m %p\n"

find -printf aceita o formato %m para relatar o modo numericamente (em octal). (Use %M para relatar o modo simbolicamente, como ls ). Claro que você pode especificar vários diretórios para find , ou use opções como -mindepth ou -maxdepth , ou testes como -mtime , -name , -iname e / ou -size para restringir a pesquisa. ou modifique o formato -printf .

Você pode ver os modos numéricos para arquivos selecionados com um comando como

stat -c "%a %n" file …

formato do relatório de stat (especificado com -c ou --format ) usa %a para relatar o modo (“direitos de acesso”) numericamente (em octal). (Use %A para relatar o modo simbolicamente, como ls ).

Ambos os itens acima mostram apenas os bits de modo que estão sob controle do usuário. Para ver todos os bits de modo (incluindo aqueles que especificam o tipo de arquivo / inode), use

stat -c "%f %n" file …

Infelizmente, isso é exibido em hexadecimal.

… is there any option to identify files with ‘S’ …?

Você pode encontrar arquivos com S na quarta posição com

find directory -perm -4000 ! -perm -100

que é o mais próximo do inglês que a sintaxe find obtém: encontrar arquivos onde “permissão” (modo) bit 04000 está definido, mas o modo 0100 não está definido.

Da mesma forma, você pode encontrar arquivos com S ou l na sétima posição com

find directory -perm -2000 ! -perm -010 

Encontrar arquivos que atendem a uma das condições acima é um pouco confuso:

find directory "(" "(" -perm -4000 ! -perm -100 ")" -o "(" -perm -2000 ! -perm -010 ")" ")"
    
por 10.03.2015 / 13:41
0

Isso pode ser definido com o comando chattr no linux. O chattr é o comando no sistema operacional Linux que permite que um usuário defina determinados atributos em um arquivo que resida em um sistema de arquivos Linux. Também é chamado como bit imutável. Existem tantos atributos presentes que podem ser aplicados em arquivos no Linux. Na questão acima, S e eu somos alguns dos atributos. Abaixo está a descrição do atributo S e I.

S - as alterações são gravadas de forma síncrona no disco; isso é equivalente à opção de montagem 'sync' aplicada a um subconjunto dos arquivos.

I - é usado pelo código da htree para indicar que um diretório está indexado por trás de árvores com hash.

Para definir um bit imutável para qualquer arquivo, abaixo está a sintaxe. chattr + (atributo) (nome do arquivo) Para remover o bit imutável de qualquer arquivo, abaixo está a sintaxe. chattr - (atributo) (nome do arquivo)

Para verificar qual arquivo tem o atributo definido, use o comando lsattr.

Para mais informações, leia man page of chattr. Todos os atributos e suas características são mencionados na página man.

    
por 10.03.2015 / 13:06