linux学习之旅(六)&玩转权限

让文件随你心动——玩转权限


1.文件属性

查看 文件属性:

解释属性各部分含义:

 ##-##rw-r--r-- ##1 ##kiosk  ##kiosk ##0 ##Jul 22 14:14 ##westos

##(文件类型:普通文件,之前介绍过)##(权限) ##(文件被系统记录的个数,硬链接)##(用户) ## (组) ## (大小) ## (最后被修改时间) ## (文件名)

查看目录属性:

各部份含义:

##d##rwxr-xr-x ##11  ##kiosk  ##kiosk  ##8192  ##Jul  22  14:14  ##Desktop 

##(文件类型:目录)##(权限)##(目录中子目录的个数) ##(用户)##(组)##(目录中包含的子文件或属性大小)##(时间) ##(目录名)

*属性中的属性大小,即下图中数字6的统计办法:

  • 文件数一下 ls- l west/ 时里面成分数
  • 目录:按它的字符个数数,是空的时候如果是6 创建 west/111 ,文件名字符数为 3,由于文件属性的成分数是 10 ,则变成 16

2.文件所有人所有组的管理

格式:
chown [-R]  账号名称:文件或目录
chown [-R]  账号名称:用户组名称、文件或目录
用法:
chown    username       filename|dir    ##更改文件的所有人
chown    username.groupname filename|dir    ##更改所有人所有组
^<==>v
chown username:groupnane  filename | dir           ##更改所有人所有组
chown -R username       dir     ##更改目录本身及里面所有内容的所有人
chgrp -R groupname      dir     ##更改目录本身及里面所有内容的所有组

##文件拥有者必须已经存在于系统中们也就是在/etc/passwd这个文件中有记录的用户名称才可改变!

演示:

  • 首先新建ugo目录并监控目录和目录下文件的属性
watch -n 1 'ls -ld ugo ; echo ============= ; ls -l ugo'
  • 建立五个文件,用户初始所属用户所属组。
  • 测试5个命令的功能

3.文件普通权限

         |"rwx"|"rwx"|"rwx"|

   对应: |  u  |  g  |  o  |

u:文件所有人对文件可以读写 , 匹配时优先匹配
g:文件组成员对文件可读 , 匹配时第二匹配
o:其他人对文件可读 , 当 g 不匹配,匹配 o
a : 所有用户(包括以上三种)

所有用户(包括以上三种)

  • r : 对文件:可以查看文件中的字符
    对目录:可以查看目录中文件的信息

  • w : 对文件:可以更改文件内字符
    对目录:可以在目录中添加删除文件
    // 简单来说,wq! 只对超级用户和文件所有者有用 —– 这就是读权限

  • x 对文件:可以运行文件内记录的程序动作
    对目录:可以进入目录中(对目录而言,x是任何命令都要有的,即有了x才会有rw)
    // 内核认为,默认创建的文件是没有可执行权限的。为了安全。目录给执行权限x

*修改文件权限

  • 使用chmod命令改变文件的属性,属性的设置方法有两种,分别可以使用数字或者是符号:
  • Linux 文件的基本属性有9个,分别是 owner/group/others组别的read/write/excute属性。

(1)字符方式修改该文件权限

格式:
chmod   [-R] <u|g|o><+|-|=><r|w|x>    file|dir  
## + 增加权限
## - 取消权限
## = 唯一设定权限

用法:
chmod u+x file1         ##给file1的用户添加权限
chmod u-x,g+w file1     ##file1拥有者去掉x权,file1拥有组添加w权限
# 修改多个权限时,每个修改之间以逗号隔开
chmod ugo-r file2       ##file2的用户组和其他人去掉r权限
# 若对多个所属修改同一个权限时,可以将ugo写在一起
chmod a+wx file3                ##file3的用户组和其他人添加wx权限
# a 就等同于 ugo 

演示:

tips:
三个权限中,w是一个特殊的权限。chmod +w权限之后默认只会给 u g 加,不会给o加,需要a+w 或 ugo-w 才会给ugo都加上权限。

(2)数字方式修改该文件权限

  • 当需要给一个文件指定所有权限时,以数字方式修改权限就非常的便捷.
  • 在linux中:系统默认 rwx 分别对应 4,2,1
