ฉันควรเชื่อมโยงไดเรกทอรี / var / www ของฉันไปที่บ้านของฉันหรือไม่


20

ฉันเพิ่งติดตั้ง Ubuntu Server 10.04 ด้วยการตั้งค่า LAMP ฉันต้องการโฮสต์เว็บไซต์ที่นั่น แต่ฉันไม่แน่ใจว่าวิธีใดที่ดีที่สุดในการรับ / แก้ไขไฟล์ของฉันบนเซิร์ฟเวอร์ Googling มีตัวเลือกมากมาย แต่ฉันไม่แน่ใจว่าตัวไหนดีที่สุด?

หากไม่มีตัวเลือกที่ดีกว่าฉันต้องการสร้างหน้าบนพีซีเครื่องอื่น (Windows หรือ Linux) และใช้ SFTP เพื่อซิงค์การเปลี่ยนแปลงไปยังเซิร์ฟเวอร์ - แต่ฉันจะทำเช่นนี้กับโฟลเดอร์ symlinked ใน ~ / หรือโดยการเปลี่ยนสิทธิ์ ในโฟลเดอร์ / var / www /


5
เหตุผลที่ / var / ww / ไม่ควรมี chmod 777 - เพียงเพื่อให้ชัดเจน
Marco Ceppi

คำตอบ:


21

ทุกการตั้งค่าจะแตกต่างกัน สำหรับฉันฉันมีผู้ใช้จำนวนมากบนเซิร์ฟเวอร์ที่เว็บไซต์โฮสต์แต่ละแห่งสำหรับคุณคุณอาจไม่จำเป็นต้องสร้างมากกว่าหนึ่งผู้ใช้ในระบบ อย่างไรก็ตามหากคุณจัดการหลายเว็บไซต์ในเซิร์ฟเวอร์นี้การตั้งค่านี้จะช่วยให้คุณจัดการกำหนดค่าและดีบักแต่ละโดเมนในแบบที่ง่ายกว่าการตั้งค่า LAMP มาตรฐาน เพื่อที่จะเกิดขึ้นฉันใช้อุปกรณ์ต่าง ๆ โดย Apache เพื่อแก้ไขข้อผิดพลาดเกี่ยวกับการอนุญาต

อย่างแรกนี่คือโครงสร้างเอกสารที่ฉันใช้:

/home/[USER]/domains/[DOMAIN]/html
/home/[USER]/domains/[DOMAIN]/logs

