เคยมั้ยครับ เหตุการณ์แบบนี้
- พี่ครับ 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;