[color=blue]
4. امن کردن HTTP[/color]
یک موردی که معمولاً برای یک توسعه دهنده سیستم که به امنیت سیستم هاش اهمیت میده آزاردهنده هست، صفحه اولیه کاملاً تابلو الستیکس (یا سایر UCS ها مثل استریسک، TrixBox، [color=blue][size=8pt]*1[/size][/color]PiaF و ...) هست که برای همه تنها با دونستن IP سرور قابل دسترس هست و با یک نگاه میشه به ماهیت سرور پی برد، البته میشه با دستکاری فایلهای tpl درون themes یه مقداری سفارشی کرد ولی بازم واسه همه همین صفحه نشون داده میشه، چه خودی، چه نخودی و چه بیخودی؛ یعنی هرکسی کافیه IP رو تایپ کنه و یک اینتر : دروازه ورودی ما بروش باز میشه و فقط باید دنبال کلید باشه یا از دیوار بپره تو و ...
کاری که میخواهیم بکنیم اینه که لیستی از کاربران رو در MySQL تعریف کرده و از طریق نصب یک ماژول mod_auth_mysql اجازه دسترسی کاربران ناخواسته (همون نخودی/بیخودی ها یا hacker ها) رو به رابط وب قطع کنیم. برای اینکار مراحل زیر رو به ترتیب پیش میریم :
[left]yum install mod_auth_mysql[/left]
یه سوال [y/N] می پرسه که طبیعتاً باید y بزنید، با اینکار ماژول موردنظر ما در محل مناسب نصب میشه. حالا لازمه فابل پیکربندیش رو دستکاری کنیم؛ این فایل در مسیر /etc/httpd/conf.d و بنام auth_mysql.conf هست؛ فایل رو با ادیتور دلخواهتون باز کرده و بصورت زیر (یا چیزی مشابه این متناسب با نیازتون[color=blue][size=8pt]*2[/size][/color]) تغییر بدین :
[left]
LoadModule mysql_auth_module modules/mod_auth_mysql.so
<Directory /var/www/html>
AuthName "Authentication Required"
AuthType Basic
AuthMYSQLEnable on
AuthMySQLUser root
AuthMySQLPassword passw0rd
AuthMySQLDB userauth
AuthMySQLUserTable users
AuthMySQLNameField user_name
AuthMySQLPasswordField user_passwd
AuthMySQLGroupTable groups
AuthMySQLGroupField user_group
require group user
require valid-user
</Directory>
<Directory /var/www/html/admin>
AuthName "Authentication Required"
AuthType Basic
AuthMYSQLEnable on
AuthMySQLUser root
AuthMySQLPassword passw0rd
AuthMySQLDB userauth
AuthMySQLUserTable users
AuthMySQLNameField user_name
AuthMySQLPasswordField user_passwd
AuthMySQLGroupTable groups
AuthMySQLGroupField user_group
require group admin
</Directory>
[/left]
حالا باید پایگاه داده خودمون رو درست کنیم، مثلاً اسمش رو میذاریم userauth، بصورت زیر (البته ازتون پسورد میخواد که باید وارد کنید):
[left]mysqladmin -uroot -p create userauth[/left]
حالا برای اینکه جداول و schema پایگاه خودمون رو باید درست کنیم، سطرهای زیر رو در یک فایل به نام userauth.schema.sql ذخیره کنید و یا اینکه خودتون اگه واردین، جداول ذکر شده زیر رو با phpmyadmin ایجاد کنید :
[left]
-- MySQL dump 10.10
--
-- Host: localhost Database: userauth
-- ------------------------------------------------------
-- Server version5.0.22
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Current Database: `userauth`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `userauth` /*!40100 DEFAULT CHARACTER SET
latin1 */;
USE `userauth`;
--
-- Table structure for table `groups`
--
DROP TABLE IF EXISTS `groups`;
CREATE TABLE `groups` (
`user_name` char(30) NOT NULL,
`user_group` char(20) NOT NULL,
PRIMARY KEY (`user_name`,`user_group`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Table structure for table `users`
--
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`user_name` char(30) NOT NULL,
`user_passwd` char(20) NOT NULL,
`extension` int(10) NOT NULL,
`email` char(50) NOT NULL,
PRIMARY KEY (`user_name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
[/left]
حالا باید این فایل schema رو در پایگاهمون import کنیم :
[left]mysql -uroot -p userauth < userauth.schema.sql[/left]
الان دیگه همه چی آماده هست و فقط باید کاربران رو در جدول وارد کنیم، 1000 تا راه راحت واسه اینکار هست که توسط رابط هایی که به MySQL زده میشه یا phpmyadmin و ... میتونیم اطلاعاتمون رو وارد کنیم. ولی به فرض که شما هیچکدوم رو در اختیار نداشته باشید؛ در اینحالت مثلاً برای 2 تا کاربر با سطوح مختلف باید دستورات زیر رو وارد کنید:
[left]mysql -uroot -p
mysql> use userauth;
INSERT INTO `userauth`.`users` (`user_name` ,`user_passwd` ,`extension` ,`email`) VALUES ('admintest', ENCRYPT('letmein1'

,'','' );
INSERT INTO `userauth`.`users` (`user_name` ,`user_passwd` ,`extension` ,`email`) VALUES ('user1', ENCRYPT('letmein2'

,'','' );
INSERT INTO `groups` VALUES ('admintest','user'

,('admintest','admin'

,('user1','user'

mysql> exit[/left]
با دستورات بالا ما دوتا کاربر admintest و user1 رو اضافه کردیم که اولی در هر دو گروه admin و user هست و دومی فقط user. البته حواستون باشه که اگه Copy/Paste میکنید، فقط بعد ; ها اینتر هست و اینجا جا نبوده که یه خط اومده پایین.
باید فایل /etc/httpd/conf/httpd.conf رو هم ویرایش کرده و خط زیر رو کامنت کنیم (یعنی یک # اولش بذاریم):
[left]# Include conf.d/*.conf[/left]
حالا وقتشه که امتحان کنیم ببینیم راه حل ما کار میکنه یا نه؟ ضمناً نگران هم نباشید؛ اگه مشکلی ایجاد شد، کافیه اون سطری که الان در فایل /etc/httpd/conf/httpd.conf کامنت کردیم # اش رو بردایم و /etc/httpd/conf.d/auth_mysql.conf رو ببریم یه جای دیگه بذاریم ...
خوب برای تست مراحل کافیه سرویس httpd رو ریستارت کنیم، یعنی service httpd restart ؛ در نهایت در صفحه وب باید با زدن IP خالی صفحه پیش فرض باز نشه و هر کاربری باید نام خودش رو در URL وارد کرده و صفحه موردنظر رو ببینه.
======================================
[color=blue][size=8pt]*1- [/size][/color] [color=navy][size=8pt]یک سرویس دهنده VoIP یا بقول خودشون PBX in Flash که برای اطلاعات بیشتر می تونید به [url]
http://pbxinaflash.net[/url] مراجعه کنید. فکرکنم به یاد خواننده توانای فرانسوی Edit Piaf : [url]
http://delzendeha.blogfa.com/post-69.aspx[/url] به این نام برازنده شده ...[/size][/color]
[color=blue][size=8pt]*2- [/size][/color] [color=navy][size=8pt]متناسب با نیازتون یعنی اینکه پسوردها رو همون هایی بذارید که تغییر دادید و نام جدول و فیلدهایی که تو MySQL برای این کار درست کردید و در ضمن من فقط برای صفحه اول خود الستیکس این کار رو کردم که شما اگر a2billing یا mail و ... دارید برای همونها هم عین همین قضیه صادق هست و می تونید (به نظر من باید) این روال رو دنبال کنید ...
[/size][/color]