彻底地/ 终于地, 解决 关于apache 权限的问题了:: 修改 DocumentRoot后的 403错误: have no permission to access / on this server

时间:2023-03-09 22:18:00
彻底地/ 终于地,  解决 关于apache 权限的问题了::  修改 DocumentRoot后的 403错误: have no permission to access / on this server
  1. 目录的权限都 应该设置 为 drwxr_xr_x, 即755, 而html下的文件的权限设置为; 644 即可!

  2. -x 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。

  3. -w权限, 可以

  4.  umask [-p] [-S] [mode]
    The user file-creation mask is set to mode.

The -S option causes the mask to be printed in symbolic form;

  1. 默认的系统的umask是0002, 即: 目录的权限是775, 而文件的默认权限是 664.

    但是, 为了减少 组 的权限, 应该将组的 -w权限减去, 即将umask设置为 0022, 即目录的权限设置为 755, 而文件的权限设置为 644.
在默认权限上,文件和目录是不一样的,
对于一个目录,x权限是非常重要的 ,而对于一个文件,x权限在默认是不应该有的,因为文件大多是用来存储数据的
,所以在linux中,文件的默认权限应该是644,目录的默认权限是755 要注意的是umask的分数指的是“默认值需要剪掉的权限”, 所以新建文件时权限:rw--r--r-- 新建目录:rwxr-xr-x

彻底地/ 终于地,  解决 关于apache 权限的问题了::  修改 DocumentRoot后的 403错误: have no permission to access / on this server

实际上, /etc下的所有文件/文件夹, 都是 属于root:root的! 要编辑这些东西, 都需要 root权限.

如果提示, 不能连接" unable to connect server" 就修改 ServerName 为: localhost:80 即可解决.

使用 su -c 操作的文件/目录, 包括: mv, cp等操作, 文件/目录对象 (包括 嵌套的 子目录/文件) 都成了, 自动转换为 root:root 的所有权.

cp 操作目录的时候,需要加 -R, 但是mv本身就可以直接 操作目录, 即移动 目录的时候, 不需要加-R 选项. 直接就可以了.

mv是: move, 而rm 则是 : remove 删除的缩写.


如何区别httpd 2.2 还是2.4

只要通过, 权限语句:

如果是 Order Allow, Deny ...则是2.2

如果是 require all granted, 或者 denied , 则是2.4.

在多个比较深的目录层次 之间进行切换的时候, 使用的是: pushd, popd, 和 dirs命令: 参考: http://blog.163.com/benben_long/blog/static/199458243201211334556266/

cd - : -表示 $OLDPWD, 是表示上一个目录. 所以, cd - 总是在当前目录和上一个目录之间切换.

注意, directories stack: 会一直保存, 在pushd 命令的中间, 使用 cd命令的时候, 并不会清空 目录栈, 只是 替换栈中 的 最上面的 (第一个index=0)的那个目录...

单独的pushd命令, 会将 dirs 目录栈中的 第0个目录和第1个目录交换, 并切换到 第1个目录.

而当前目录总是位于 第0个, 即第0个 总是 当前目录!

在dirs栈中切换目录的时候, 要使用 pushd +n, 必须带这个加号, 这时候, 才会到 目录栈中去 查找目录. 否则, 如果不带 + 号, 则认为是一个 "目录实体", "实体目录", 就会认为是 "pushd 2, 切换到名字为 "2" 的这样 的目录, 自然没有这个目录而报错"

pre'requisite [pri' rekw2zit] n. adj. 前提条件; 先决条件, 前提的, 必要的...

mangle pages: (严重)破坏页面..

一般要注意, 关于程序 升级: upgrade的事情 , 一定要谨慎 最好是别作, 否则可能会 因为 包与包之间的 版本不一致, 而导致 出现各种问题!

彻底地/ 终于地,  解决 关于apache 权限的问题了::  修改 DocumentRoot后的 403错误: have no permission to access / on this server


linux的目录,不必加上最后面的 slash" /

apache的 虚拟目录: 就是 目录别名: alias, 跟虚拟主机 是不一样的!

