แก้ปัญหา Permission 777 ให้ DirectAdmin ด้วย mod_ruid

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

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


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

เริ่มกันเลยดีกว่า ป้อนคำสั่ง ทีละบรรทัดนะครับ ใจเย็นๆ
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/
cd /usr/local/directadmin/data/templates/custom/



แล้วทีนี้ ด้านในคุณจะเจอไฟล์ประมาณนี้ครับ

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 นิดหน่อยครับ


เปิดไฟล์ /etc/httpd/httpd.conf แล้วเพิ่มตัวหนาลงไปในคอนฟิคส่วนนี้ครับ
(ถ้าไม่เจอ จะอยู่ใน /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>
RUidGid webapps webapps

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

ในระบบเก่าคุณอาจจะมี 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;



หากพบปัญหาการใช้ php mail fucntion ส่งเมลแล้ว Sender กลายเป็น user@xxx.domain.com (ชื่อ host name) ซึ่งปกติจะต้องเป็น user@domain.com สามารถแก้ไขได้ดังนี้


เพิ่ม
local_from_check = false
local_sender_retain = true
untrusted_set_sender = *

หลัง
# TRUSTED USERS
trusted_users = mail:majordomo:apache:diradmin


ขอขอบคุณเทคนิคดีๆ โดยคุณ zephythor จาก THT

Was this answer helpful?

 Print this Article

Also Read

การ Downgrade Reseller ให้เปลี่ยนเป็น User ใน DirectAdmin

เข้า SSH แล้วรันคำสั่งด้านล่างsh /usr/local/directadmin/scripts/reseller_to_user.shuser คือ...

วิธีปิด Brute-force notification ให้กับ DirectAdmin

หลายท่านคงมีปัญหากับ ข้อความ และ Email แจ้งเตือน Brute-force จาก DirectAdmin หากท่านมั่นใจว่า...

ปิด Apache cgi ด้วย DirectAdmin เพื่อป้องกัน Scritpไม่พึงประสงค์

ปิด cgi บน Apache เพื่อป้องกันการ Script ไม่พึงประสงค์ ที่พบบ่อยๆ คือพวก Script โจมตี และส่ง Spam...

การ Backup & Restore DirectAdmin Control Panel

สำหรับท่านที่ต้องการอัพเดทเวอร์ชั่น DirectAdmin...

การตั้งค่า DKIM กับ DirectAdmin

DKIM (DomainKeys Identified Mail) เป็นลายเซ็นดิจิทัลในส่วนหัวของข้อความ E-Mail...