基本权限、附加权限及访问控制列表ACL

基本权限

基本权限的类别

访问方式(权限)

用户在访问一个目录或文件时,由设置的访问权限+归属关系共同决定最终权限访问权限

Ø 读取(r):允许查看内容read(4)    能够通过ls、cat、less、head、tail浏览此目录内容

Ø 写入(w):允许修改内容write(2)   执行rm/mv/cp/mkdir/touch/vim…等更改目录内容的操作

Ø 可执行(x):允许运行和切换execute(1)  能够cd切换到此目录   文本文件./ (相当于双击)可以运行

文档权限适用对象(归属)

所有者u:拥有此文件/目录的用户user

所属组g:拥有此文件/目录的组group

其他用户o:除所有者、所属组以外的用户other

查看权限:使用ls -l 命令

          ls -ld 文件或目录

[root@server0 ~]# ls -ld /etc/resolv.conf /usr/src

-rw-r--r--.   1  root  root   94  8月 18 08:32  /etc/resolv.conf

drwxr-xr-x.   4  root  root   32  5月   7 2014  /usr/src

 -:文本文件    d:目录    l:快捷方式 

文档的类别 权限位  硬连接数 属主 属组   大小  最后修改时间  文件/目录名称

ls -l输出结果中的第1个字符,表示文档的类别:

-:普通文件   d:目录   l:软连接  

b:块设备(磁盘、分区...)    c:字符设备(键盘、终端...)

权限位前3位数——user属主

权限位中3位数——group属组

权限位后3位数——other其他

#######################################

Linux判别用户的权限思路

   1.判别用户的角色     所有者>所属组>其他人    匹配即停止

   2.查看相应权限位的权限

#########################################

目录和文件的默认权限

1)新建目录时手动指定:mkdir  -m  755 文件夹路径 :rwxr-xr-x 755

2)根据umask值自动设置:

查看权限掩码值(自动去除的权限):umask

查看权限值(默认权限):umask  -S

新目录的权限 = 777 - umask掩码

新文件的权限 = 666 - umask掩码 【安全起见,文件默认不给x权限】

       例:新建文件:rw-r--r-- 644

无任何权限:--------- 000      有任何权限:rwxrwxrwx 777

x与r是一般是成对出现的,一般不会有只有x权限而无r权限的用户。

#########################################

设置基本权限

格式:chmod [-R] 归属关系+-=权限类别 文档…           ugoa+-=rwxst 

[-R] 递归修改权限

以root用户新建/nsddir/目录,在此目录下新建readme.txt文件,并进一步完成下列操作

1)使用户zhangsan能够在此目录下创建子目录 :    chmod o+w  /nsddir/

2)使用户zhangsan不能够在此目录下创建子目录:    chmod o-w  /nsddir/

3)使用户zhangsan能够修改readme.txt文件:      chmod o+w  /nsddir/readme.txt

4)调整此目录的权限,使所有用户都不能进入此目录: chmod u-x,g-x,o-x  /nsddir/

5)为此目录及其下所有文档设置权限 rwxr-x---: chmod -R  u=rwx,g=rx,o=---  /nsddir/

设置文档归属

格式:chown [-R] 属主 文档…

      chown [-R] :属组 文档…    

      chown [-R] 属主:属组 文档…  或属主.属组 二者作用相同

[-R] 递归修改权限

[root@server0 /]# mkdir /nsd02

[root@server0 /]# ls -ld /nsd02/     

[root@server0 /]# groupadd stugrp    #创建stugrp组

[root@server0 /]# chown zhangsan:stugrp  /nsd02    #修改所有者和所属组

[root@server0 /]# ls -ld /nsd02       #每一次修改,均看一下权限变化

[root@server0 /]# chown root /nsd02   #修改所有者

[root@server0 /]# chown :users /nsd02  #修改所属组

案例:以root身份新建/tarena目录,并进一步完成下列操作

1)将属主设为gelin01,属组设为tarena组:      

useradd gelin01        groupadd tarena chown        gelin01:tarena  /tarena

2)使用户gelin01对此目录具有rwx权限,其他人对此目录无任何权限: chmod o=--- /tarena

3)使用户gelin02能进入、查看此目录(将gelin02加入tarena组):

 useradd gelin02       gpasswd  -a  gelin02  tarena