登陆phpmyadmin的方法是:

authz是什么意思 : authz: 是 authentication的简写!

在给php文件命名的时候, 可以根据文件的性质, 在php的前面加上 .inc.php, .xml.php, .css.php等命名方法.


突然醒悟到/ 领悟到 : 在shell中自定义函数 或命令, 是多么重要 和必要啊, 为了提高工作/操作效率和方便, 如果没有这个, 那么你管理apache, mariadb, firewalld等是多么痛苦啊!必须要自己写: 进行自定义的函数和命令!!

比如要在 su -c 'dnf install package_name_parameter' 中, 定义一个 命令/函数, 给 传递 包名称 参数. 这里就不能用 alias来实现了, 因为要作为参数来传递, 所以需要定义一个用户自定义函数:

function  sidnf()
{
if [ $# -eq 0 ] ; then
echo 'Usage: sdnf PKG_TO_INSTALLED ...'
exit 1
fi si='dnf install '$1
su -c "$si" #### 这里必须加双引号! 不加或加单引号 都要出错!!!
## exit 这里不必显式的写exit, 让dnf的返回值作函数的返回值
}
  1. 创建函数的语法,不必用function来声明,直接写,因为当shell检测到:小括号和大括号的时候,自动认为是一个函数了:foo(){...}

    (当然, 也可以照顾php中的习惯, 在函数名前可以加上 function 关键字)

1. 可以直接在.bashrc中书写函数,
但是更为专业的写法是: 建立专门的 ~/bin目录,存放自定义命令文件,或者建立~/lib/sh/目录,专门存放自定义的shell 函数。
使用方法: 一是, 将他们加入到$PATH中; 二是, 或者加入到 .bashrc, 用 source 或. 点命令的方式执行 ; 三是, 在 其他脚本中, 引用 /调用 lib中的函数库!

1. 如果是在 foo.sh中使用函数,第一, 先定义函数, 其次, 调用函数: 调用方式是: myFunc para1 para2, 注意不需要加括号!

深刻理解 "函数库"?

  1. 其实 ~/lib/目录下的 就是一个/多个 文件!
  2. 因为这个文件中,包含了很多个函数,所以叫函数库

    lib的意思: library, 库目录(就是一个文件集合的意思),里面可以存放 多个按目的/用途/模块等进行分门别类的 .sh /.c/.php/.class文件,分别叫做:sh库,c函数库, php函数库, php类库。

调用函数库中的函数?

#!/bin/bash
### include lib
. ~/lib/sh/libMYFUNCS.sh // 调用库函数, 就是直接执行 库中的函数 文件.
### use function from lib
printUSERDETS
### exit script
exit 0

函数定义的语法:

[ function ] funname [()]

{

    action;

    [return int;]

}

1、可以带function fun() 定义,也可以直接fun() 定义, 注意:定义时不带任何参数!可以在函数内部直接使用 参数代表符, 或参数占位符!$0.$1,....$n

2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)


1、shell脚本中, 必须在调用函数地方之前,声明函数,shell脚本是逐行运行。shell不会像其它语言一样先预编译(所谓 预编译, 就像 预先 通知一样 , 这样即使函数是在调用的 位置后面, 也有效, 而不会出错) 。一次必须在使用函数前先声明函数。

2、total=$(fSum 3 2); $()就是执行命令的另一种表示方式,它是命令,因此 各个输入参数直接用 空格分隔。

函数/命令里面获得参数方法可以通过:$0…$n得到。 $0代表函数本身。

3、函数返回值,只能通过$? 系统变量获得,直接通过=,获得是空值。其实,我们按照上面一条理解,知道 函数其实就是 一个命令,在shell获得命令返回值,都需要通过$?获得。