用法:
chmod   修改后权限值  file
//其中,每三位rwx权限分别对应为:
"7=rwx"  "6=rw-"  "5=r-x"  "4=r--"  "3=-wx"  "2=-w-"  "1=--x"  "0=---"
//设定一个文件对所有用户都有读,写,执行的权限。
chmod    777    filename
//取消一个文件所有的权限。
chmod    000    filename

4.系统默认权限的设定

  • 从系统存在角度来说,开放权力越大,系统存在意义越高
  • 从系统安全角度来说,开放权力越少,系统安全性越高
  • 所以系统设定新建文件或目录会去掉一些权限

当进程创建了新文件时,它会指定新文件应该具有的权限。通常,所请求的模式是 0666(每个人可读和可写),它比我们希望的具有更多的权限。幸运的是,不管什么时候创建了新文件,Linux 将参考叫做“umask”的东西。系统用 umask 值来将初始指定的权限降低为更合理、更安全的权限。可以通过在命令行中输入 umask 来查看当前的 umask 设置。

设定方式 :

umask       ##查看系统保留权限。系统默认为"022"
umask 077   ##修改该系统保留权限为"077",此设定为临时设定,只在当前shell中生效,当环境改变,比如重新打开或重启,就又还原默认值了。

*其中x权限是内核保留的,不是umask可以改变的
*系统中,目录权限值 — 文件权限值 = 111(内核规定)

永久设定方式:

##修改第一个文件:
vim /etc/bashrc     //shell配置文件
 70     if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
 71        umask 002    ##普通用户umask
 72     else
 73        umask 077    ##超级用户umask                   
 74     fi
 保存退出后:  source /etc/bashrc     ## source:使文件立即生效
##修改第二个文件:
vim /etc/profile       //系统配置文件
 59 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
 60     umask 002   ##普通用户umask
 61 else
 62     umask 077       ##超级用户umask                    
 63 fi
 保存退出后:   source /etc/profile    ##使文件立即生效

注: 以上两个文件的umask设定值必须保持一致,要改两个一起改。因为是配置文件,所以不一致会使系统出现问题。


tips:

虽然umask默认值可以改,但是系统设置的原始初始值是有他的好处的:

   之前说过,为了安全,默认创建的文件不具有x权限,一般可以看到的文件权限为 rw--- r------r------,即644。那么,目录权限是755。所以umask默认权限是022。这是有依据的非常合适作为默认值的。而且,在创建文件时,如果真的要改变创建文件的默认权限,其实只需要临时改就行。因为只要当前默认权限设定好,创建出来的文件权限值就相应改变,而且不随系统环境变化而变化,改了就是永久的,所以一般非特殊情况下尽量不用去永久设定他的默认值。

5.文件访问控制(acl列表)

1.acl定义

acl = access control

它指定特殊用户对特殊文件有特殊权限

当文件位的权限有 + 的时候,+ 位表示文件是有权限列表的。

//如图,则此时-rw-rwxr- - 后面的 + 表示文件ooo是有权限列表的。

*当文件上有权限列表时,ls -l 能看到的权限是假的,只能用getfacl命令去看

格式  :   
getfacl  filename

[kiosk@foundation77 Desktop]$ getfacl ooo 
# file: ooo                           ##文件名称
# owner: kiosk                        ##文件所有人
# group: kiosk                        ##文件所有组
user::rw-                             ##拥有者权限
user:kiosk:rwx                        ##特殊用户权限
group::rw-                            ##组权限
mask::rwx                             ##权限掩码 : 最大可以为用途提供的权限
other::r--                            ##其他人权限

2.设定acl列表

设定:

setfacl -m <u|g>:<username|groupname>:权限    file | dir
( < >括起来的表示必须添加 )
-m  #设定
u   #用户
g   #组

删除列表中的用户或者组:

setfacl -x <u|g>:<username|groupname>   file | dir   ##表示这个文件或目录的组删掉

关闭列表中的用户和组:

setfacl -b   file | dir           ##关闭这个列表

在shell中简单实现一下:

  • 先创建ooo普通文件,并监控属性及权限列表,发现开始时没有+号。
[kiosk@foundation77 Desktop]$ watch -n 1  'ls -l ooo;\
> echo  ======================================;
> getfacl   ooo'
  • 开始建立权限列表,发现权限的后面多出了+号,并且user添加了权限为7的kiosk用户
  • 发现-m参数还可以重新更改设定了的用户权限列表,又添加了两个用户。
  • 删除kiosk的权限
  • 关闭权限列表,发现+号也随之消失了。

