2013-12-20 3 views
1

У меня есть сайт, который посылать команды на сервер с помощью SSH2SSH исполняющий создать команду пользователя и отправить команду, если пользователь существует

Im пытаясь выяснить 1 из 2 вещей. либо

A. Установите имя пользователя для зарегистрированного аккаунта, который посылает команду (IN SSH если имя пользователя = существует, то отправить команду еще создать пользователя с именем $, набор привилегий для выполнения команды PERL ONLY, а затем отправить команду)

ИЛИ

B. Установите посланный Perl команды PID до $ имя пользователя

Основная концепция это, я хочу, чтобы иметь возможность убить команду, основанную от процесса ID набора

ИЛИ

зарегистрировать имя пользователя и дайте команду запустить там, так что пользователь может убить команды через этого уникальное имя пользователя, но только позволяет убить Perl и PERL выполнение скрипта на этом имя пользователя.

Пример: Perl $ Имя пользователя script.pl Команда команда2 command3 (Это устанавливает имя пользователя для пользователей, идентификатор процесса) Пример2: убить $ имя пользователя (Это убивает процесс, основанный от этого ID)

P.S. мой сервер, который использует ssh, запускает CentOS 6, если это помогает?

Вот мой текущий сценарий, который я хотел бы изменить:

<?php 
set_time_limit(0); 
ignore_user_abort(true); 

if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist"); 
// log in at url/ip on port 22 
if(!($con = ssh2_connect("************", 22))){ 
echo "fail: unable to establish connection\n"; 
} else { 
// try to authenticate with username, password 
if(!ssh2_auth_password($con, "**********", "***********")) { 
echo "fail: unable to authenticate\n"; 
} else { 

// execute a command 
if (!($stream = ssh2_exec($con, "perl i.pl ".$_GET['command1']." ".$_GET['command2']." ".$_GET['command3']))) { 
echo "fail: unable to execute command\n"; 
} else { 
echo "" . stream_get_contents($stream); 

echo "Commands have been executed successfully!"; 
} 
} 
} 
?> 
+0

Что именно вам нужно делать зрителям? в чем проблема. ? – prime

ответ

1

Вы можете use the id command to check if a given username exists.

Затем вы можете использовать команды useradd для создания нового пользователя. Просмотрите страницу useradd man для различных доступных опций.

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

Вы можете использовать sudo с опцией -u для запуска скрипта в качестве другого пользователя. Пример: sudo -u username ls

Вы можете запустить процесс в фоновом режиме и получить идентификатор процесса с помощью переменной $!. Пример: ls > /dev/null & echo $!. Этот идентификатор процесса можно использовать позже, чтобы убить процесс. Однако будьте осторожны, поскольку идентификатор процесса может быть переработан, вы можете случайно убить неправильный процесс. Выполнение команды kill в качестве того же непривилегированного пользователя, что и сама команда (в отличие от пользователя с более высокими привилегиями), является хорошей идеей, по крайней мере, предотвращать случайное убийство другой команды пользователя.

Все эти шаги ничем не отличаются, выполняются ли они локально или из SSH.

Смежные вопросы