如何在Linux/Unix Web服务器DocumentRoot上设置只读文件权限

时间:2020-01-09 10:40:41  来源:igfitidea点击:

如何为存储在/var/www/html /目录中的所有文件设置只读权限?
您可以使用chmod命令为Linux/Unix/macOS/Apple OS X/* BSD操作系统上的所有文件设置只读权限。
本教程说明如何在Linux或Unix Web服务器(例如Nginx,Lighttpd,Apache等)上设置只读文件权限。

如何以只读模式设置文件

语法为:

## use only for files ##
chmod 0444 /var/www/html/*
chmod 0444 /var/www/html/*.php

如何以只读模式设置目录

要将目录设置为只读模式,请执行:

## use only for dirs ##
chmod 0444 /var/www/html/
chmod 0444 /path/to/your/dir/
# ***************************************************************************
# Say webserver user/group is www-data, and file-owned by ftp-data user/group
# ***************************************************************************
# All files/dirs are read-only
chmod -R 0444 /var/www/html/
# All files/dir owned by ftp-data
chown -R ftp-data:ftp-data /var/www/html/
# All directories and sub-dirs has 0445 permission (so that webserver user www-data can read our files)
find /var/www/html/ -type d -print0 | xargs -0 -I {} chmod 0445 "{}"

要查找所有文件(包括/var/www/html中的子目录)并设置只读权限,请执行:

## works on files only ##
find /var/www/html -type f -iname "*" -print0 | xargs -I {} -0 chmod 0444 {}

但是,您需要在/var/www/html和所有子目录上设置只读权限并执行权限,以便Web服务器可以输入您的DocumentRoot,执行:

## works on dirs only ##
find /var/www/html -type d -iname "*" -print0 | xargs -I {} -0 chmod 0544 {}

关于写权限的警告

请注意,对目录/var/www/html /的写访问允许任何人删除或添加新文件。
换句话说,您可能需要为/var/www/html /目录本身设置只读权限:

## read-only web-root but web server allowed to read files ##
chmod 0555 /var/www/html

在某些情况下,您可以根据设置更改文件所有者和组以设置严格权限:

### Say /var/www/html is owned by normal user, you can set it to root:root or httpd:httpd (recommended) ###
chown -R root:root /var/www/html/
 
## Make sure apache user owns /var/www/html/ ##
chown -R apache:apache /var/www/html/

关于NFS导出目录的说明

您可以使用/etc/exports文件指定目录是具有只读权限还是具有读/写权限。
该文件定义了NFS服务器上的各种共享及其权限。
一些例子:

# Read-only access to anyone
/var/www/html *(ro,sync) 
 
# Read-write access to a client on 192.168.1.10 (upload.example.com)
/var/www/html 192.168.1.10(rw,sync)

有关MS-Windows客户端的只读Samba(CIFS)共享的说明

要以只读方式共享销售,请如下更新smb.conf:

[sales]
comment = Sales Data
path = /export/cifs/sales
read only = Yes
guest ok = Yes

关于文件系统表的注释

您可以在Unix或Linux上使用/etc/fstab文件配置为以只读模式挂载某些文件。
您需要有一个专用分区。
不要将/或其他系统分区设置为只读模式。
在此示例中,使用/etc/fstab文件将/srv/html设置为只读模式:

/dev/sda6         /srv/html               ext4         ro             1 1

您可以使用mount命令以只读模式重新安装分区(以root用户身份运行):

# mount -o remount,ro /dev/sda6 /srv/html

或者

# mount -o remount,ro /srv/html

上面的命令将尝试尝试在/srv/html处重新挂载已经挂载的文件系统。
这通常用于更改文件系统的安装标志,尤其是使只读文件系统可写。
它不会更改设备或安装点。
要使文件系统再次可写,请执行:

# mount -o remount,rw /dev/sda6 /srv/html

或者

# mount -o remount,rw /srv/html

Linux:chattr命令

您可以使用chattr命令将Linux文件系统上的文件属性更改为只读:

 
chattr +i /path/to/file.php
chattr +i /var/www/html/
 
# find everything in /var/www/html and set to read-only #
find /var/www/html -iname "*" -print0 | xargs -I {} -0 chattr +i {}

要删除只读属性,请通过-i选项:

# chattr -i /path/to/file.php

FreeBSD,Mac OS X和其他BSD Unix用户可以使用chflags命令:

## set read-only ##
chflags schg /path/to/file.php
 
# remove read-only ##
chflags noschg /path/to/file.php