ผู้ใช้แต่ละคนมีบัญชีของตัวเองพร้อมโฟลเดอร์โดเมน (ซึ่งฉันเพิ่มเข้าไปเพื่อ/etc/skelให้มันถูกสร้างขึ้นทุกครั้งแต่ละโดเมนมีโฟลเดอร์ของตัวเองในdomainsโฟลเดอร์ที่มีhtmlโฟลเดอร์ (ฉันมีเหตุผลของฉันในเรื่องนี้ส่วนใหญ่โดเมนสามารถมีไฟล์เว็บภายนอก ของขอบเขตสาธารณะ) อย่าลังเลที่จะแก้ไขโครงสร้างนี้ตามที่เห็นสมควร

ประการที่สองฉันโฮสต์เว็บไซต์ PHP จำนวนมากดังนั้นฉันจึงใช้ suPHP ในการกำหนดค่าของฉัน ตามค่าเริ่มต้นแพคเกจการเก็บถาวรมาตรฐานไม่ได้เปิดใช้งานการคอมไพล์การตั้งค่าสถานะที่เหมาะสมส่งผลให้ suPHP รุ่นที่มีความปลอดภัยน้อยลง ฉันสร้างแพ็คเกจ suPHP ของตัวเองซึ่งฉันใช้บนเซิร์ฟเวอร์ของฉันคำแนะนำในการติดตั้งด้านล่าง suPHP ช่วยให้คุณสามารถกำหนดสคริปต์ PHP ที่ผู้ใช้ควรดำเนินการเป็น (เหนือสิ่งอื่นใดรวมถึง: ที่กำหนดเอง php.ini สำหรับแต่ละเว็บไซต์ ฯลฯ ) ฉันยังเปิดใช้งาน suExec สำหรับ Apache - ช่วยขจัดความจำเป็นในการเป็นเจ้าของให้กับผู้ใช้ข้อมูล www (ผู้ใช้ที่ฉันดูถูก)

ก่อนอื่นให้แน่ใจว่าคุณมี Apache และบริการอื่น ๆ ทั้งหมดที่ติดตั้งบนเซิร์ฟเวอร์ของคุณ ตรวจสอบให้แน่ใจว่าทำงานอย่างน้อย หลังจากนั้นฉันแนะนำให้ติดตั้งsuphp-common และโมดูล libapache2-mod-suphp ที่จำเป็น (ข้อมูลเพิ่มเติม: PPA คืออะไรและฉันจะใช้มันได้อย่างไร ) จากนั้นหลังจากติดตั้งแล้วให้เปิดใช้งาน suPHP และ suexec โดยใช้a2enmod

sudo a2enmod suphp
sudo a2enmod suexec
sudo a2dismod php5

sudo /etc/init.d/apache restart

ถัดไปจะเป็นไฟล์กำหนดค่า ฉันได้สร้างเครื่องมือต่าง ๆ ที่สร้างไฟล์กำหนดค่าโดยอัตโนมัติทุกครั้งที่ฉันเพิ่มเว็บไซต์ใหม่ อย่างไรก็ตามนี่คือเทมเพลตพื้นฐานที่ฉันใช้:

<VirtualHost *:80>
    ServerAdmin [EMAIL]
    ServerName [DOMAIN]
    ServerAlias www.[DOMAIN] [DOMAIN]
    DocumentRoot /home/[USER]/domains/[DOMAIN]/html

    <Directory /home/[USER]/domains/[DOMAIN]>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride all
    </Directory>

    ErrorLog /home/[USER]/domains/[DOMAIN]/logs/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /home/[USER]/domains/[DOMAIN]/logs/access.log combined

    SuexecUserGroup [USER] [USER]

    suPHP_UserGroup [USER] [USER]
    suPHP_ConfigPath /home/[USER]/etc
</VirtualHost>

สิ่งนี้ตั้งค่าการบันทึกสำหรับโดเมนนั้นรูทเอกสารและสิ่งจำเป็นพื้นฐานอื่น ๆ ทั้งหมดสำหรับโดเมนที่จะใช้งาน ฉันวางไฟล์เหล่านี้ใน/etc/apache2/sites-available/ชื่อปกติ[USER]-[DOMAIN]และเปิด / ปิดการใช้งานด้วยa2ensiteเช่น:

sudo a2ensite [USER]-[DOMAIN]
sudo a2dissite [USER]-[DOMAIN]

หลังจากการแก้ไขแต่ละไฟล์ Apache จะต้องมีการโหลดใหม่ด้วย

sudo /etc/init.d/apache reload

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


+1 สำหรับทุกการตั้งค่าจะแตกต่างกันและใช้บัญชีผู้ใช้แยกต่างหากสำหรับแต่ละเว็บไซต์
Lekensteyn

1
นี่เป็นสิ่งที่ยอดเยี่ยมสำหรับระบบ LAMP ที่มีผู้ใช้หลายคน แต่คำถามนี้เกี่ยวกับระบบ LAMP สำหรับผู้ใช้คนเดียวซึ่งในกรณีนี้คำตอบนี้มากเกินไป :)
Kees Cook

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

มาร์โกคุณสามารถใช้วิธีนี้ในเวลาที่คุณได้รับผู้ใช้คนที่สอง แม้ว่าอันแรกนั้นควรจะง่ายกว่าเว้นแต่ว่าคุณจะมีมากกว่านั้น
SpamapS

+1 - นี่คือการกำหนดค่าที่ปลอดภัยและเหมาะสมที่สุด
นาธานออสมัน

11

Sftp ติดตั้งง่ายมาก เพียงแค่ติดตั้งแพคเกจopenssh-serverและคุณจะมี SFTP ตรวจสอบให้แน่ใจว่าผู้ใช้ของคุณมีรหัสผ่านที่ดีหากคุณสามารถเข้าถึงได้จากอินเทอร์เน็ต (8+ ตัวอักษรไม่ใช่คำในพจนานุกรมมีสัญลักษณ์และตัวเลข)

