วิธีที่ง่ายที่สุดในการแก้ไขและเพิ่มไฟล์ลงใน“ / var / www” คืออะไร?


145

มีการติดตั้งเว็บเซิร์ฟเวอร์มีวิธีง่าย ๆ ในการตั้งค่าผู้ใช้สามารถใช้อินเทอร์เฟซแบบกราฟิกเพื่อคัดลอกไฟล์และไดเรกทอรีไปยังเว็บเซิร์ฟเวอร์ภายใน / var / www

ฉันให้สิทธิ์ผู้ดูแลระบบใน Ubuntu แต่ก็ยังไม่อนุญาตให้ทำสำเนา


เกี่ยวข้อง: askubuntu.com/questions/45496/…
Marco Ceppi

2
ที่เกี่ยวข้อง (ปลอดภัยมากขึ้น): วิธีหลีกเลี่ยงการใช้ sudo เมื่อทำงานใน / var / www?
Lekensteyn

ฉันพยายามทำสิ่งที่ Marcos Rorizo ​​n จูพูด ฉันคัดลอกและวางเมื่อ Marcos เขียนและเปลี่ยนชื่อผู้ใช้เป็นชื่อผู้ใช้ของฉัน แต่ฉันไม่สามารถบันทึกลงใน / etc / apache2 / sites-available เพราะจะไม่อนุญาตให้ฉันบันทึกลงในโฟลเดอร์นั้น ???

คำตอบ:


222

หากคุณสร้าง / var / www ให้กลุ่มสามารถเขียนได้และเพิ่มผู้ใช้ในกลุ่มผู้ใช้นั้นจะไม่ต้องใช้ sudo ลองสิ่งนี้:

sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rwX /var/www

ผู้ใช้ควรสามารถแก้ไข / var / www / ไฟล์ได้โดยไม่ต้องยุ่งยาก

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

หากคุณเข้าสู่ระบบในขณะที่<username>คุณต้องออกจากระบบและกลับเข้าสู่ระบบเพื่อให้สมาชิกกลุ่มมีผล


37
ฉันทำสิ่งนี้บวกกับการบิดสองสามครั้ง: sudo adduser <username> www-data; sudo chgrp -R www-data /var/www; sudo chmod -R g+rw /var/www; find /var/www -type d -print0 | sudo xargs -0 chmod g+s ออกจากระบบและลงชื่อเข้าใช้อีกครั้งเพื่อเลือกกลุ่มใหม่ของคุณ ฉันchmod g+sจะบังคับให้ไฟล์และไดเรกทอรีใหม่รับเจ้าของกลุ่ม (www-data) ตรวจสอบให้แน่ใจว่าสิทธิ์ของฉันเปลี่ยนไปเผยแพร่
Don Faulkner

