[devel] psec O_NOATIME
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Вт Июн 13 16:52:58 MSD 2006
On Tue, Jun 13, 2006 at 04:13:33PM +0400, Dmitry V. Levin wrote:
> On Tue, Jun 13, 2006 at 02:06:48PM +0400, Alexey Tourbin wrote:
> > Из cron.daily нужно запускать программу на шелле (примерно как osec),
> > при этом желательно выполнять программу от псевдопользователя и
> > сбросить все права, кроме CAP_DAC_READ_SEARCH (которые должны быть как у
> > рута). Как это сделать с помощью libcap-utils?
> >
> > # sucap at at ls
> > Caps: =ep cap_setpcap-ep
>
> Без setpcap с помощью sucap никак не сделать.
В общем написать osec на шелле/перле и завернуть его в qa-robot
оказалось очень просто.
# entry ::= filename mode uid gid arg
# arg ::= md5sum | readlink | "x"
psec()
{
find "$@" -print0 |perl -TMstrict -ln0 /dev/fd/3 3<<'__EOF__'
use File::stat qw(lstat); use Fcntl qw(:mode);
my $st = lstat($_) or die "psec: lstat: $_: $!\n";
my $arg = "x";
if (S_ISREG($st->mode)) {
use Digest::MD5;
our $ctx ||= Digest::MD5->new;
open my $fh, "<", $_ or do {
warn "psec: md5sum: $_: $!\n"; goto end; };
$arg = $ctx->addfile($fh)->hexdigest;
} elsif (S_ISLNK($st->mode)) {
$arg = readlink($_) or do {
warn "psec: readlink: $_: $!\n"; goto end; };
$arg =~ s/[[:cntrl:]]/?/g;
}
end: s/[[:cntrl:]]/?/g;
our (@uid_cache, @gid_cache);
my $uid = $uid_cache[$st->uid] ||= getpwuid($st->uid) || $st->uid;
my $gid = $gid_cache[$st->gid] ||= getgrgid($st->gid) || $st->gid;
printf "%s\t%o\t%s\t%s\t%s\n", $_, $st->mode, $uid, $gid, $arg;
__EOF__
}
$ psec /lib |head
find: /lib/modules: Permission denied
/lib 40755 root root x
/lib/i686 40755 root root x
/lib/i686/tls 40755 root root x
/lib/modules 40700 root root x
/lib/tls 40755 root root x
/lib/ld-linux.so.2 120777 root root ld-2.3.6.so
/lib/libnss1_dns.so.1 120777 root root libnss1_dns-2.3.6.so
/lib/terminfo 40755 root root x
/lib/terminfo/E 40755 root root x
/lib/terminfo/E/Eterm 100644 root root 9ba7faf9f179ae44dc488719ae939ba9
$
Теперь осталось только придумать, как правильно сбросить ему права.
Ещё хотелось бы использовать O_NOATIME, но это требует слишком больших
привилегий (CAP_FOWNER, как я понял из man capabilities).
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 191 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20060613/06db6643/attachment-0001.bin>
Подробная информация о списке рассылки Devel