Автор Тема: Стартиране на процес под Линукс чрез уеб форма  (Прочетена 2434 пъти)

fenix94

  • Напреднали
  • *****
  • Публикации: 17
    • Профил
Скрипт за стартиране на процес под линукс, след въвеждане на уеб форма и проверката й дали е вярна.

1. Юзърът попълва уеб форма и въвежда код.
2. Скриптът проверява този код и ако е верен започват следните действия
3. Автоматично се пуска зададеното приложение с параметрите, които са попълнени в уеб частта.(Това трябва да тръгне под Линукс, но не знам как трябва да стане.)
4. Настроено е задачата да върви определено време, след което автоматично да бъде спряна.

Скриптът за проверка на код е ясен. Остават останалите неща. Някакви идеи?
Благодаря за помощта предварително!
Активен

shoshon

  • Напреднали
  • *****
  • Публикации: 497
    • Профил
string system ( string $command [, int &$return_var ] ) Ще свърши работа.

Интересна е часта с спирането след определено време. Най-лесния отговор е: стартираш приложението и след определено време го убиваш по негов pid. Не знам обаче дали pid-овете не могат да се дублират. Или дали няма да напълниш системата с таймери. Добре ще е след като задачата приключи да убие и собствения си таймер. Ето моята имплементация:
Файл start_task.sh
Код
GeSHi (Bash):
  1. time="$1"
  2. shift
  3. command="$@"
  4. command_pid="-1"
  5.  
  6. $command &
  7. command_pid=$!
  8. echo "Started command with pid=$command_pid"
  9. while [ `ps -ef | grep $command_pid | grep -v grep | wc -l` -ne "0" -a $time -gt 0 ] ; do
  10. sleep 1;
  11. time=$(($time-1))
  12. done;
  13.  
  14. if [ `ps -ef | grep $command_pid | grep -v grep | wc -l` -ne 0 ]; then
  15. kill -9 $command_pid
  16. echo "Command \"$command_pid\" has been killed"
  17. fi
  18.  
  19.  
  20.  

chmod +x start_task.sh за да стане файла изпълним и после си знаеш ;)
« Последна редакция: Mar 16, 2011, 01:00 от shoshon »
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
А някой замисля ли се че процеса ще се стартира като потребителя, който е стартирал уеб сървъра?
Активен

0x2B|~0x2B

spec1

  • Напреднали
  • *****
  • Публикации: 230
    • Профил
  А ти замисли ли се за SUID  флага.
  По принцип скрипта ,написан от колегата по-горе е добър,
но трябва да се помисли като какъв потребител се пуска процеса.
  Феникс, виж как точно се пуска уеб сървъра, с какви права и ,
разбира се,внимавай със сигурността ...
  Потърси в мрежата инфо за SUID ...
  Успех !
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
  А ти замисли ли се за SUID  флага.
  По принцип скрипта ,написан от колегата по-горе е добър,
но трябва да се помисли като какъв потребител се пуска процеса.
  Феникс, виж как точно се пуска уеб сървъра, с какви права и ,
разбира се,внимавай със сигурността ...
  Потърси в мрежата инфо за SUID ...
  Успех !
SUID на шел скрипт? Добре......
Активен

0x2B|~0x2B

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
fenix94, какво точно искаш да направиш? Имам известни подозрения, че се оптиваш да решиш проблем по грешен начин.

SUID shell script + аргументи взети от уеб форма звучи страшно... Внимавай!
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
string system ( string $command [, int &$return_var ] ) Ще свърши работа.
+ escapeshellarg

Не знам обаче дали pid-овете не могат да се дублират.
не
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

spec1

  • Напреднали
  • *****
  • Публикации: 230
    • Профил
  Ееее,все пак предупредих човека да внимава.
  Ако скрипта е написан както трябва ,рисковете се
свеждат до минимум.
Активен

Naka

  • Напреднали
  • *****
  • Публикации: 3398
    • Профил
Цитат
Най-лесния отговор е: стартираш приложението и след определено време го убиваш по негов pid

Това и на мен ми идвало до главата, обаче си мисля че не е много правилно да се убива процес по pid? pid-овете се променят динамично. Какво би станало ако междувременно този процес дето си го стартирал умре - а някой друг процес след това се стартира със същият пид- в резултат може да убиеш друг процес.

Незнам обаче какъв е правилният начин???

Използването на escapeshellarg е изключително важно! Този дето попълва формата може да въведе "" или разни други работи и в резултат да излъже скрипта ти да изпълни и друга shell команда.

http://en.wikipedia.org/wiki/Code_injection#Shell_injection

Активен

Perl - the only language that looks the same before and after encryption.

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
fenix94, какво точно искаш да направиш? Имам известни подозрения, че се оптиваш да решиш проблем по грешен начин.

SUID shell script + аргументи взети от уеб форма звучи страшно... Внимавай!
Хора, вие мислите ли понякога? До сега не съм виждал UNIX/Linux да взима под внимание SUID при шел скрипт!

Код:
[otamgr]/home/otamgr>uname -a
Linux vmlinux 2.6.18-92.el5 #1 SMP Tue Apr 29 13:16:12 EDT 2008 i686 i686 i386 GNU/Linux
[otamgr]/home/otamgr>cat a.sh
id
[otamgr]/home/otamgr>./a.sh
uid=34005(otamgr) gid=200(dba) groups=200(dba)
[otamgr]/home/otamgr>chmod 4700 a.sh
[otamgr]/home/otamgr>./a.sh
uid=34005(otamgr) gid=200(dba) groups=200(dba)
Активен

0x2B|~0x2B

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Благодаря за язвителната забележка, Ромео.

Имах предвид по-скоро нещо от сорта на:

Код
GeSHi (Bash):
  1. vladsun@ubuntu:~/test$ iptables -nxvL
  2. iptables v1.4.4: can't initialize iptables table `filter': Permission denied (you must be root)
  3. Perhaps iptables or your kernel needs to be upgraded.
  4. vladsun@ubuntu:~/test$ sudo chmod 4755 `which iptables`
  5. vladsun@ubuntu:~/test$ iptables -nxvL
  6. Chain INPUT (policy ACCEPT 55816 packets, 57580668 bytes)
  7.    pkts      bytes target     prot opt in     out     source               destination        
  8. ....
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Благодаря за язвителната забележка, Ромео.

Имах предвид по-скоро нещо от сорта на:

....
А защо виждам това по-долу?
....
SUID shell script + аргументи взети от уеб форма звучи страшно... Внимавай!
И моля, няма нужда да ми благодарите за информацията
Активен

0x2B|~0x2B

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

ivanatora

  • Напреднали
  • *****
  • Публикации: 658
  • Distribution: Ubuntu 10.04
  • Window Manager: Fluxbox
    • Профил
    • WWW
Не знам обаче дали pid-овете не могат да се дублират.
не

Да се дублират - не, но броячът на PID-овете не е безкраен: cat /proc/sys/kernel/pid_max След като overflow-не брояча - логично започва от начало от нулата като дава свободните за момента номера. Т.е. ако току що е приключил процес с PID 1000 няма гаранция че след време няма да имаш съвсем друг произволен процес с този същия PID.
Активен