Автор Тема: sudoers  (Прочетена 2897 пъти)

ivanatora

  • Напреднали
  • *****
  • Публикации: 658
  • Distribution: Ubuntu 10.04
  • Window Manager: Fluxbox
    • Профил
    • WWW
sudoers
« -: Apr 25, 2004, 14:18 »
Целта на занятието е да се направи един скрипт за рестартиране на DHCP клиента (това изисква root), който да се пуска през уеб сървър (php). В rd.php имам:
Примерен код
<?php
exec(rd.sh)
?>

В rd.sh имам:
Примерен код
sudo dhcpcd -k
sleep 5s
sudo dhcpcd

От тук нататък трябва да напиша нещо в /etc/sudoers.. Апашът се пуска с user nobody, така че ръгнах:
Цитат
nobody  localhost=dhcpcd -k, dhcpcd

Направих го с pico, въпреки че във файла пише да се редактира само с visudo.. с vi не мога да работя.
Гледам после PID на процеса (dhcpcd) и пускам http://path/to/rd.php и после пак гледам PID-a. Не се е променил, сиреч DHCP клиента не се е рестартирал? Когато пускам скрипта ръчно (като root без sudo частите) PID на процеса се променя.
Активен

dmvic

  • Напреднали
  • *****
  • Публикации: 46
    • Профил
    • WWW
sudoers
« Отговор #1 -: Apr 25, 2004, 22:29 »
така е защото sudo иска парола за администратор, по-добре да разрешиш на nobody да използва dhcpcd, не знам дали ако просто промениш правата на dhcpcd ще се получи.
Активен

"...don't care what people say, just follow your own way..."

savel

  • Напреднали
  • *****
  • Публикации: 52
    • Профил
sudoers
« Отговор #2 -: Apr 26, 2004, 02:38 »
пробвай с

nobody  localhost= NOPASSWD: dhcpcd -k, dhcpcd
Активен

ivanatora

  • Напреднали
  • *****
  • Публикации: 658
  • Distribution: Ubuntu 10.04
  • Window Manager: Fluxbox
    • Профил
    • WWW
sudoers
« Отговор #3 -: Apr 26, 2004, 09:52 »
Ето какво става като пробвам да пусна dhcpcd като nobody (правата на файла са 755):
$ /sbin/dhcpcd -k
****  /sbin/dhcpcd: not a superuser
Ето какво става като пробвам да пусна rd.sh от конзола като nobody:
Примерен код

$ ./rd.sh
>>> sudoers file: syntax error, line 26 <<<
sudo: parse error in /etc/sudoers near line 26
./rd.sh: line 1: 30676 Broken pipe             sudo dhcpcd -k
>>> sudoers file: syntax error, line 26 <<<
sudo: parse error in /etc/sudoers near line 26

Ето и въпросния файл /etc/sudoers около линия 26:
Цитат


# Samples
# %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom <= линия 26
nobody  localhost = NOPASSWD: dhcpcd -k, dhcpcd



Други идеи?
Активен

  • Гост
sudoers
« Отговор #4 -: Apr 26, 2004, 10:24 »
chmod +x /sbin/dhcpd
samo che taka vseki user shte move da go puska i spira i ne e mnogo secure.
Активен

ivanatora

  • Напреднали
  • *****
  • Публикации: 658
  • Distribution: Ubuntu 10.04
  • Window Manager: Fluxbox
    • Профил
    • WWW
sudoers
« Отговор #5 -: Apr 26, 2004, 10:30 »
Ами аз това ти казвам, че по подразбиране dhcpcd си е rwxr-xr-x, сиреч това +х си го има. Но не може да се стартира като non-root, защото дава:
****  /sbin/dhcpcd: not a superuser
Активен

dafo

  • Напреднали
  • *****
  • Публикации: 293
  • Distribution: Fedora
  • Window Manager: KDE
    • Профил
sudoers
« Отговор #6 -: Apr 26, 2004, 17:10 »
Цитат (ivanatora @ Април 26 2004,09:52)
Цитат

nobody  localhost = NOPASSWD: dhcpcd -k, dhcpcd

Напиши пълния път до dhpcd както и името на машината (hostname команда)
nobody  име_на_машината(пешо,гого,киро)=NOPASSWD: /пълен_път/dhcpcd -k, /пълен_път/dhcpcd
Активен

ivanatora

  • Напреднали
  • *****
  • Публикации: 658
  • Distribution: Ubuntu 10.04
  • Window Manager: Fluxbox
    • Профил
    • WWW
sudoers
« Отговор #7 -: Apr 26, 2004, 17:31 »
Примерен код
$ ./rd.sh

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these two things:

        #1) Respect the privacy of others.
        #2) Think before you type.

Password:

Moje li da stane bez password prompt? Ako towa e edinstwenia nachin kak da podam parolata prez scripta?
Активен

dafo

  • Напреднали
  • *****
  • Публикации: 293
  • Distribution: Fedora
  • Window Manager: KDE
    • Профил
sudoers
« Отговор #8 -: Apr 26, 2004, 18:07 »
Това се появява като стартирам sudo за пръв път, после пита само за парола.
Пробвай в секцията Defaults:nobody !authenticate  ,така би трябвало да не пита за парола,освен ако не си задал PASSWD при изпълнение на команда.
Активен

ivanatora

  • Напреднали
  • *****
  • Публикации: 658
  • Distribution: Ubuntu 10.04
  • Window Manager: Fluxbox
    • Профил
    • WWW