สำหรับการอนุญาตฉันมักจะทำเช่นนี้
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www
คุณควรจะสามารถโพสต์หน้าเว็บได้โดยเชื่อมต่อกับ sftp (ใช้ชื่อผู้ใช้และรหัสผ่านของคุณ) จากนั้นไปที่โฟลเดอร์ / var / www แล้ววางไฟล์ของคุณไว้ที่นั่น


1
วิธีที่ปลอดภัยมากขึ้นคือการรับรองความถูกต้องโดยใช้คีย์ (พร้อมด้วยรหัสผ่านส่วนตัวที่ได้รับการป้องกันแน่นอน)
Lekensteyn

@ Lekensteyn ฉันคิดว่าจะแนะนำ แต่ฉันพยายามทำให้มันง่าย Craig T อาจดูhelp.ubuntu.com/community/SSH/OpenSSH/Keysและhelp.ubuntu.com/community/SSH/OpenSSH/…หากเขาต้องการตั้งค่าการรับรองความถูกต้องด้วยคีย์ที่ปลอดภัยยิ่งขึ้น
Azendale

2
นี่เป็นวิธีที่ง่ายที่สุดในการทำให้ไฟล์เข้าที่ที่ถูกต้องบนเว็บเซิร์ฟเวอร์อินสแตนซ์เดียวโดยไม่ทำให้ไฟล์เสียหาย :) นอกจากนี้ยังสามารถใช้ rsync แทน sftp ทั้งสองใช้ SSH ภายใต้ประทุน (และฉันอยากจะแนะนำให้ใช้คีย์ ssh แทนรหัสผ่าน แต่มีคนพูดถึงเรื่องนี้แล้ว)
Kees Cook

1
+1 เห็นด้วยกับ Kees นี่ง่ายมากและใช้ได้กับคำถามที่ระบุ ฉันใช้การตั้งค่าเดียวกันเกือบทั้งหมดสำหรับกลุ่มการผลิตที่มี 40+ โหนด จำกัด การเข้าถึงคีย์ SSH เท่านั้น
SpamapS

1

ฉันใช้ webdav มันง่ายมากที่จะติดตั้งบน Ubuntu Server หากคุณติดตั้ง apache เสร็จแล้ว sudo a2enmod dav; service apache2 restartเพียงแค่ คุณจะต้องทำการกำหนดค่าเล็กน้อยของเว็บไซต์เสมือนของคุณ นี่คือตัวอย่างที่ฉันใช้ในการผลิต:

<VirtualHost *>
    ServerName webdav.mysite.com
    ServerAdmin webmaster@mysite.com

    DocumentRoot /srv/mysite
    DAVLockDB /var/lock/apache2/DAVLock
    <Directory /srv/mysite>
        Order allow,deny
        Allow from all
    Dav On
    DAVMinTimeout 600
    DAVDepthInfinity On
AuthName "mysite login"
AuthType Basic
AuthUserFile /srv/mysite/.htpassword
Require valid-user

    </Directory>
php_admin_value engine off
</VirtualHost>

<VirtualHost *>

    ServerName mysite.com
    ServerAlias *.mysite.com
    ServerAdmin webmaster@mysite.com

    DocumentRoot /srv/mysite/www
    <Directory /srv/mysite/www>
        Order allow,deny
        Allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /srv/mysite/cgi-bin/
</VirtualHost>

คุณสามารถใส่นี้ใน / srv / etc / apache2 / ไซต์ใช้ได้ / mysite sudo a2ensite mysite; sudo service apache2 reloadแล้วทำ

สิ่งที่เกิดขึ้นที่นี่คือคุณสร้างเว็บไซต์เสมือนสองแห่ง หนึ่งคือ www.mysite.com และอีกอันคือ webdav.mysite.com PHP ถูกปิดการใช้งานบน webdav.mysite.com ซึ่งเป็นสิ่งสำคัญ

ตอนนี้คุณสามารถเข้าถึงไซต์ของคุณผ่าน http บน Ubuntu, Windows และ MacOS ทั้งสามได้สร้างขึ้นในการสนับสนุน webdav ต่อไปนี้เป็นคำแนะนำเกี่ยวกับการเพิ่มสถานที่ตั้งเครือข่าย WebDAV ในอูบุนตู