shell中字符串的连接?

  1. 不用任何连接符号, 比如: . + 什么的, 而是直接将字符串 挨着写就是了
  2. 直接将两个字符串挨着写, 但是变量要使用 ${var} 的形式, 注意跟php变量的形式区别:php的变量是将整个 部分包括$ 放在大括号中的, 如: {$PHP}
  3. 变量用{}的母的, 只是 为了 区分 (变量在 "贪婪匹配"解析)的 时候, 将后面要链接的字符串也 当作变量名来处理,避免出错, 因此, 如果要连接的变量是放在最后面的话, 就不必使用 大括号进行分隔!

    彻底地/ 终于地,  解决 关于apache 权限的问题了::  修改 DocumentRoot后的 403错误: have no permission to access / on this server

鼠标和 光标: 不是一回事. 光标总是那个 "闪烁的短线", 不会变; 而鼠标 是用来 引导 光标的 , 而且其形状会 随时改变的.


如何定义"永久性" 的umask?

  1. 有一个 显示 用户id的系统变量: $UID. 在 if [ ... ]; then 格式中, 分号 可以紧跟着 后中括号 ].
  2. umask 是一个builtin命令, 是命令, 既然是命令, 设置的格式就是 : umask mode 就不能是 : umask=mode 的方式了. 因为后者 umask=mode的方式 是用来 定义 "变量的" ,不是命令!
  3. 如果在 shell中 使用 umask mode的方式来 定义umask, 只能是临时的, 关闭shell后, umask又恢复了默认值,
  4. umask的默认值: 在 /etc/profile 文件中定义的!

    彻底地/ 终于地,  解决 关于apache 权限的问题了::  修改 DocumentRoot后的 403错误: have no permission to access / on this server

其中: if [ $UID -gt 199 ] && [ "id -un" = "id -gn" ]; then 数字比较大小用 -gt等表示, 而字符串比较可以直接用 等号= ; 注意 引号+反引号的使用; 表示 大于199 的用户并且 用户和组同名的, 使用 0002, 否则使用 0022. 比如: 你用 普通用户来查看umask, 看到普通用户设置的 是 0002, 而root查看 , 可知root用户 设置和 使用的就是 0022: 也就是说, root用户创建的东西, 对root组的权限限制更严, root组是没有-w写权限的(by default). 而普通用户的东西, 对组权限就要松些, 可以有-w权限, 这主要是因为root的东西更敏感, 跟安全的关系更大!

彻底地/ 终于地,  解决 关于apache 权限的问题了::  修改 DocumentRoot后的 403错误: have no permission to access / on this server

  1. 因此, 如果你想永久性地修改umask, 就在 /etc/profile中, 或~/.bashrc中, 使用 命令: umask 0022 而实际上 是可以不需要更改的!!!

关于 , '', "" 三种转义符号的根深层的理解

  1. 转义能力是逐渐减弱的, 而 单引号是 除了 回车符之外, 可以转义其他所有特殊字符的, 比如: 可以转义$,所以 要输出变量就不能放在 单引号内, 单引号中的变量引用 $foo就要失效; 比如 反引号,单引号中的 反引号命令就不能被只相信! 而双引号 的能力, 就较弱的多 它主要是用来 界定字符串的, 表示他内部 东西, 是一个 字符串整体而已! 但是 $foo变量引用/ 反引号命令等都是有效 的!
  2. 也就是 总之, 一点 , 要在 shell脚本中 , 使 引号内的 变量/命令, 要有效的话, 都要使用 双引号 ! 所以, 你看到 在 shell中, 基本上很少使用 单引号的, 大多使用双引号, 就是 为了更灵活/ 更方便的 使用 变量引用/ 反引号命令.

为什么 su -c '$cmd' 没有执行命令, 马上返回, 甚至没有报错呢?

一 个 原因: 就是 在 命令中, 如果放在单引号中, 通常 只允许 字母和数字, 一般不允许 有特殊字符, 如!, @ # $ 等. 要么这些特殊字符, 解析出错, 要么直接认为 "该命令" 不认识, 不能识别, 就相当于 空的字符串, 空命令: 等同于 : su -c '' 所以, 就直接返回, 直接结束, 连报错都没有.

彻底地/ 终于地,  解决 关于apache 权限的问题了::  修改 DocumentRoot后的 403错误: have no permission to access / on this server