acl mask值
  • mask : 权限掩码
  • 用来标实能够赋予用户的最大权限。即若mask为r-x,那么用户最大权限也是r-x,对文件不能添加删除。
tips :

一般在设定acl列表时,容易出现一个问题:
*在权限列表还存在时,ls -l 显示的东西是假的,此时,如果使用 chmod 命令修改文件权限,其实只会改变文件的权限掩码,从而破坏了文加的普通权限。


//可以看到, 显示了effictive:r——
//重点是,权限掩码变成了r——,即此时文件的权限最大值被破坏了。

如何修复?
setfacl -m m:rwx filename(被破坏的文件)     ##给权限掩码赋值 ———— rwx


acl 默认权限

当我们需求某个目录对于student可写,并且目录中新建的子目录对student也可写,就要设定默认默认权限

注: 默认权限只对目录中新建立的文件或者目录生效,对已经建立的文件无效,对于目录本身也无效

setfacl -m d:u:kiosk:7  ooo
  • 先对ooo及ooo目录下权限列表进行getfacl查看,用watch监控。
[kiosk@foundation77 Desktop]$ watch -n 1  'getfacl ooo;\
echo  ======================================;
getfacl   ooo/*'
  • 先对ooo文件夹运行命令,开始ooo下还没有文件
  • 添加了子文件ooo,ooo/*显示出来了,并且,实现了权限继承。

6.特殊权限

1.suid(冒险位)

讲解冒险位之前,我们先了解一个问题:

众所周知,/etc/passwd文件存放的各个用户的账号与密码信息,/usr/bin/passwd是执行修改和查看此文件的程序,但从权限上看,/etc/passwd仅有root权限的写(w)权,可实际上每个用户都可以通过/usr/bin/passwd命令去修改这个文件。
这是为什么呢?
查看了下/etc/passwd 与/usr/bin/passwd权限

发现/usr/bin/passwd 下的用户权限中,本来 x 的位置变成了s,这一位就是冒险位,这个问题的解释就是冒险位的作用。

  • 冒险位只针对二进制可执行文件,
  • 文件内记录的程序产生的进程的所有人为文件所有人,和进程发起人身份无关
设定方式:
chmod u+s file

chmod 4xxx file     //因为 suid=4 ,所以还是可以以数字方式设置冒险位。

举一个例子,

chmod   4700   /etc/rm   
//--->退回普通用户,就可以删除本来没有权限删除的文件,因为此时执行的人会被系统认为是root
  • 不过, 即使你拿到了这个文件(我经常将设置冒险位称为普通用户拿到了这个文件),删除目标时,如果这个目标对普通用户没有权限,那么这些文件还是删除不了,这是文件内部指定的,不真正是管理员,不能操作,就像你有尚方宝剑,但是你毕竟不能做皇上做的所有事一样,但一般不会出现。
2.sgid(强制位)
  • 对文件: 只针对二进制可执行文件,任何人运行二进制文件 程序时程序产生的进程的所有组都是文件的所有组 ,和程序发起人组的身份无关
  • 对目录:当目录有sgid权限后,目录中新建的所有文件的所有组 都自动归属到目录的所有组之中,和文件建立者所在的组无关
设定方式:
chmod g+s file|dir
chmod 2xxx file|dir    //由于 sgid=2,所以设定2xxx
  • 以root更改所属用户所属组,设定强制位,以root身份建立的子文件所属组还是kiosk
3.sticky (粘制位)
  • 只针对与目录,当一个目录上有t权限,除非目录的属主和root用户有权限删除它,除此之外其它用户不能删除和修改这个目录
设定方式:
chmod o+t direcotry

chmod   1777 direcotry    ##由于 t=1,所以以数字方式设定权限

//比如/tmp目录

tmp目录是所有用户共有的临时文件夹,所有用户都拥有读写权限,但是若A用户在/tmp里创建了文件a.file,此时B用户要在/tmp里把它删除就是不行的,这就是因为/tmp目录的t权限。

* tips:
如果在一些文件设置了特殊权限后,字母不是小写的s或者t,而是大写的S和T,那代表此文件的特殊权限没有生效,是因为你尚未给它对应用户的x权限,加上就好了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值