Перейти до

Os Debian Gnu/linux


Рекомендованные сообщения

Проблема сейчас фтп сервером. Установил proftpd. Под фто можно зайти только под свой пользователь. Тот что создавали спец для етого не признаёт.

подними с модом mysql :)

создаешь в mysql базу данных например ftp

CREATE TABLE `groups` (
 `groupname` varchar(30) NOT NULL default '',
 `gid` int(11) NOT NULL default '0',
 `members` varchar(255) default NULL
) TYPE=MyISAM;

CREATE TABLE `users` (
 `username` varchar(30) NOT NULL default '',
 `password` varchar(30) NOT NULL default '',
 `uid` int(11) default NULL,
 `gid` int(11) default NULL,
 `homedir` varchar(255) default NULL,
 `shell` varchar(255) default NULL,
 `count` int(11) NOT NULL default '0',
 UNIQUE KEY `username` (`username`)
) TYPE=MyISAM;

 

далее добавляешь в конфиг профтпд след. настройки

 

<IfModule mod_dso.c>
  LoadModule mod_sql.c
 LoadModule mod_sql_mysql.c
</IfModule>
<Global>
SQLConnectInfo пользователь_БД@localhost БД ПАРОЛЬ
SQLAuthTypes Crypt
SQLUserInfo users username password uid gid homedir NULL
RequireValidShell off
SQLGroupInfo groups groupname gid members
SQLAuthenticate users*
SQLLogFile /var/log/proftpd_sql.log
SQLNamedQuery getcount SELECT "count, username from users where username='%u																			'"
SQLNamedQuery updatecount UPDATE "count=count+1 WHERE username='%u'" users
</Global>

далее добавляешь пользователя либо через пхпадмин либо руцями, либо вот скрипт для добавления:

 

#!/usr/bin/php
<?

/* ********************************************************************************
*******
HELP:
<script_name> list
<script_name> info login
<script_name> add login passwd homedir
<script_name> passwd login newpasswd
<script_name> delete login
********************************************************************************
******* */
if(!isset($_SERVER['argv'])) { die('ftp manager error: can not read arguments from $_SERVER["argv"]'."\n"); }

//////////////////////////
// параметры базы ////////
$mysql_host = 'localhost';
$mysql_database = 'ftp';
$mysql_user = 'ftp';
$mysql_password = 'password';
//////////////////////////

//////////////////////////
// имя ftp-хоста /////////
$ftp_host_name = 'FTP_HOST_NAME';
//////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////
// MAIN //////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////

$_SERVER['argv'][9] = $ftp_host_name;

$mysql = new class_mysql($mysql_host, $mysql_database, $mysql_user, $mysql_password); // класс для работы с mysql
$ftp_account = new class_ftp_account($_SERVER['argv'], &$mysql); // класс для работы с ftp-аккаунтами

//////////////////////////////////////////////////////////////////////////////////////////
// FTP ACCOUNT CLASS /////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////

class class_ftp_account {
	var $MYSQL;
	var $ARGV;

	// конструктор. вызывается при инициализации класса
	function class_ftp_account($argv, &$mysql) {
			$this->MYSQL = $mysql; // получаем ссылку на mysql объект
			$this->ARGV = $argv; // получаем параметры, переданые скрипту

			$this->parce_argv(); // эта функция проверяет параметры, которые были переданы скрипту и вызывает нужные функции из класса
}

	// эта функция проверяет параметры, которые были переданы скрипту и вызывает нужные функции из класса
	function parce_argv() {
			if($this->ARGV[1] == 'list') { // вывести список всех пользователей
					$this->print_all_accounts(); // вывести список всех аккаунтов
					die();
			}
			elseif($this->ARGV[1] == 'info') { // получение информации о пользователе
					if(isset($this->ARGV[2])) {
							$this->check_login($this->ARGV[2]); // проверка логина
							$this->print_account_info($this->ARGV[2]); // вывести информацию по аккаунту
					}
					else { $this->print_help(); }
					die();
			}
			if($this->ARGV[1] == 'add') { // добавление пользователя
					if(isset($this->ARGV[2]) && isset($this->ARGV[3]) && isset($this->ARGV[4])) {
							$this->check_login($this->ARGV[2]); // проверка логина
							$this->check_password($this->ARGV[3]); // пароля
							$this->check_homedir($this->ARGV[4]); // и домашней директории
							$this->add_account($this->ARGV[2], $this->ARGV[3], $this->ARGV[4]); // добавить аккаунт
					}
					else { $this->print_help(); }
					die();
			}
			elseif($this->ARGV[1] == 'passwd') { // поменять пароль для пользователя
					if(isset($this->ARGV[2]) && isset($this->ARGV[3])) {
							$this->check_login($this->ARGV[2]);
							$this->check_password($this->ARGV[3]);
							$this->change_pasword($this->ARGV[2], $this->ARGV[3]); // поменять пароль
					}
					else { $this->print_help(); }
					die();
			}
			elseif($this->ARGV[1] == 'delete') { // удалить пользователя из базы
					if(isset($this->ARGV[2])) {
							$this->check_login($this->ARGV[2]);
							$this->delete_account($this->ARGV[2]); // удалить аккаунт из базы
					}
					else { $this->print_help(); }
					die();
			}
			else { // неизвестная команда, выводим хелп
					$this->print_help();
			}
	}

