Mod_ruid2 ตัดปัญหาน่าเบื่อ share hosting ใน DA

เคยมั้ยครับ เหตุการณ์แบบนี้

  • พี่ครับ chmod 777 คืออะไร ทำไมผมอัพไฟล์ไม่ได้
  • ทำไมไอ้ directory นั้นมันถูกสร้างโดย apache ผมอยากให้เป็นชื่อผมได้มั้ย

mod_ruid เป็นการการจาย PAM เข้าไปถึงระดับ httpd โดย httpd จะรันใน User นั้นๆ ไม่ใช่ User apache อีกแล้ว
ข้อดีอีกอย่าง คือ เวลา top จะเห็นได้ว่า user ไหนโหลดหนักด้วย แต่หลักๆ แล้วมันถูก design มาเพื่อแก้ปัญหาสองข้อด้านบนมากกว่า
(ปล. สองบรรทัดด้านผมมั่วนะ :026: )

[B]คำเตือน นี่เป็นการยุ่งกับระบบ กรุณาแบคอัพทุกอย่างก่อนลงมือทำทุกครั้ง และเจ้าของบทความ
ไม่ขอรับผิดชอบใดๆในกรณีที่คุณเอาไปทำตามแล้วผิดชั้นตอนหรือมีปัญหาทำให้ระบบพังนะครับ[/B]

วิธีการ ทีละบรรทัดนะครับ ใจเย็นๆ
yum -y install libcap-devel

cd /root

wget -O mod_ruid2-0.9.7.tar.bz2 “http://downloads.sourceforge.net/project/mod-ruid/mod_ruid2/mod_ruid2-0.9.7.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fmod-ruid%2Ffiles%2Fmod_ruid2%2Fmod_ruid2-0.9.7.tar.bz2%2Fdownload%3Fuse_mirror%3Djaist&ts=1352883561&use_mirror=jaist

tar xjf mod_ruid2-0.9.7.tar.bz2

cd mod_ruid2-0.9.7

apxs -a -i -l cap -c mod_ruid2.c

ทีนี้ เราลองเช็คดูครับว่า httpd โหลดมอดูลเข้าไปแล้วหรือยัง ด้วยคำสั่ง
grep ‘mod_ruid2’ /etc/httpd/conf/httpd.conf
ถ้าใช้ได้
จะเจอประมาณนี้เป้น output ครับ
LoadModule ruid2_module /usr/lib/apache/mod_ruid2.so

ทีนี้เราต้องมาแก้ DA Config กันหน่อย เพื่อเป็นการเปิด ruid ให้กับ user ทุกคนในระบบ

ทีละบรรทัดนะครับ ใจเย็นๆ

cd /usr/local/directadmin/data/templates/

cp virtual_host2* custom/

chown -R diradmin:diradmin custom/

[FONT=arial]cd /usr/local/directadmin/data/templates/custom/[/FONT]แล้วทีนี้ ด้านในคุณจะเจอไฟล์ประมาณนี้ครับ
virtual_host2.conf virtual_host2_secure.conf virtual_host2_secure_sub.conf virtual_host2_sub.conf

ให้เปิดทีละไฟล์ แล้วแก้แถวๆตรง

    <IfModule !mod_ruid2.c>

ให้เป็นคล้ายๆด้านล่างครับ
<IfModule !mod_ruid2.c>
SuexecUserGroup |USER| |GROUP|
</IfModule>
<IfModule mod_ruid2.c>
RMode config
RUidGid |USER| |GROUP|
RGroups apache
</IfModule>

เสร็จแล้วรัน
echo “action=rewrite&value=httpd” >> /usr/local/directadmin/data/task.queue
แล้วรัน
/usr/local/directadmin/dataskq d800
แล้วรัน
chown -R webapps:webapps /var/www/html
เพื่อให้ เมลกระรอก,roundcube และ phpmyadmin ใช้งานได้
และแก้ไข httpd config นิดหน่อยครับ