15
@DonFaulkner เหตุผลด้านความปลอดภัยก็อาจจะดีกว่าให้/var/wwwเป็นของราก: รากดังนั้นแทนที่จะได้ดีเป็นsudo chgrp -R www-data /var/www sudo chgrp -R www-data /var/www/*
Desmond Hume

2
วิจิตรพิสดารพอหลังจากทำงานทั้ง 3 คำสั่งบางอย่างของโฟลเดอร์ย่อยและไฟล์ (เช่นฉันcomposer.jsonและLICENSE) จะแสดงโดยใช้ไอคอนไบนารี การเปิดcomposer.jsonในเครื่องมือแก้ไขข้อความจะแสดงไฟล์เปล่าและสิ่งที่แย่ที่สุดคือฉันไม่สามารถเรียกดูโฟลเดอร์ย่อยบางโฟลเดอร์ได้ฉันยังลองใช้คำสั่งเพิ่มเติมตามที่ @DonFaulkner แนะนำและยังไม่มีโชค ถ้าฉันใช้เทอร์มินัลเป็นรูททุกอย่างก็ควรจะเป็น ใครมีความคิดเห็นใด ๆ ว่าทำไมสิ่งนี้ถึงเกิดขึ้น
Alix Axel

5
@itsols คุณต้องออกจากระบบจากนั้นเข้าสู่ระบบเพื่อให้ทำงานได้
jini

1
@ DonFaulkner - คุณสนใจที่จะอธิบายว่าไฟล์ที่ root เป็นเจ้าของนั้นอาจเป็นเวกเตอร์การโจมตีได้อย่างไร? (ฉันใหม่ทั้งหมดนี้และฉันสับสนเพราะบางคนดูเหมือนจะสนับสนุนวิธีการรักษาความปลอดภัยที่มีข้อสงสัยในขณะที่บางคนสงสัยในขณะที่คนอื่น ๆ ยืนกรานว่าไม่เป็นเจ้าของ )
Andrew Cheong

25

คุณสามารถchownที่จะเชื่อมchโยงownเอ้อของโฟลเดอร์นั้น สิ่งนี้จะช่วยให้คุณเปลี่ยนผู้ใช้และกลุ่มของโฟลเดอร์ช่วยให้ผู้ใช้ของคุณสามารถเพิ่ม / ลบไฟล์ในนั้น หากต้องการทำสิ่งนี้ให้แทนที่yourusernameด้วยชื่อของคุณและรัน:

sudo chown yourusername.users /var/www

และนั่นมัน


อย่างไรก็ตามฉัน preffer เพื่อสร้าง virtualhost ในโฟลเดอร์บ้านของฉันมันง่ายกว่ามาก

โดยทั่วไปจะช่วยให้คุณใช้โฟลเดอร์ใด ๆ เป็นโฟลเดอร์บริการ apache หากต้องการแสดงให้เห็นว่ามันง่ายแค่ไหนสมมติว่าชื่อผู้ใช้ของคุณคือชื่อผู้ใช้และโฟลเดอร์ที่คุณต้องการให้บริการคือ/ home / ชื่อผู้ใช้ / www

สร้างไฟล์ต่อไปนี้ (เช่นmywebprojects) ใน / etc / apache2 / sistes-available โดยแทนที่ชื่อผู้ใช้และเส้นทางโฟลเดอร์ (โดยทั่วไปเพียงแค่คัดลอกและวางและแทนที่ใน #CHANGE ที่นี่):

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    # CHANGE HERE
    DocumentRoot /home/username/www

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    # CHANGE HERE
    <Directory /home/username/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log

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

    CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

ตอนนี้ให้สร้างwwwโฟลเดอร์เพิ่มโลกอย่างง่ายปิดการใช้งานเว็บไซต์เริ่มต้น ( /var/www) เปิดใช้งานเว็บไซต์ของเราmywebprojectsและเริ่มต้น apache ใหม่

mkdir ~/www 
echo "<html><h1>Hello World</h1></html>" > ~/www/test.html
sudo a2dissite default #
sudo a2ensite mywebprojects
sudo service apache2 restart

และตอนนี้คุณไม่จำเป็นต้องไปที่/var/wwwคุณเพียงแค่เพิ่มไฟล์ไปยังwww(หรือชื่ออื่น ๆ ) และมันมีอยู่แล้ว :)


สิ่งที่ฉันทำ ข้อดีอย่างหนึ่งของเรื่องนี้คือคุณสามารถเปลี่ยนไดเรกทอรีเป็นไดรฟ์ที่แชร์เพื่อให้ไฟล์ทั้งหมดสามารถใช้งานได้เมื่อบูทใน Windows / OSX
เจสัน

9

วิธีที่ 1:

  • กดALT+ F2และป้อน gksudo nautilus แล้วคลิกเรียกใช้

    ข้อความแสดงแทน

  • มันจะเปิดหอยโข่งที่มีรูตราก
  • ระบบไฟล์ Goto var www และตอนนี้คุณสามารถเพิ่ม / คัดลอก / วางไฟล์ของคุณ

วิธีที่ 2:

  • ติดตั้งnautilus-gksu ติดตั้ง nautilus-gksu
  • หลังจากติดตั้งประเภทnautilus -qในเทอร์มินัลของคุณเพื่อรีเฟรชเมนูคลิกขวา
  • ตอนนี้คุณจะพบรายการ 'เปิดเป็นผู้ดูแลระบบ' ในเมนูคลิกขวาของหอยโข่ง
  • เมื่อคุณต้องการเปิดไฟล์ใด ๆ ที่มีสิทธิ์รูทคุณเพียงคลิกขวาที่ไฟล์ / โฟลเดอร์นั้นและเลือก 'เปิดเป็นผู้ดูแลระบบ'
  • มันจะเปิดไฟล์ / โฟลเดอร์ที่ได้รับอนุญาตจากรูท

    ข้อความแสดงแทน


1
นี่เป็นวิธีที่ถูกต้องอย่างแน่นอน! ฉันสงสัยว่าทำไมนี่ไม่ใช่คำตอบที่เลือก วิธีอื่นเกี่ยวข้องกับการยุ่งกับสิทธิ์และฉันจะไม่เสี่ยงกับระบบของฉันโดยทำเช่นนั้น +1 สำหรับคำตอบของคุณ
itsols

5
@itsols: ฉันไม่เห็นด้วยอย่างสมบูรณ์ - คุณเสี่ยงต่อระบบของคุณโดยอนุญาตให้ Nautilus เข้าถึงระบบไฟล์ของคุณได้อย่างสมบูรณ์แทนที่จะต้องกำหนดสิทธิ์ที่เหมาะสมเพื่อให้สามารถเข้าถึง/var/wwwได้ การกดปุ่มครั้งเดียวโดยไม่ตั้งใจ[delete]และคุณสามารถจบลงด้วยระบบที่ไม่สามารถบูตได้
นาธานออสมัน

@GeorgeEdison แต่นี่เป็นเพียงการอนุญาต และหลังจากสิ่งนี้เสร็จสิ้นเราปิดหอยโข่งและทำงานตามปกติ มันแย่ขนาดนั้นจริงเหรอ? ขอโทษสำหรับความไม่รู้ของฉันที่นี่ แม้จะเป็นผู้ใช้ Ubuntu ตั้งแต่รุ่น 5.x แต่ฉันก็ยังพบว่าการตั้งค่าเครื่องพัฒนาค่อนข้างท้าทายและดูเหมือนจะไม่มีวิธีที่ชัดเจนในการทำ (สำหรับฉันอย่างน้อย ...
itsols

@itsols: ส่วนที่สองของคำตอบนี้เป็นวิธีที่ต้องการและเป็นส่วนที่ฉันใช้
Nathan Osman

6

มันอาจจะง่ายเหมือนการsudo usermod -a -G developers $usernameใช้ ACL

แม้ว่าจะเริ่มต้นเพียงเล็กน้อย นี่สำหรับ Ubuntu 10.10 เป็นอย่างน้อย ก่อนอื่นเมาท์ระบบไฟล์ด้วยตัวเลือก acl ใน / etc / fstab

sudo vim /etc/fstab

UUID = ค่าเริ่มต้น xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4, acl 0 1

sudo mount -o remount,acl /

จากนั้นสร้างกลุ่มที่ผู้ใช้อาจอยู่เพื่อจุดประสงค์นี้

sudo groupadd developers
sudo usermod -a -G developers $username

ผู้ใช้จำเป็นต้องออกจากระบบและลงชื่อเข้าใช้อีกครั้งเพื่อเป็นสมาชิกของกลุ่มนักพัฒนา

แน่นอนอย่าทำเช่นนี้หากคุณมีเนื้อหาในไดเรกทอรี / var / www ที่คุณต้องการ แต่เพียงเพื่อแสดงให้เห็นถึงการตั้งค่าเพื่อเริ่มต้น:

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root:developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public

จากนั้นแทนที่การอ้างอิงถึง "/ var / www" ด้วย "/ var / www / พับลิก" ในไฟล์ปรับแต่งและโหลดซ้ำ

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

หากเราต้องการ จำกัด การลบและเปลี่ยนชื่อจากทั้งหมดยกเว้นผู้ใช้ที่สร้างไฟล์:

sudo chmod +t /var/www/public

วิธีนี้ถ้าเราต้องการสร้างไดเรกทอรีสำหรับเฟรมเวิร์กที่มีอยู่นอกรูทเอกสาร Apache หรืออาจสร้างไดเรกทอรีที่เขียนได้บนเซิร์ฟเวอร์ก็ยังง่าย

ไดเรกทอรีบันทึกการเขียน Apache:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

ไดเรกทอรีไลบรารี Apache ที่อ่านได้:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/logs
sudo chmod 0750 /var/www/logs

คุณช่วยอธิบายอะไรได้บ้างกับUUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-line มันหมายถึงการเพิ่มอย่างแท้จริงหรือต้องการให้ผู้ใช้ค้นหาบรรทัดและแก้ไขตัวเลือกที่อยู่เบื้องหลัง?
MadMike

ทำไมคุณไม่ข้ามsudo rm -rf /var/www-step ดูเหมือนไม่จำเป็นจริงๆ
MadMike

@MadMike มันหมายถึงการยื่นในด้วยเลขฐานสิบหก หากต้องการทราบว่าพาร์ติชั่นต่างๆของคุณมีป้ายกำกับให้เรียกใช้sudo blkid
Azendale

1
@Azendale เมื่อฉันเขียนความคิดเห็นมันมีความหมายเป็นข้อเสนอแนะในการปรับปรุงคำตอบ วันนี้ฉันรู้ว่าฉันควรจะแนะนำสิ่งนี้ให้มากกว่านี้โดยตรง ไลค์: โปรดเพิ่มวิธีเติมUUID=xxxx-part like ด้วย a sudo blkid
MadMike

0

วิธีที่ง่ายที่สุดที่จะทำคือทำตามขั้นตอนที่ระบุด้านล่าง: -

  1. กดAlt+ Ctrl+ Tและเทอร์มินัลจะเปิดและพิมพ์sudo -sและเข้าสู่ระบบด้วยรหัสผ่านของคุณ
  2. rootตอนนี้คุณกำลังเข้าสู่ระบบเป็น
  3. ตอนนี้พิมพ์nautilusแล้วมันจะเปิดโฟลเดอร์บ้านให้คุณในฐานะรูท ดังนั้นตอนนี้คุณสามารถแก้ไขไฟล์และทำสิ่งที่คุณต้องการได้อย่างง่ายดาย

หวังว่านี่จะช่วยได้ :)


1
ในการรับรูทเชลล์ที่เหมาะสมสำหรับการรันแอปพลิเคชั่นกราฟิกเช่น Nautilus sudo -iจะดีกว่าsudo -sด้วยเหตุผลเดียวกันsudo -Hคือการsudoใช้แอพแบบกราฟิกเดียว ( sudo -sไม่ได้ตั้งค่าHOMEเพื่อให้ผู้ใช้อาจได้รับแฟ้มการกำหนดค่าในไดเรกทอรีบ้านของพวกเขาที่ควรจะเป็นของพวกเขา แต่เป็นรากแทน .)
Eliah Kagan

ฉันไม่แนะนำให้ใช้บัญชีรูทโดยเฉพาะบนเซิร์ฟเวอร์ sudo ให้มากขึ้นกว่าการควบคุมการเข้าถึงที่เพียงพอในขณะที่ช่วยให้การดูแลระบบนโยบายฝีมือเพื่อให้แน่ใจว่า devs และนักออกแบบจะไม่ส่งปืนพกในการถ่ายภาพของตัวเองด้วยการเดินเท้าออก (และ บริษัท ของพวกเขา!)
เชน

0

/var/www folderเป็นเจ้าของโดย root .. คุณต้องเปลี่ยนความเป็นเจ้าของเป็นชื่อผู้ใช้ของคุณเองเพื่อแก้ไขไฟล์ในโฟลเดอร์นี้ สำหรับสิ่งนี้คุณสามารถลองคำสั่งต่อไปนี้ ..

sudo -i // เพื่อเปลี่ยนเป็นรูทคอนโซล

sudo chown -R <username> <path> // for eg. sudo chown -R scott /var/www/html (scott is the username, -R indicates recrusive)

ตอนนี้เจ้าของโฟลเดอร์ที่ได้รับมอบหมายให้กับผู้ใช้/var/www/html will scottตอนนี้สกอตต์สามารถคัดลอก / ย้ายไฟล์ในโฟลเดอร์นี้


-1

หากคุณใช้เซิร์ฟเวอร์เวอร์ชันลอง webmin มันมี UI เว็บที่ยอดเยี่ยมและตัวจัดการไฟล์ ไม่ว่าจะเป็นหรือ Filezilla


4
คุณอธิบายได้ไหมว่า "ถ้าคุณใช้เวอร์ชั่นเซิร์ฟเวอร์" แพ็คเกจใด ๆ ที่สามารถติดตั้งบน Ubuntu Server สามารถติดตั้งได้บน Ubuntu เวอร์ชันเดสก์ท็อป
Eliah Kagan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.