	///////////////////////////////////////////////////////////////////////////
	// служебные функции //////////////////////////////////////////////////////
	function print_account_info($login) { // вывести информацию по аккаунту
			$this->MYSQL->connect();
			$user = $this->MYSQL->select("SELECT * FROM users WHERE username='".$login."'");
			$this->MYSQL->close();

			if(!isset($user[0]['username'])) { die('ftp manager error: account "'.$login.'" has not been found'."\n"); }

			print "\n".'[ftp-account info for "'.$login.'"]:'."\n";
			print 'currentdate: '.date("Y-m-d H:i:s")."\n";
			if(isset($this->ARGV[9])) { print 'host: '.$this->ARGV[9]."\n"; }
			print 'login: '.$user[0]['username']."\n";
			if(($this->ARGV[1] == 'add') || ($this->ARGV[1] == 'passwd')) { // для только что добавленых пользователей
					print 'password: '.$this->ARGV[3]."\n";
					print 'ftp-link: ftp://'.$user[0]['username'].':'.$this->ARGV[3].'@'.$this->ARGV[9]."\n";
			}
			print 'homedir: '.$user[0]['homedir']."\n";
			print 'uid: '.$user[0]['uid']."\n";
			print 'gid: '.$user[0]['gid']."\n";
			print 'count: '.$user[0]['count']."\n";
			print '[/ftp-account info for "'.$login.'"]'."\n\n";
	}
	///////////////////////////////////////////////////////////////////////////
	function print_all_accounts() { // вывести информацию по всем аккаунтам
			print "\n".'[listing ftp-accounts]:'."\n";

			$this->MYSQL->connect();
			$users = $this->MYSQL->select("SELECT * FROM users");
			foreach($users as $user) {
					print 'login: '.$user['username'].' , uid: '.$user['uid'].' , gid: '.$user['gid'].' , homedir: '.$user['homedir']."\n";
			}
			$this->MYSQL->close();

			print '[/listing ftp-accounts]'."\n\n";
	}
	///////////////////////////////////////////////////////////////////////////
	function add_account($login, $password, $homedir) { // добавить аккаунт
			$uid = $this->create_uid();

			if($this->check_account_existance($login) == TRUE) { die('ftp manager error: account "'.$login.'" already exists'."\n"); }

			$this->MYSQL->connect();
			$this->MYSQL->execute("INSERT INTO users SET username='".$login."',password=ENCRYPT('".$password."'),homedir='".$homedir."',shell='/dev/null',uid='".$uid."',gid='".$uid."'");
			$this->MYSQL->close();

			mkdir($homedir, 0755, TRUE); // system("mkdir -p ".$homedir); // создание папки
			chown($homedir, intval($uid)); // system("chown ".$uid.":".$gid." ".$homedir); // выдача папке прав
			chgrp($homedir, intval($uid));

			print 'ftp manager success: account "'.$login.'" has been added'."\n";
			$this->print_account_info($login);
	}
	///////////////////////////////////////////////////////////////////////////
	function change_pasword($login, $password) { // изменение пароля
			if($this->check_account_existance($login) == FALSE) { die('ftp manager error: account "'.$login.'" does not exists'."\n"); }

			$this->MYSQL->connect();
			$this->MYSQL->execute("UPDATE users SET password=ENCRYPT('".$password."') WHERE username='".$login."'");
			$this->MYSQL->close();

			print 'ftp manager success: password for account "'.$login.'" has been changed'."\n";
			$this->print_account_info($login);
	}
	///////////////////////////////////////////////////////////////////////////
	function delete_account($login) { // удаление аккаунта из базы
			$warning_timeout = 10; // таймаут на предупреждение об удалении в секундах

			if($this->check_account_existance($login) == FALSE) { die('ftp manager error: account "'.$login.'" does not exists'."\n"); }

			$this->print_account_info($login); // вывод информации об аккаунте. в случае ошибки можно будет вовремя остановить удаление

			print 'ftp manager warning: deleting account "'.$login.'" in '.$warning_timeout.' seconds, you can still press ctrl+c ';
			$this->print_dots($warning_timeout);

			$this->MYSQL->connect();
			$user = $this->MYSQL->select("SELECT homedir FROM users WHERE username='".$login."'");
			$this->MYSQL->execute("DELETE FROM users WHERE username='".$login."'");
			$this->MYSQL->close();

			print "\n".'ftp manager success: account "'.$login.'" has been deleted'."\n";
			print 'ftp manager info: now you can manualy run "rm -rf '.$user[0]['homedir'].'" to erase all user files'."\n";
	}
	// служебные функции //////////////////////////////////////////////////////
	///////////////////////////////////////////////////////////////////////////