เปิดไฟล์[U] /etc/httpd/httpd.conf[/U] แล้วเพิ่มตัวหนาลงไปในคอนฟิคส่วนนี้ครับ

(ถ้าไม่เจอ จะอยู่ใน /etc/httpd/conf/extra/httpd-directories.conf)

<Directory “/var/www/html”>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
<IfModule mod_suphp.c>
suPHP_Engine On
suPHP_UserGroup webapps webapps
</IfModule>
[B]RUidGid webapps webapps[/B]
</Directory>

แล้ว RESTART HTTPD หนึ่งที เป็นอันเสร็จพิธี [B]ทีนี้ลองสร้าง user ขึ้นมาเทสครับ ลงพวก CMS อะไรก็ได้ที่ require 777 chmod มันจะไม่ require อีกต่อไปแล้ว[/B]

ทีนี้ในระบบเก่าคุณอาจจะมี user ที่มีไฟล์เป้น owner apache อยู่ มันอาจจะมีปัญหา ให้แก้ด้วยสคริปตามบรรทัดด้านล่างได้เลยครับ
สคริปต์จะเข้าไปเช็ค permission และแก้ไขทั้งหมดให้เป็น permission ของ user ไม่ world-readable อีกต่อไป
**** ก่อนรันคุณต้องมั่นใจว่าทำตัวหนาด้านบนผ่านแล้วนะครับ ไม่งั้นละก็ คุณรับโทรศัพท์สนุกแน่ครับ ****