sudoers
« Отговор #9 -: Apr 26, 2004, 22:36 »
Дафо, благодаря ти, стана номера на китайчето '<img'>
Само че открих, че целия ми подход е грешен и за нищо не става '<img'>
По-точно под конзола с nobody пускам файла и DHCPто се рестартира успешно. Но опитвам да го направя през уеб-а (http://path/to/rd.php) и нищо не става - процеса си върви.. грешка в PHP кода ли имам?
Активен

ivanatora

  • Напреднали
  • *****
  • Публикации: 658
  • Distribution: Ubuntu 10.04
  • Window Manager: Fluxbox
    • Профил
    • WWW
sudoers
« Отговор #10 -: Apr 26, 2004, 23:20 »
Дафо, благодаря ти, стана номера на китайчето '<img'>
Само че открих, че целия ми подход е грешен и за нищо не става '<img'>
По-точно под конзола с nobody пускам файла и DHCPто се рестартира успешно. Но опитвам да го направя през уеб-а (http://path/to/rd.php) и нищо не става - процеса си върви.. грешка в PHP кода ли имам?
Активен

ivanatora

  • Напреднали
  • *****
  • Публикации: 658
  • Distribution: Ubuntu 10.04
  • Window Manager: Fluxbox
    • Профил
    • WWW
sudoers
« Отговор #11 -: Apr 26, 2004, 23:26 »
Проблема е решен '<img'>
Ако някой го интересува ето го решението:
- два файла, в отделна директория с owner nobody (казват че просто трябва да има write access до скриптовете, за това просто смених притежателя)
rd.php:
Примерен код

<?php
exec('bash -c "exec nohup setsid ./rd.sh > /dev/null 2>&1 &"');
?>

rd.sh:
Примерен код

sudo /sbin/dhcpcd -k
sleep 5s
sudo /sbin/dhcpcd

rd.sh също така е 755 oт към права.
Коментарите за sudo са нагоре из цялата тема.. няма да се задълбавам тук '<img'>
Какво не правех както трябва.. синтаксиса на функцията exec() ми беше грешен, а пък и попаднах на следния интересен коментар за нея в php.net :
Цитат

In order to execute a command have have it not hang your php script while it runs, the program you run must not output back to php. To do this, redirect both stdout and stderr to /dev/null, then background it.
 
 > /dev/null 2>&1 &
 
 In order to execute a command and have it spawned off as another process that is not dependent on the apache thread to keep running (will not die if somebody cancels the page) run this:
 
 exec('bash -c "exec nohup setsid your_command > /dev/null 2>&1 &"''<img'>;

Дано цялата тая работа свърши работа на някого '<img'>
Активен

Venski

  • Участници
  • ***
  • Публикации: 4
    • Профил
sudoers
« Отговор #12 -: May 31, 2004, 04:16 »
хмм. видях тази тема и се сетих за нещо, което много ми е трябвало на няколко пъти. от време на време ми умира sshd-то на една машина, до която нямам пряк достъп. реших да пробвам по начина описан по-горе, за да не се налага да будя в 01:50 човека в чиито апартамент се намира машината.

огледах какво сте писали, и наистина след настройките в sudoers user-а nobody може да изпълнява това което ми трябва
Примерен код
nobody router=NOPASSWD: /etc/rc.d/rc.sshd restart

нраправих и въпросния script, който трябва да се извиква от .php файла, който е просто
Примерен код
sudo /etc/rc.d/rc.sshd restart

и конзолно всичко върви като по вода, само че когато се опитам да го стартирам чрез .php-то нищо не се случва. .php файла изглежда точно като примера даден от ivanatora, който той казва че работи (копиран е от там).

само че ... не върви. можете ли да дадете някакви предположения?
Активен

ivanatora

  • Напреднали
  • *****
  • Публикации: 658
  • Distribution: Ubuntu 10.04
  • Window Manager: Fluxbox
    • Профил
    • WWW
sudoers
« Отговор #13 -: May 31, 2004, 10:28 »
Цитат (Venski @ Май 31 2004,04:16)
нраправих и въпросния script, който трябва да се извиква от .php файла, който е просто
Примерен код
sudo /etc/rc.d/rc.sshd restart

При мен файла не е само това. Разгледай по-добре примера с цитата от php.net. Погледни си и правата на директорията също така. За да се изпълни скрипта трябва потребителят с който се пуска апача да има +w достъп.
Активен

Venski

  • Участници
  • ***
  • Публикации: 4
    • Профил
sudoers
« Отговор #14 -: May 31, 2004, 11:07 »
добре де. явно съм се изразил неправилно. файловете са:

rd.sh
Примерен код

sudo /etc/rc.d/rc.sshd restart

това е файла, който .php-то exec-ва.

ssh_restart.php
Примерен код

<?php
exec('bash -c "exec nohup setsid ./rd.sh > /dev/null 2>&1 &"');
?>

а това е самото .php

не виждам кой знае какви разлики, освен че ти искаш script-а да ти изпълни 2 команди, а при мене е само 1.

btw не разбирам за какво му е на user nobody да има +w в директорията в която е script-а (нали за нея казваш)? и трябва ли да има +w по целия път до там или само в нея?

сложих му +w на директорията, в която е script-а, но пак не се получи. (т.е. директорията съм я сложил като owned от група nobody и моят user. правата на директорията сега са 775. мисля че това му стига, или не?)
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
/etc/sudoers
Хардуерни и софтуерни проблеми
yasnv 8 1849 Последна публикация Mar 16, 2006, 10:07
от phantomlord
Проблем със Sudoers
Настройка на програми
BlackPearl 4 682 Последна публикация May 21, 2012, 16:39
от dejuren