Apache 中的文档根目录位于 NTFS 分区上时出现 403 禁止错误

Apache 中的文档根目录位于 NTFS 分区上时出现 403 禁止错误

我是 Ubuntu 的新手,希望找到一个比 Windows 更好的 Web 开发环境。我尝试访问,http://localhost但总是出现禁止错误。我分别安装了 php、mysql 和 apache。Files/web_files也是我在 Windows 中的 Web 目录,当我在 Windows 上访问时是D:/Files/web_files,在 ubuntu 上是。我还在编辑位于中的文件media/Files/web_files后重新启动了 apache我编辑的文件是否错误?请帮忙。defaultetc/apache2/sites-available

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /media/Files/web_files
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /media/Files/web_files/>
        Options FollowSymLinks
        AllowOverride All
        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>

更新 如果我使用var/www它,它就像魔法一样有效。

DocumentRoot /var/www
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/>
    Options FollowSymLinks
    AllowOverride All
    order allow,deny
    allow from all
</Directory>

mount以下是该命令的输出

/dev/loop0 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
/dev/sda2 on /host type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,blksize=4096)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
gvfs-fuse-daemon on /home/wern/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=wern)
/dev/sr0 on /media/2022_21092011 type udf (ro,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000,iocharset=utf8,umask=0077)
/dev/sda3 on /media/Files type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)
/dev/sda1 on /media/System Rese

以下是输出ls - laR/media

ls: cannot access -: No such file or directory
ls: cannot access laR: No such file or directory
/media:
2022_21092011  Files  System Reserved

所以我想知道这是否是文件系统或其权限的问题。但我不认为这与权限有关,因为我可以完美地编辑文件,而media/Files/web_files不必以超级用户身份运行它。感谢那些迄今为止花时间帮助我的人。

答案1

您的 Windows 驱动器 D 似乎安装在/media/Files

在这种情况下,您的文件实际上位于/media/Files/Files/web_files。请尝试编辑默认使用该路径复制 sites-available 文件,然后重新启动 Apachesudo service apache2 restart并查看它是否有效。

此外,正如 Marty 在评论中指出的那样,Nautilus 似乎以奇怪的权限挂载了 NTFS 分区,因此除了您自己(当然还有 root)之外,没有其他用户能够或从中写入/写入到其中。

为了解决这个问题,关闭所有 Nautilus 窗口,停止 apache2,打开终端并执行以下操作:

sudo 卸载 /dev/sda3
mkdir /media/驱动器D
sudo ntfs-3g /dev/sda3 /media/DriveD

现在开始apache2,看看它是否有效。如果有效,最好/etc/fstab按照 Marty 所说的那样安装支架。

如果你不想编辑 /etc/fstab 文件,请执行以下操作

  • 打开终端并输入

    udisks --mount /dev/sda3 --mount-options umask=022
    

我想,您的分区已经标记为“文件”。在这种情况下,它将被挂载到/media/Files目录。然后您可以在其中执行 php 文件。但如果它没有标记为“文件”,我建议使用 来执行disk-utility。或者,如果您不想标记,请将您的etc/apache2/sites-available/default文件更改为实际的挂载点。

注意:如果您没有带有分区的标签,它将被安装在/media/xxxx....文件夹中,其中 xxxx... 是分区的 UUID。

功劳归于此回答者

答案2

您的驱动器在 apache 运行时是否已挂载?我不知道自动挂载是否足够,但如果出现问题,您可能需要明确挂载驱动器/etc/fstab。我很确定这种自动挂载仅在需要时进行;它不会挂载,直到您在 Nautilus 中打开它,然后才会挂载。

我使用 Nautilus 打开挂载的 NTFS 分区进行了测试,它没有为所有者和所有者组以外的任何人设置权限,因此这很可能是问题的根源。您需要设置挂载权限,以便每个人都r-x对该分区具有读取和执行 () 权限。您知道如何在“/etc/fstab”中挂载驱动器或任何其他方法吗?有一些详细说明这里

基本原则是,您需要创建一个目录来挂载分区,传统上作为的子目录/mnt/,而不是/media//media/传统上用于自动挂载的设备,例如当您在 Nautilus 中打开未挂载的设备时,或者用于 CD/USB 驱动器。

创建目录

您创建的目录应具有您想要的权限和所有者;我通常将所有者设置为我自己,其余部分具有只读权限 (drwxr-xr-x)。此目录应为空,但不必如此。但是当将某些东西挂载到该目录时,任何文件都将无法访问。要创建并设置此目录的权限(将 LOGIN_NAME 更改为您的登录名):

cd /mnt
sudo mkdir Files
sudo chown LOGIN_NAME:LOGIN_NAME Files
sudo chmod 755 Files

编辑 fstab

然后,在文件中创建一个条目/etc/fstab,以将分区挂载到此目录。这通常非常简单,但对于 NTFS,需要一些额外的信息来设置所有者和权限。我对 NTFS 使用的行是这样的(全部在一行上):

UUID=0000000000000000 /mnt/Files ntfs-3g auto,users,uid=LOGIN_NAME,gid=LOGIN_NAME,utf8,dmask=002,fmask=113 0 0

笔记:将正确的 UUID 替换为 0000000000000000;UUID 是通过sudo blkid在终端中输入命令行获得的。另外,将您的登录名替换为 LOGIN_NAME。

编辑 Apache 配置文件

然后,在文件中/etc/apache2/sites-available/default,将原来的 DocumentRoot 更改为/var/www//mnt/Files/web-files此外,对您的网站目录进行相同的更改。这假设/web-files/在 中安装的分区的根目录中有一个目录/mnt/Files/

另外,请确保文档根目录 ( .../web-files) 中有一个 HTML/PHP 文件?它应该是类似 index.html 或 index.php 的文件。您是否将文件复制/var/www/到此目录中?

答案3

尝试将 Apache 根目录保留在 Linux 本机分区 ( /var/www/html) 上并进行挂载,即:

mount -o bind /media/Files/web_files /var/www/html/web_files

请记住,文件夹web_files必须存在于文件夹下/var/www/html/,并且具有足够的属性来读取它。

答案4

对于不想处理挂载和重新挂载分区的人来说,只需确保在 apache.conf 和 000-default.conf 中有正确的挂载路径,然后编辑 /etc/apache2/envvars

修改 www-data

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

到您的用户名

export APACHE_RUN_USER=youruser
export APACHE_RUN_GROUP=youruser

重新启动apache,完成。

相关内容