Acho que a única maneira seria escrever seu próprio wrapper no comando / utilitário em questão e decidir se o que é permitido ou não é permitido com base no (E) UID do usuário que o iniciou. As ferramentas mencionadas que fazem isso, como chsh
ou passwd
, têm essa funcionalidade incorporada em sua implementação.
Como escrever um wrapper para ls
#!/usr/bin/perl
use strict;
use warnings;
my $problematic_uid = 1000; # For example
my $is_problematic = $< == $problematic_uid;
unless(/ -l / ~~ @ARGV or $is_problematic){
exec qq{/new/path/to/ls }.join '',@ARGV
}else{
die "Sorry, you are not allowed to use the -l option to ls\n"
}
Você precisa garantir que o caminho para o ls
original não esteja no PATH
de seu usuário. É por isso que escrevi /new/path/to/ls
. O problema é que este wrapper requer que o usuário possa executar o ls
original para que o usuário ainda possa contorná-lo chamando o original ls
diretamente.