nixp.ru v3.0

24 мая 2017,
среда,
01:38:51 MSK

DevOps с компанией «Флант»
Longobard написал 7 января 2005 года в 21:02 (3070 просмотров) Ведет себя как мужчина; открыл 291 тему в форуме, оставил 2499 комментариев на сайте.

Есть такая ситуевина:

bash скрипт, требющий для своей работы root права. Нужно его дернуть из php морды. Морда готова. А вот скрипт выполяется криво — прав ему не хватает явно (например в /etc/shadow писать не может и т.д.). Я поставил на скрипт 777 права и suid бит — все равно не помогло. Че делать ? :)

Genie

тебе опять явно не повезло……

shell скрипты не могут быть suid… даже root-suid…

вот perl скрипты — те могут, почему-то. а вот shell..

ну, security, чтоб её..

Longobard
Genie
тебе опять явно не повезло……

shell скрипты не могут быть suid… даже root-suid…

вот perl скрипты — те могут, почему-то. а вот shell..

ну, security, чтоб её..

бл#! Так че мне делать то! Хорошо, как без suid обойтись?

Ну очччень нужно из пхп скрипта вызвать тот bash скрипт……

Genie

напиши на perl сам скрипт

или обёртку вызова своего шелл скритпа

ну или `sudo script.sh` настрой

Longobard

Фигня война..

Короче сделал так: простенькая оболочка на Си, на которой стоит suid, и она запускает скрипт. А вот лажа в чем:

longobard addhost # ls -l wrapper

-rwsrwsrwx 1 apache apache 12581 Янв 7 23:04 wrapper

т.е. все проставлено как надо. В скрипте направляю выхлоп команды id из скрипта в файл. Вот что вижу:

uid=81(apache) gid=81(apache) groups=81(apache)

и это при том, что скрипт лежит в /sbin, куда всем юзерам кроме рута вход закрыт. Т.е. несмотря на суид бит на оболочке, скрипт все равно запускается от юзера apache!!!!! ШООЗАААНААХХ!!!!

Genie

может ты сделаешь-таки над этим wrapper

# chown root.root wrapper

а? а то иначе как-то даже непонятно, с чего оно у тебя root-suid должно быть.. пока что оно у тебя apache-sugid

Longobard

longobard addhost # ls -l wrapper

-rwsrwsrwx 1 root root 12581 Янв 7 23:04 wrapper

вот выхлоп скрипта:

longobard addhost # cat /tmp/out.wrap

uid=81(apache) gid=81(apache) groups=81(apache)

нифига не помогло. Пытасю понять. с какими правами работают php скрипты.

Genie

мдааа уж…

а ты не uid и gid смотри.

ты euid и egid смотри.

$ mkdir test
$ cd test
$ cat > test.sh
#!/bin/sh
id
$ cat > test.pl
#!/usr/bin/perl
system ("id");
$ cat > test.c
main(void)
{
system("id");
}
$ cc -o test.compiled test.c
$ su
Password:
# chown root.root test.{co*,pl,sh}
# chmod a+x,ug+s test.{co*,pl,sh}
# exit
$ ls -Fl
итого 20
-rw-r--r--    1 genie    genie          29 Янв  8 15:14 test.c
-rwsr-sr-x    1 root     root         4790 Янв  8 15:15 test.compiled*
-rwsr-sr-x    1 root     root           31 Янв  8 15:08 test.pl*
-rwsr-sr-x    1 root     root           13 Янв  8 15:11 test.sh*
$ ./test.sh
uid=1000(genie) gid=1000(genie) группы=1000(genie)
$ ./test.pl
Can't do setuid
$ ./test.compiled
uid=1000(genie) gid=1000(genie) euid=0(root) egid=0(root) группы=1000(genie)
$

странно, что perl-скрипт тоже не смог стать root-suid, вообще-то должен был…. ну да ладно….

Longobard

странная у тебя команда id. У мня она euid и egid не выводит :(

Genie

тогда вот это, и не мучайся:

ну или `sudo script.sh` настрой