ทำไมสิ่งนี้ถึงดี เนื่องจากคุณสามารถเข้าถึงไซต์ของคุณจากระบบปฏิบัติการใด ๆ โดยไม่ต้องใช้ซอฟต์แวร์เพิ่มเติม (sftp ทำงานได้ใน Ubuntu ต้องใช้โปรแกรมแยกต่างหากในระบบปฏิบัติการอื่น ๆ ) นอกจากนี้ด้วยไซต์เช่น wordpress การอนุญาตจะถูกต้องสำหรับการจัดการกับไฟล์อัพโหลดเนื่องจาก apache เกี่ยวข้องกับทั้งสองด้าน และถ้าคุณต้องการความปลอดภัยก็สามารถใช้ https แบบมาตรฐานได้เช่นกัน (คุณสามารถใช้พอร์ตที่แตกต่างกันถ้าคุณมีหลายไซต์บน IP เดียวกัน)
newz2000

mkdir -p /srv/mysite/www; chown -R www-data.www-data /srv/mysiteโดยวิธีการที่คำแนะนำข้างต้นถือว่าคุณได้สร้างสถานที่สำหรับเว็บไซต์ของคุณ:
newz2000

1
DAV นั้นไม่ได้รับการเข้ารหัส (ยกเว้นในกรณีที่เว็บเซิร์ฟเวอร์ของคุณใช้ SSL) ดังนั้นฉันขอแนะนำ SFTP หรือ rsync ผ่าน DAV โดยทั่วไป
Kees Cook

0

ฉันจะให้สิทธิ์การเขียนกับ / var / www ใน www-data และเพิ่มผู้ใช้ของคุณในกลุ่มนั้น วิธีนี้จะเป็นการง่ายในการควบคุมผู้ใช้ที่สามารถเขียนไปยังไดเรกทอรีนั้น

sudo chgrp -R www-data /var/www
sudo chmod g+w -R /var/www 
usermod -a -G www-data your-user

-1

คุณใช้เฟรมเวิร์กสำหรับไซต์ของคุณหรือไม่? Drupal, Wordpress ฯลฯ ? เช่น Drupal มีเครื่องมือในการอัปโหลดผ่านการโต้ตอบของเบราว์เซอร์

คุณดูแซมบ้าหรือไม่? คุณสามารถตั้งค่าการแชร์แซมบ้า (และมีทรัพยากรมากมายบนเว็บสำหรับพวกเขา) และใช้ Windows Explorer เพื่อเปิด / แก้ไข / บันทึก / ลบ ตั้งค่า / var / www ที่จะแชร์จากนั้นแมป "ไดรฟ์เครือข่าย" กับ windows

นี่เป็นที่ทำงานหรือสภาพแวดล้อมที่บ้านหรือไม่? ดูเหมือนว่าบ้าน แต่ถ้าคุณอยู่ในสภาพแวดล้อมการทำงาน ... คุณสามารถจับคู่แซมบ้ากับ Active Directory ด้วยเครื่องมือเช่น Likewise-Open ฉันมีการตั้งค่าเซิร์ฟเวอร์ / เว็บไซต์เพื่อให้ผู้ที่อยู่ในร้านค้าไอทีสามารถลงชื่อเข้าใช้งานทั้งสองด้านของเซิร์ฟเวอร์ (linux หรือเว็บไซต์) ผ่านข้อมูลรับรอง AD ของพวกเขา

ฉันขอแนะนำให้มองหาบางอย่างเช่น Mercurial สร้างพื้นที่เก็บข้อมูลบนเซิร์ฟเวอร์และซิงค์กับ windows ผ่านทาง TortiseHG ฉันคิดว่ามันเหมือน rsync แต่คุณจะมีเวอร์ชั่นการสำรองข้อมูลความสามารถในการกระจาย ฯลฯ (SVN, Mercurial, Git และตัวเลือกอื่น ๆ ทั้งหมด)



-2

คุณเป็นคนแบบนี้หรือเปล่า

rsync -az --rsh "ssh" --rsync-path "sudo rsync" ~/website ubuntu@REMOTE-IP:/var/www

1
การเข้าสู่ระบบในฐานะรูทดูเหมือนจะเกินความจำเป็น
Kees Cook
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.