cd /usr/local/directadmin/scripts && ./set_permissions.sh user_homes
find /home//domains//public_html -type d -print0 | xargs -0 chmod 711
find /home//domains//public_html -type f -print0 | xargs -0 chmod 644
find /home//domains//public_html -type f -name ‘.cgi’ -exec chmod 755 {} ;
find /home//domains//public_html -type f -name ‘.pl’ -exec chmod 755 {} ;
find /home//domains//public_html -type f -name ‘.pm’ -exec chmod 755 {} ;
cd /usr/local/directadmin/data/users && for i in ls; do { chown -R $i:$i /home/$i/domains/*/public_html;}; done;

หมายเหตุ : กรุณาใช้ version 0.9.7 นะครับ
เพราะ 0.9.6 มี memory leak แบบสนุกสนานเลยทีเดียวเชียวล่ะ

ไหน ๆ ก็ว่ากันด้วยเรื่องนี้แล้ว อยากทราบว่าใครเคียบเทียบ mod_ruid2 กับ mod_fastgi ว่าแบบไหนให้ประสิทธิภาพ และ security ที่ดีกว่ากัน. มาแชร์กันหน่อยครับ

mod ruid2 เร็วกว่าพอใช้ได้ครับ และรายละเอียดปลีกย่อยน้อยกว่า DA พยายาม support อยู่ตั้งแต่แรกแล้วด้วย

ผมใช้มาได้ซักพัก ตัดปัญหาเรื่อง chmod777 แสนน่าเบื่อไปได้เลย

ส่วนตัว swap จาก fcgi มาเป็น ruid2 ซักพัก รุ้สึกได้นิดๆว่า mod_ruid2 เร็วกว่าเยอะครับ (พอดีเทสที่ inter server มันเลยเห็นความต่างชัดหน่อย)

ปักหมุดเลยคร้าบ

ไหนๆจะลอง mod_ruid2 แล้ว ก็ลอง Custombuild 2 ของ DA ไปเลยน่าจะดีกว่านะครับ เพราะมีปัญหาก็สอบถามทาง DA ได้โดยตรงเลยด้วย

ขอบคุณมากครับ ไว้จะลองสักหน่อย

ถ้าติดตั้งผ่าน custombuild 2.0 ก็ไม่ต้องแก้เรื่อง template แล้วใช่มั้ยครับเนี่ย

อยากรู้ด้วยคนครับ

Custombuild 2.0 นี่พร้อมใช้งานเลยครับ ไม่ต้องไปยุ่งอะไรกับ template แล้ว ถ้าจะมีปัญหา ก็จะเป็นเรื่องของความผิดพลาดของทาง DA เอง ซึ่งถ้าแจ้งเข้าไป ทางเขาก็จะดูแลแก้ไขให้อยู่แล้ว แต่ตอนนี้ ทางเขากำหนดว่าจะใช้ได้กับ Apache 2.4 เท่านั้นนะครับ ไม่มีแผนจะทำให้ใช้ได้กับ 2.2

อย่าลืมอัพเดทเป็น DirectAdmin 1.42 ก่อนนะครับ เพราะ Template จะมาพร้อมกับตัว DA ครับ

custombuild 2.0 รองรับ apache 2.4 และ php 5.3 5.4 เท่านั้นครับ
ถ้าใครที่ยังใช้ apache 2.2 กับ php 5.2 อยู่ ก็คงต้องใช้ custombuild 1.1 หรือ 1.2 ครับ

สำหรับ custombuild 1.1 กับ 1.2 นั้น ถึงตัว build จะไม่มี build ruid2 มาให้ แต่ก็สามารถใช้ mod_ruid2 ได้ไม่ยาก
เพราะจริงๆแล้ว virtual_host2 template ล่าสุดที่มากับ da (ไม่เกี่ยวว่าใช้ custombuild เวอร์ชั่นใหน) รองรับ ruid2 อยู่แล้ว
แค่ update เวอร์ชั่น directadmin ตัว template ก็ update รองรับ ruid2 ให้แล้ว ไม่ต้องไปแก้เอง (ไม่แน่ใจว่ามีมาตั้งแต่เวอร์ชั่นใหน แต่ที่เช็คดู 1.40.3 ก็มีแล้ว)
ที่ต้องทำก็แค่ download mod_ruid2 มา compile แค่นั้นเอง

  1. Install libcap-devel
    yum -y install libcap-devel

  2. install mod_ruid2
    cd /usr/local/directadmin/custombuild
    wget http://files.directadmin.com/services/custombuild/mod_ruid2-0.9.7.tar.bz2
    tar xjf mod_ruid2-0.9.7.tar.bz2
    cd mod_ruid2-0.9.7
    apxs -l cap -cia mod_ruid2.c

  3. เช็คว่าใน virtual_host template มี ruid2
    grep -i ruid /usr/local/directadmin/data/templates/virtual_host2.conf
    ถ้าขึ้นประมาณนี้ก็แปลว่า template รองรับแล้ว ไม่ต้องไปแก้ไขอะไร (แต่ถ้าเคยไปทำ custom ไว้ใน folder custom ก็ต้องไปเช็คเอาว่าที่เคย custom ไว้มันมีหรือเปล่า)
    <IfModule !mod_ruid2.c>
    <IfModule mod_ruid2.c>
    RUidGid |USER| |GROUP|

  4. สำหรับ /var/www/html จะแก้ให้ใช้ ruid ทำงานเป็น webapp หรือไม่แก้ก็ได้ปล่อยให้ run เป็น apache ไปตามเดิม เพราะมีแค่ webmail ไม่ได้ไปวุ่นวายกับ user
    ถ้าจะแก้ก็แก้ไขไฟล์ /etc/httpd/conf/extra/httpd-directories.conf
    แล้วเพิ่มข้อความต่อไปนี้เข้าไปในส่วนของ <Directory “/var/www/html”>
    <IfModule mod_ruid2.c>
    RMode config
    RUidGid webapps webapps
    RGroups apache access
    </IfModule>

  5. restart apache เขียน code php ทดสอบดูว่า mod_ruid ทำงานแล้ว
    <?php
    mkdir ("/home/user/domians/domain.com/public_html/test");
    ?>
    ถ้า folder ที่สร้างมี owner/group เป็น user นั้นๆก็แสดงว่า mod ruid ทำงานแล้ว

  6. แก้ permission ของ folder ต่างๆ (ขอลอก howto เลยละกันเพราะสมบูรณ์ดีแล้ว)
    cd /usr/local/directadmin/scripts && ./set_permissions.sh user_homes
    find /home//domains//public_html -type d -print0 | xargs -0 chmod 711
    find /home//domains//public_html -type f -print0 | xargs -0 chmod 644
    find /home//domains//public_html -type f -name ‘.cgi’ -exec chmod 755 {} ;
    find /home//domains//public_html -type f -name ‘.pl’ -exec chmod 755 {} ;
    find /home//domains//public_html -type f -name ‘.pm’ -exec chmod 755 {} ;
    cd /usr/local/directadmin/data/users && for i in ls; do { chown -R $i:$i /home/$i/domains/*/public_html;}; done;