4)将tarena目录的权限设为r--r-x---,再测试gelin01用户能否进入此目录:

chmod u=r--,g=r-x,o=---  /tarena

若对目录有w权限,表示可在该目录下新建/删除/移动文件或子目录,对目录本身不具备改名权限。

###############################################################################

附加权限

除了 r、w、x之外的其他标识 s、t

Set UID(s)  4 —— 程序文件,使程序的执行者拥有程序的拥有者的权限/身份

Set GID(s)  2—— 程序文件/目录,使目录的属组自动设置给目录下的新文档

Sticky Bit(t)  1 —— 公共目录,禁止普通用户滥用w权限

##########################################

    如何设置SUID:chmod  4755 ...

    如何设置SGID:chmod  2755 ...

    同时设置SUID、SGID:chmod  6755  ...

如何设置粘滞位:chmod  1777 ...

##########################################

Set UID    ——附加在属主的x位上

Ø属主的权限标识会变为s    s代表具有附加权限s和执行权限x; S代表仅具有附加权限s

Ø适用于可执行文件,可以让使用者具有文件的身份及部分权限

Ø传递所有者身份    尚方宝剑

例:/usr/bin/passwd

Set GID     ——附加在属组的x位上

Ø属组的权限标识会变为s    s代表具有附加权限s和执行权限x; S代表仅具有附加权限s

Ø适用于可执行文件,功能与Set UID类似

Ø适用于目录,可以使目录下新增的文档自动设置为和父目录相同的属组,即传递程序所属组的权限、使属组身份向下继承    (工作中经常会使用到

例:/run/log/journal/

[root@server0 ~]# mkdir /nsd05

[root@server0 ~]# ls -ld /nsd05

[root@server0 ~]# chown :stugrp /nsd05

[root@server0 ~]# ls -ld /nsd05

[root@server0 ~]# mkdir /nsd05/test01

[root@server0 ~]# ls -ld /nsd05/test01     #默认父子目录是没有继承的

[root@server0 ~]# chmod g+s /nsd05/       #附加Set GID权限

[root@server0 ~]# ls -ld /nsd05/

[root@server0 ~]# mkdir /nsd05/test02

[root@server0 ~]# ls -ld /nsd05/test02     #新增的子目录继承父目录权限

Sticky Bit粘滞位    ——附加在其中人的x位上

Ø其他人的权限标识会变为t

Ø适用于开放w权限的目录,可以阻止用户滥用w权限(禁止操作别人的文档)(工作常用)

例:/tmp、/var/tmp

测试粘滞位:

1)新建一个目录 /public ,权限设为 rwxrwxrwx

   mkdir /public     chmod u=rwx,g=rwx,o=rwx /public   

2)新建一个文件  /public/root.txt,查看属性 【-rw-r--r-- root、root组】

3)切换到一个普通用户 natasha,尝试删除 /public/root.txt 【能】 

4)由用户 natasha 新建一个文件  /public/natasha.txt  【能】

5)由root用户为 /public 设置粘滞位( chmod o+t /public)

6)切换到另一个普通用户 harry,查看文件/public/natasha.txt 属性

7)用户 harry 尝试删除 文件/public/natasha.txt  【不能】

8)用户 harry 尝试新建文件/public/harry.txt  【能】

设置附加权限 

Øchmod u+s[,g+s]  文档…        

Øchmod o+t 目录…

###############################################################################

用户新建文档的默认归属:

谁创建,谁拥有(用户名、基本组)

设置Set GID权限以后:谁创建,文档都属于此目录的属组

关于目录权限的继承

    强制继承:

chmod  -R ... /parent/

chown  -R ... /parent/

自动继承:

方法1:调控umask值,适用于当前用户的整个Shell环境

方法2:针对文件夹的归属关系,setuid、setgid

方法3:setfacl  -d -m u:用户名:权限列表  文件或目录...

       setfacl  -d -m g:组名:权限列表  文件或目录...

###############################################################################

案例1:配置附加权限

创建一个某个组的用户共享使用的目录 /home/admins,满足以下要求:

    此目录的组所有权是 adminuser

    adminuser 组的成员对此目录有读写和执行的权限,除此以外的其他所有用户没有任何权限(root用户能够访问系统中的所有文件和目录)

    在此目录中创建的文件,其组的所有权会自动设置为属于 adminuser 组

