阅读295 返回首页    go 京东网上商城


Linux档案权限

因为 Linux 是多人多工的 OS, 所以, 档案系统必须要有一套严密的保护措施, 以免, 因为有意或无意的人为破坏, 造成混乱及损失.

. Linux 将档案分成三种身份、四种权限:

三种身份是:

  • u: 自己(user)
  • g: 和自己同一组的人(group)
  • o: 其它人 (other)

而 a 则是代表所有的人.

每种身份皆有四种可能的权限:

  • r : 读取权 (read)
  • w : 写入权 (write)
  • x :执行权 (execute)

及: (上面这三种权限用得最多, 以下则较少用, 也请尽量不使用, 除非你确实知道你在做啥么?!)

  • s : set user id / set group id 及 t : sticky bit (简称为 sst 模式) 
    4000 : set user id, 2000 set group id, 1000 set sticky bit

Linux 用 9 个 bits 来代表档案的权限, 如下所示:

- - - - - - - - -
- rwx rwx rwx
  拥有人 同组人 其它人

每三个形成一组, 由左至右, 分别代表拥有人、同组人、其它人的权限.

每一组的三个位置, 由左至右为: 读取,写入,执行的权限, 若该位置只有一条线, 则表示不具有该权限.

另外, 我们也用数字来代表不同的权限:

  • 读取: 4
  • 写入: 2
  • 执行: 1

如果某档, 其拥有的权限为 rwx 的话, 那么, 我们便把它们所代表的数字大小加起来, 即 4+2+1 =7

以下是可能的组合:

--- 0
--x 1
-w- 2
r-- 4
-wx 2+1=3
r-x 4+1=5
rw- 4+2=6
rwx 7

因为所有可能的组合, 其权限大小仅 0 ~ 7的范围,

所以, 我们也将它视为一种八进位的数字系统, 并且常常用数字来表示某一个档案的权限开放的程度.

例子:

            拥                       
档          有                               
案          档                              
种          案                   档案大小 最近修改的
类 档案权限 数 拥有人   组别    (byte单位)日期及时间   档案名称

drwx--x--x  7 kv   kv    4096  2月  3 14:25 .
drwxr-xr-x  7 root root  4096  2月  1 11:56 ..
-rw-------  1 kv   kv      10  2月  3 14:25 .bash_history
-rw-r--r--  1 kv   kv      24  2月  1 11:50 .bash_logout
-rw-r--r--  1 kv   kv     191  2月  1 11:50 .bash_profile
-rw-r--r--  1 kv   kv     124  2月  1 11:50 .bashrc
-rw-r--r--  1 kv   kv     238  2月  1 11:50 .emacs
-rw-------  1 kv   kv      88  2月  1 21:27 .forward
-rw-r--r--  1 kv   kv     120  2月  1 11:50 .gtkrc
drwxr-xr-x  2 kv   kv    4096  2月  3 14:19 html
drwxr-xr-x  3 kv   kv    4096  2月  1 11:50 .kde
drwx------  2 kv   kv    4096  2月  1 12:36 mail
drwx------  8 kv   kv    4096  2月  1 12:34 .openwebmail
-rw-------  1 kv   kv   12288  2月  1 21:27 .vacation
-rw-------  1 kv   kv     329  2月  1 21:27 .vacation.msg
drwxr-xr-x  2 kv   kv    4096  2月  3 14:23 webdisk

以上图为例:

webdisk是一个普通的资料夹档案, 其拥有人是 kv, 组别是kv, 该档案的权限是:

  • 拥有人: 可读,可写,可执行
  • 同组人: 可读,可执行 (但不可写)
  • 其它人: 可读,可执行 (但不可写)

用八进位数字来表示, 该档权限为: 755

试问: 以下权限其对应的八进位数字是多少?

rwx--x--x  
r--r--r--  
rw-rw-rw-  
--x--x--x  
rwxrwxrwx  
r-xr-xr-x  

试问: 以下八进位数字其对应的权限为何?

611  
755  
666  
544  
733  
634  

 

2. 改变权限的方法.

有两种改变档案权限的方法:

  • 八进位数字模式
  • 符号模式

使用的指令是: chmod (change mode : change the access permissions of files)

方法如下:

chmod  权限  档案/目录

例:

  • chmod 666 myfile
  • chmod 777 myfile
  • chmod 755 myfile
  • chmod 111 myfile

以上是採八进位数字模式

  • chmod u+x myfile
  • chmod u-x myfile
  • chmod ug+x myfile
  • chmod g-x myfile
  • chmod o+x myfile
  • chmod o-x myfile
  • chmod a+x myfile
  • chmod a-x myfile
  • chmod a=x myfile
  • chmod u=wr myfile
  • chmod go=rx myfile

以上是採符号模式.

+ 表增加该种权限

- 表去掉该种权限

= 表设定作该种权限

3. 目录的权限.

目录的权限, 观念及设法, 同于档案的权限, 但其包含的意义则大不相同.

以 "可执行的" 这个权限而言, 对档案来说, 若该档设为可执行的话, 其意义很容易了解, 但如果将目录设为可执行, 那么难道目录真的是可以执行的吗? :-Q

当然不是.

Linux 对于目录的权限, 另有一套看法:

r 可列出目录中的档案名称, 即 ls 有作用
w 在该目录中, 可删档,改档名,建新档
x 可以进入该目录之中(重要观念, 用处大)

如果某一个目录下, 尚有许多档案和子目录, 有无方法可以一次改变所有的档案权限呢?

当然有.

chmod -R 权限 目录名称

其中 -R 表示 Recursively change permissions of directories and their contents, 意即递迴地将其下的所有档案、目录全数改变.

4. 改变档案的拥有者(owner) 或 组别 (group)

通常这只有 root 等级的使用者, 才有此项权力. (否则就天下大乱了! 不过, 某些 Uuix clone 开放有限制的作法)

方法如下:

chown [-R] owner:group 档案/目录

例:

chown -R 3slo:hacker /home/ols3

 

5. umask(档案的安全滤网).

什么是 umask ? umask 是在新建立一个档案或目录时, 档案权限的遮罩值.

其运作方式是: 将系统的预设值减去 umask 值, 就是最后档案/目录的权限.

一般而言, 新建档案的预设值是 666, 新建目录的预设值是 777, 如果 umask 定为 022,

那么一个新的档案建立时, 其真正的权限应该是 666-022=644

新的目录建立时, 其权限则是 777-022=755

有了 umask 的话, 新建的档案及目录, 会比较安全一点.

如何得知目前的 umask 值是多少呢?

下 umask

原文地址:https://s2.naes.tn.edu.tw/~kv/file.htm

最后更新:2017-04-03 07:57:00

  上一篇:go Swift UI学习之UITableView and protocol use
  下一篇:go 抽象模型,严谨代码,开源分享