ขอบคุณมากครับ

ปัจจุบันผมใช้ fcgi ก็ดีขึ้นแล้ว แต่ปัญหาหลักๆ คือ กิน RAM เยอะมาก แล้วใช้ CMS บางตัวมีปัญหา แก้ไขยุ่งยาก

กำลังจะลอง [COLOR=#333333]mod_ruid2 ดู หากดีก็จะเปลี่ยน Fcgi มาเป็นตัวนี้ทั้งหมดเลย ดูๆ จะกิน RAM น้อยกว่า Fcgi ด้วย

แต่ข้อดีของ Fcgi อีกอย่างคือ php.ini มันแยกแต่ละ User ทำให้เราจัดการบาง User ได้ง่าย เช่นบาง User ชอบส่ง Mail ออกด้วยฟังก์ชั่น mail() แบบโดนฝัง script เราก็สามารถปิดฟังก์ชั่นได้เป็นรายคน (ขี่เกียจไล่ script ลูกค้า)

ถ้า [/COLOR][COLOR=#333333]mod_ruid2 ทำได้ด้วนี่คงเยี่ยมไปเลย[/COLOR]

กินแรมเยอะที่ว่านี่พี่ใช้ version ไหนครับ? ถ้าไม่ใช่ 0.9.7 มันมีปัญหาเรื่องกินแรมอยู่นะ upgrade เลยครับ

ผมหมายถึง mod_fcgid-2.3.4.tar.bz2 ดูมาจากเว็บของท่านอ่ะครับ มันกิน RAM เยอะครับ
อ๋อ ผมลองเปิดดูเครื่องที่ลง ด้วย custombuild1.3 มันติดตั้ง mod_ruid2 มาให้เรียบร้อยแล้ว ไม่ต้องทำอะไรเลย เพิ่งรู้

ไม่จำเป็นครับ suhosin ทำได้เลย ระบุแยก disable function ผ่าน httpd conf ของ user

ว่างๆคุณ 360* ทำ how-to suhosin patch มาแชร์หน่อยนะครับ :th_059_:

มี custombuild 1.3 ด้วยเหรอครับ :blink:

งั้นก็ลองใช้ PHP-FPM แล้วกำหนดค่าให้เป็นแบบ OnDemand หลักการทำงานหลักๆจะคล้ายกับ mod_fcgid ที่ไม่ฆ่าตัวเองทุกครั้งหลังจากใช้งานไปแค่ครั้งเดียว นอกจากนี้ ยังกำหนดจำนวน Child process ได้ คือจะไม่มีการสร้างโปรเซสขึ้นมา จนกว่าจะมีการเรียกใช้งาน เมื่อสร้างเสร็จแล้ว ก็จะให้เรียกใช้อยู่อีกตามวินาทีที่ทางเรากำหนด ถ้าไม่มีการเรียกใช้งานแล้วก็ค่อยฆ่าตัวเองทิ้ง ถ้าแบบนี้ ก็จะไม่ต้องมีโปรเซสมาค้างรอและเปลือง RAM ครับ

ส่วนเรื่อง Custombuild 1.3 อันนี้ไม่เคยได้ยินนะครับ?

ที่ผมลองดู ใน http://files.directadmin.com/services/custombuild/

มีแต่
1.1
1.2
2.0