	///////////////////////////////////////////////////////////////////////////
	// утилиты ////////////////////////////////////////////////////////////////
	function print_dots($seconds) { // печатать по точке в секунду .)
			for($i=0;$i<$seconds;$i++){ sleep(1); print '.'; }
	}
	///////////////////////////////////////////////////////////////////////////
	function check_account_existance($login) { // проверка на существование аккаунта в базе
			$this->MYSQL->connect();
			$user = $this->MYSQL->select("SELECT username FROM users WHERE username='".$login."'");
			if(isset($user[0]['username'])) { return TRUE; } else { return FALSE; }
			$this->MYSQL->close();
	}
	///////////////////////////////////////////////////////////////////////////
	function create_uid() { // придумать uid и gid для нового пользователя
			return mt_rand(10000, 20000);
	}
	///////////////////////////////////////////////////////////////////////////
	function print_help() { // эта функция печатает хелп во всех случаях неправильного ввода параметров
			print 'ftp manager error: wrong parameters'."\n";
			print '<script_name> list'."\n";
			print '<script_name> info login'."\n";
			print '<script_name> add login passwd homedir'."\n";
			print '<script_name> passwd login newpasswd'."\n";
			print '<script_name> delete login'."\n";
			die();
	}
	// утилиты ////////////////////////////////////////////////////////////////
	///////////////////////////////////////////////////////////////////////////

	///////////////////////////////////////////////////////////////////////////
	// функции проверки вводимых параметров ///////////////////////////////////
	function check_login($login) { // проверка логина
			if(!preg_match("/^[0-9a-z\.\-]+$/", $login)) { die('ftp manager error: login can include only "0-9" "a-z" "." "-" symbols'."\n"); }
	}
	///////////////////////////////////////////////////////////////////////////
	function check_password($password) { // проверка пароля
			if(!preg_match("/^[0-9a-zA-Z]+$/", $password)) { die('ftp manager error: password can include only "0-9" "a-z" "A-Z" symbols'."\n"); }
	}
	///////////////////////////////////////////////////////////////////////////
	function check_homedir($homedir) { // и домашней директории
			if(!preg_match("/^\/[0-9a-zA-Z\/\.\-\_]+$/", $homedir)) { die('ftp manager error: homedir can include only "0-9" "a-z" "A-Z" "/" "." "-" "_" symbols'."\n"); }
	}
	// функции проверки вводимых параметров ///////////////////////////////////
	///////////////////////////////////////////////////////////////////////////

}

//////////////////////////////////////////////////////////////////////////////////////////
// MYSQL CLASS ///////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////

class class_mysql {
	// db access
	var $HOST;
	var $DATABASE;
	var $USER;
	var $PASSWD;

	// table_prefix
	var $TABLE_PREFIX = '';

	var $LINK;
	var $QUERY;
	var $ERROR;
	var $RESULT;
	var $NUM_ROWS;

	// constructor
	function class_mysql($host, $database, $user, $password) {
			$this->HOST = $host;
			$this->DATABASE = $database;
			$this->USER = $user;
			$this->PASSWD = $password;

			//$this->connect();
}

	function connect() {
			$this->LINK = mysql_pconnect($this->HOST, $this->USER, $this->PASSWD) or die('ftp manager mysql_error: '.mysql_errno().': '.mysql_error()."\n");
			mysql_select_db($this->DATABASE) or die('ftp manager mysql_error: '.mysql_errno().': '.mysql_error()."\n");
	}

	function close() {
			mysql_close($this->LINK);
	}

	function get_insert_id() {
		return mysql_insert_id($this->LINK);
	}

	function execute($query) {
			$this->QUERY = $query;

			$this->RESULT = mysql_query($this->QUERY, $this->LINK) or die('ftp manager mysql_error: '.mysql_errno().': '.mysql_error()."\n");
			$this->ERROR = mysql_error();
	}