步骤一:创建目录并调整权限

1)新建文件夹# mkdir  /home/admins

2)调整并确认权限# chown  :adminuser /home/admins

                 # chmod  ug=rwx,o-rwx  /home/admins

    [root@server0 ~]# chmod  g+s  /home/admins

    [root@server0 ~]# ls  -ld  /home/admins/

    drwxrws---. 2 root adminuser 6 12月 23 23:13 /home/admins/

步骤二:验证目录的特性

1)在此目录下新建一个文件# touch  /home/admins/a.txt

2)查看新建文件的归属,其属组应该与父目录相同

    [root@server0 ~]# ls  -lh  /home/admins/a.txt

-rw-r--r--. 1 root adminuser 0 12月 23 23:17 /home/admins/a.txt

###############################################################################

ACL访问控制列表  ——能够对个别用户、个别组设置独立的权限(量身订做权限)

ACL策略的作用

文档归属的局限性

Ø 任何人只属于三个角色:属主、属组、其他人

Ø 无法实现更精细的控制

ACL访问策略

Ø 能够对个别用户、个别组设置独立的权限

Ø 大多数挂载的EXT3/4、XFS文件系统默认已支持

设置acl访问控制策略

getfacl 文档…                                  //查看acl访问控制列表

设置可继承的ACL策略(对新建的子文档有效,不影响已有文档的权限):

setfacl [-R] -m u:用户名:权限类别 文档或目录…        //添加策略

setfacl [-R] -m g:组名:权限类别 文档或目录…

setfacl [-R] -b 文档或目录…                          //清除所有ACL策略

setfacl [-R] -x u:用户 文档或目录...                  //删除指定用户的ACL策略

[-R]可递归修改目标文件夹及其下的所有文档

[root@server0 ~]# mkdir /nsd06

[root@server0 ~]# chmod o=--- /nsd06

[root@server0 ~]# ls -ld /nsd06

drwxr-x---. 2 root root 6 8月  21 15:29 /nsd06 

[root@server0 ~]# su - dc

[dc@server0 ~]$ cd /nsd06                     #切换失败

[dc@server0 ~]$ exit

[root@server0 ~]# setfacl -m u:dc:rx /nsd06    #设置ACL权限

drwxr-x---+ 2 root root 6 8月  21 15:30 /nsd06    #点.变成了+号

[root@server0 ~]# ls -ld /nsd06

[root@server0 ~]# su - dc

[dc@server0 ~]$ cd /nsd06            #切换成功

[dc@server0 ~]$ exit

[root@server0 ~]# getfacl /nsd06

[root@server0 ~]# setfacl -b  /nsd06/    #删除所有的ACL策略

[root@server0 ~]# getfacl /nsd06         #查看ACL策略

[root@server0 ~]# setfacl -x u:lisi /nsd06   #//删除指定的ACL策略(lisi)

###############################################################################

案例1:配置文档的访问权限

将文件 /etc/fstab 拷贝为 /var/tmp/fstab,并调整文件 /var/tmp/fstab的权限,满足以下要求:此文件的拥有者是 root,此文件属于 root 组

          此文件对任何人都不可执行

          用户 natasha 能够对此文件执行读和写操作

          用户 harry 对此文件既不能读,也不能写

          所有其他用户(当前的和将来的)能够对此文件进行读操作

步骤一:复制文件

1)使用cp命令进行复制# cp  /etc/fstab  /var/tmp/fstab

2)确认复制后的权限# ls  -l  /var/tmp/fstab 

    -rw-r--r--. 1 root root 313 12月 23 23:01 /var/tmp/fstab

说明已经满足案例要求的前三条和最后一条。

步骤二:调整权限

1)增加额外的访问控制策略

用户 natasha 能够对此文件执行读和写操作# setfacl  -m  u:natasha:rw  /var/tmp/fstab

用户 harry 对此文件既不能读,也不能写# setfacl  -m  u:harry:-  /var/tmp/fstab

2)确认结果

    [root@server0 ~]# getfacl  /var/tmp/fstab

请思考:临时目录 /tmp,所有人都有rwx权限,面临的问题(w权限滥用)?

        用户的密码存在 /etc/shadow,面临的问题(普通用户怎么改自己的密码)?

###############################################################################

你可能感兴趣的:(Linux)