Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Запуск системной команды из-под PHP как суперюзер  (Прочитано 8006 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Bosco

  • Автор темы
  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
Имеется проблема. Нужно запустить команду вида:

system('gnome-terminal -e "openvpn --config /etc/openvpn/config --auth-user-pass /etc/openvpn/somepass --auth-retry nointeract"');

Если запустить отдельно из терминала ту часть, которая заключена в двойные кавычки, то команда запускается, но вываливается с сообщением "Cannot ioctl TUNSETIFF tap: Operation not permitted (errno=1)". Та же посылка, но под sudo, после запроса пароля, разумеется, выполняется до конца.

Соответственно, выполнение полной строки в сценарии приводит к прекращению исполнения команды. Попытка вставить sudo перед openvpn в строку приводит к тому, что в окне терминала появляется запрос пароля, но этого окна не видно с клиентской машины!

Можно ли каким-либо способом авторизоваться как суперюзер, либо передавать пароль окну терминала? :-\

Оффлайн kastigar

  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
Могу предложить такой вариант.
В sudoers нужно прописать выполнение этой команды без запроса пароля.
Например:
www ALL=(root) NOPASSWD: openvpn --config /etc/openvpn/config --auth-user-pass /etc/openvpn/somepass --auth-retry nointeract
или
%www ALL=(root) NOPASSWD: openvpn --config /etc/openvpn/config --auth-user-pass /etc/openvpn/somepass --auth-retry nointeract
Первый случай разрешит пользователю www выполнить команду через sudo без запроса пароля. Второй всем пользователям из группы www.

Добавить эти правила можно через visudo.

Оффлайн S.Tokarev

  • Активист
  • *
  • Сообщений: 415
    • Просмотр профиля
Я немного не понял задачи.
Если задача из некоторой программы стартовать openvpn, то зачем терминал гнома ?
Почему программу которая делает system(..) не запускать из под рута сразу?
Уже не говоря о том, что перед system можно попробовать сделать setuid(0)

Оффлайн Bosco

  • Автор темы
  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
Сразу запускать не нужно по многим причинам. Если сразу, то и интерфейс управления не нужен тогда.  А терминал гнома нужен просто, чтобы было видно, что происходит, если войти, например, через VNC.

А речь идёт о дистанционном управлении шлюзом.

Я ещё не попробовал все советы, руки не дошли... А насчёт setuid(0) - это, действительно, нужно попробовать.

Оффлайн S.Tokarev

  • Активист
  • *
  • Сообщений: 415
    • Просмотр профиля
Запусти на шлюзе sshd подключайся и управляй.

Оффлайн Bosco

  • Автор темы
  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
Ну при чем тут SSH?

Это же просто протокол шифрования, а не я зык программирования...

Оффлайн S.Tokarev

  • Активист
  • *
  • Сообщений: 415
    • Просмотр профиля
Во-первых SSH не протокол шифрования.
Во-вторых
Цитировать
А речь идёт о дистанционном управлении шлюзом.
-  вот и управляй через ssh.

Оффлайн Bosco

  • Автор темы
  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
Во-первых SSH не протокол шифрования.

Ну в-а-а-а-щ-е-е-е...

Родерик Смит "Сетевые средства LINUX" (стр. 310): "Из протоколов, обеспечивающих защиту передаваемых данных, среди пользователей Linux наиболее популярен SSH...".

Wikipedia: "SSH (англ. Secure Shell — «безопасная оболочка»[1]) — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и передачу файлов. Сходен по функциональности с протоколами Telnet и rlogin, но, в отличие от них, шифрует весь трафик, включая и передаваемые пароли."

Это во-первых.
 
Во-вторых, если нечего сказать по существу, то зачем писать?
В-третьих, управлять нужно не мне, а человеку абсолютно не знакомому с SSH и, который и не должен лезть в эти материи во избежание... :coolsmiley:

Оффлайн 12d3

  • Активист
  • *
  • Сообщений: 674
  • Ubuntu 10.04
    • Просмотр профиля
что-то я не понял, а каким образом вы хотите дистанционно управлять шлюзом, если не по ssh.
З.Ы. ssh - не протокол шифрования. это протокол передачи данных. а алгоритмы шифрования в нем - всякие RSA и ему подобные.

Оффлайн S.Tokarev

  • Активист
  • *
  • Сообщений: 415
    • Просмотр профиля
Можно попробовать примерно так:
0) создать группу openvpn в файле /etc/group
1) пользователя запускающего openvpn включить в группу openvpn в том же файле
1*) строка в файле /etc/group будет примерно такой
openvpn:x:99:user
2) sudo chown root:openvpn /dev/net/tun
3) sudo chmod 660 /dev/net/tun

Но в общем чел хочет чтобы всё через зад.
На шлюзе гном и ставить-то не надо. Что происходит видно прекрасно при помощи комманды ps или других.
А если "управляющий" "не должен лезть в эти материи", то это пять баллов.

Оффлайн Bosco

  • Автор темы
  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
Последний совет оказался удачнее предыдущего. Openvpn идет почти до самого конца, но в конце срывается с непонятным сообщением про ioctl.

Однако!

Есть такая штука, она видна в MC под названием "прив. UID при выполнении". Поставил там флажок и, о чудо, все пошло! Аналогично пролема решилась и для других приложений.

А что за зверь UID?

Спасибо всем, кто принял участие в обсуждении!

Оффлайн kastigar

  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
> "прив. UID при выполнении"

это не иначе как setuid ( set user ID) флаг, который позволяет выполнять приложение от имени владельца а не от имени родительского процесса.
man chmod, google и wikipedia раскажут подробнее

Оффлайн Bosco

  • Автор темы
  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
Так что же получается, что приложение можно вот так, запросто, запускать от имени root? И обойти все запреты?

Ошибки нет? Может, наоборот, от имени пользователя, которому приданы определенные права?

Оффлайн kastigar

  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
Ну как сказать просто. SUID флаг может поставить только владелец файла или root. Можешь взглянуть в папку /bin. Там достаточно много приложений, которые просто необходимо пускать из-под рута, например ping. Или самый хороший пример passwd, он меняет файл /etc/shadow. Если бы passwd пускался от имени пользователя, ты б никогда не изменил свой пароль.
Но с другой стороны да, в некоторых таких утилитах находили дыры и с помощью них получали рутовый шелл.

Оффлайн Bosco

  • Автор темы
  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
Ну да, ну да, флажок-то  я ставил из-под root'а...

Странно, что эта тонкость не описана в литературе по Linux. Впрочем, большая часть литературы по Linux страдает поверхностностью или неполнотой описаний, как минимум.

 

Страница сгенерирована за 0.05 секунд. Запросов: 26.