	function select($query) {
			$result = array();

			$this->QUERY = $query;

			$this->RESULT = mysql_query($this->QUERY, $this->LINK) or die('ftp manager mysql_error: '.mysql_errno().': '.mysql_error()."\n");
			$this->ERROR = mysql_error();
			$this->NUM_ROWS = mysql_num_rows($this->RESULT);

			while($row = mysql_fetch_array($this->RESULT)){
			array_push($result, $row);
	}

			return $result;
	}

}
?>

соответственно размещаешь его где-то в системе :) это дело вкуса, далее в консоле /dir_to_script/script_name.php

Ссылка на сообщение
Поделиться на других сайтах
  • Відповіді 53
  • Створено
  • Остання відповідь

Top Posters In This Topic

webmin установил. Обновил. В основном показывает все каталоги и програмы. Утилитка очень интересна. Практичеки показывает полный статус машины.

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

Чем лечится ?

попробуй mount -t ntfs-3g

Ссылка на сообщение
Поделиться на других сайтах

сделано смонтировал. От машинки требуется терпение. Перехожу просто на дебиан. И чем больше копаюсь тем интересней становится. Наверно Поетому о 90% не пользуются етой системой. Трудна в первичных установках. Потом будет намного легче.

Хочу установить linuxdcpp. Фаил скачал. распаковал. При команде apt-get install linudcpp не найдено, что не так делаю?

Ссылка на сообщение
Поделиться на других сайтах
сделано смонтировал. От машинки требуется терпение. Перехожу просто на дебиан. И чем больше копаюсь тем интересней становится. Наверно Поетому о 90% не пользуются етой системой. Трудна в первичных установках. Потом будет намного легче.

Хочу установить linuxdcpp. Фаил скачал. распаковал. При команде apt-get install linudcpp не найдено, что не так делаю?

 

Потому что название пакета надо набирать без ошибок.

 

И сообщение об ошибке надо показывать полностью, а не ваш вольный перевод.

Ссылка на сообщение
Поделиться на других сайтах

/home/linuxdcpp-1.0.2# apt-get install linuxdcpp-1.0.2

Чтение списков пакетов... Готово

Построение дерева зависимостей

Чтение информации о состоянии... Готово

E: Не удалось найти пакет linuxdcpp-1.0.2

root@internov:/home/linuxdcpp-1.0.2#

Ссылка на сообщение
Поделиться на других сайтах
/home/linuxdcpp-1.0.2# apt-get install linuxdcpp-1.0.2

Чтение списков пакетов... Готово

Построение дерева зависимостей

Чтение информации о состоянии... Готово

E: Не удалось найти пакет linuxdcpp-1.0.2

root@internov:/home/linuxdcpp-1.0.2#

 

для начала определись что ты делаешь, а что хочешь сделать.

 

serjio@gimli:~# apt-cache search linuxdcpp
linuxdcpp - Port of the Windows file-sharing program, DC++
linuxdcpp0.691 - Port of the Windows file-sharing program DC++
serjio@gimli:~#

 

а если ставишь *.deb пакеты, то

dpkg -i what_you_need_to_install.deb

 

 

p.s. из-за нежелания читать доки, тема перенесена в детсадик соответствующий раздел

Ссылка на сообщение
Поделиться на других сайтах

доков начитался дофига и везде установку пишет по разному. Тут как находиш один глюк устанавливаеш другой закончил тот переходиш на етот.

Можно было ввести пару строк для полного понимания apt-cache search linuxdcpp. и вот ето *.deb пакеты, то dpkg -i what_you_need_to_install.deb

не все родились с компилированным ядром.

Программа заработала. А еше проше без крутизны консоли можно было и Webmin -ом указать.

Ссылка на сообщение
Поделиться на других сайтах
доков начитался дофига и везде установку пишет по разному. Тут как находиш один глюк устанавливаеш другой закончил тот переходиш на етот.

Можно было ввести пару строк для полного понимания apt-cache search linuxdcpp. и вот ето *.deb пакеты, то dpkg -i what_you_need_to_install.deb

не все родились с компилированным ядром.

Программа заработала. А еше проше без крутизны консоли можно было и Webmin -ом указать.

 

ты хоть сам понял что написал? :)

Ссылка на сообщение
Поделиться на других сайтах

не надоело критиковать ?

Наверное по етому в нете и столько инфы, потому что для одного действия надо понять саму систему как она работает к какими файлами взаимодействует. По сравнению с вин. Где надо просто нажать и функций авомтатом установятся. И еше наверно от таких помошников. Иключаем Gall-а огромный ему респект и уважуха за терпение и понимание.

Ссылка на сообщение
Поделиться на других сайтах
  • 2 weeks later...

ты видел даты и последний мой пост ? Писал же, или трудно доходит. Н...я флудить тут. Умник. Если у тебя нет полезной информаций просто молчи.

Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.


×
×
  • Створити нове...