linux权限

linux文件权限概述

一个文件有三种类型权限 分别为: r w x 分别为读写执行权限
有三种角色, 分别是所有者, 所属组, 其他人, 每个角色有各自的读写执行权限,

每种类型, 如读, 有两种可能性, 可读或者不可以读, 则最多有 2*2*2 八种可能性
用0-7 八个数可以表示八种可能性
如 7 = 2^2 + 2^1 + 2^0 则为 rwx
6 = 2^2 + 2^1 + 0 则为rw-

默认创建文件最大权限为666(rw-rw-rw-)
默认创建目录最大权限为777(rwxrwxrwx)

系统通过设置/etc/profile下的umask确定新创建文件或者目录的最高权限

umask = 0022
即 022 = ----w--w-
如新创建文件, 权限为 rw-rw-rw-  -  ----w--w-  = rw-r--r--

linux中文件和目录的rwx代表的意义不一样

文件

r读: cat tail  more  head 查看文件内容
w写: 编辑 vi  echo >> 
x执行:  ./文件

目录

r读: ls ll 查看目录下内容
w写: 对目录下的内容进行操作 , 如cp, rm, mv
x执行: cd . 能否进入到目录中

acl权限

创建目录: mkdir aaa

给lw设定文件acl权限rx

setfacl -m u:lw:rx aaa/

drwxrwx---+ 2 tony student 4096 12月 24 23:12 aaa

获取文件acl权限

getfacl aaa

# file: aaa
# owner: tony
# group: student
user::rwx
user:lw:r-x
group::rwx
mask::rwx
other::---

mask值是控制最大权限的 实际有效权限, 需要和mask权限相与 &
setfacl -m m:rx aaa

//递归实现acl权限
setfacl -m u:lw:rx -R apa
setfacl -m g:student:rx -R apa

// 设置目录的默认acl权限
setfacl -m d:u:lw:rw -R apa

sudu权限

sudo权限是对命令权限进行限制, 让普通用户以超级管理员的身份去执行某些命令

编辑sudo文件

visudo //实际修改/etc/sudoers文件

//用户
tony ALL=(ALL)  /sbin/ifconfig

//组
%student ALL=(ALL)  /sbin/ifconfig

//切换到tony 
su - tony

//查看sudo命令
sudo -l

//sudo 命令  表示以超级管理员的身份运行该条命令
sudo /sbin/ifconfig

特别注意

visudo
tom     ALL=/usr/bin/useradd
tom     ALL=/usr/bin/passwd
tom     ALL=/bin/vi
// 如果不显示tom的密码权限, tom可以通过执行
// sudo passwd  或者   sudo passwd root 来修改用户密码, 一定要小心

//应该这么写, 防止用户将超级管理员的密码更改, 服务器送给别人
tom     ALL=/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root

// 

如果sudo vi 将会是以超级管理员的身份运行vi命令, 灾难性的后果

SetUID

给执行文件授予setUID权限, 在执行文件时, 默认会以文件所有者的权限执行

  • 只有可以执行的二进制程序才能设定SUID权限
  • 命令执行者要对该程序拥有x(执行)权限
  • 命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中, 灵魂附体为文件的属主)
  • SetUID权限只在该程序执行过程中有效, 也就是说身份改变只有程序执行过程中有效
chmod 4755 /bin/vi
执行该条命令后, /bin/vi命令拥有SetUID权限
则其他用户在执行/bin/vi时, 会灵魂附体, 变身root, 非常危险 如 : /bin/vi shadaw

ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 2月  22 2012 /usr/bin/passwd
//增加SetUID权限
chmod u+s a.php

-rwSr--r--.  1 root root    17 12月 18 22:59 a.php

// 减掉
chmod u-s a.php

SetGID

给可执行文件赋予SetGID权限, 文件在执行时, 默认会以文件所属组的身份执行, 例如


locate 查找命令, 是有setGID权限
/usr/bin/locate权限为 rwx--s--x.

而/var/lib/mlocate/mlocate.db权限为-rw-r-----.
普通用户没有写权限,
当普通用户执行时locate命令时, 会以locate所属组slocate去执行,
而/var/lib/mlocate/mlocate.db所属组也是slocate, 对该文件有查看权限, 即可以执行locate命令


授予SetGID权限

chmod 2755 a.php

Sticky BIT

SBIT只对目录有效, 一般设置在777的目录上, 即普通用户对该目录拥有写入权限, 即可以删除该目录下其他人创建的文件, 赋予了BIT粘着位权限, 出root可以删除所有文件, 其他人只能删除自己在该目录创建的文件, 如tmp目录, 所有人都可以创建, 但自己删除自己创建的文件

drwxrwxrwt.   4 root root  4096 12月 26 21:49 tmp

实例

[root@localhost ~]# cd /home/uar/
[root@localhost uar]# mkdir test
[root@localhost uar]# ls
test

[root@localhost uar]# ll
drwxr-xr-x 2 root root 4096 12月 26 23:04 test

[root@localhost uar]# chmod 777 test
[root@localhost uar]# ll
drwxrwxrwx 2 root root 4096 12月 26 23:04 test

[root@localhost uar]# chmod 1777 test
[root@localhost uar]# ll
drwxrwxrwt 2 root root 4096 12月 26 23:04 test

[root@localhost uar]# cd test
[root@localhost test]# touch a.php
[root@localhost test]# ll
总用量 0
-rw-r--r-- 1 root root 0 12月 26 23:05 a.php

切换至uar, 去删除a.php, test为777

[tom@localhost ~]$ su - uar
密码:

[uar@localhost ~]$ ll
drwxrwxrwt 2 root root 4096 12月 26 23:05 test

[uar@localhost ~]$ cd test/
[uar@localhost test]$ ls
a.php
[uar@localhost test]$ rm -rf a.php
rm: 无法删除"a.php": 不允许的操作

chattr属性

选项 i:

  • 如果对文件设置i属性, 那么不允许对文件进行删除, 改名, 也不能添加和修改数据
  • 如果对目录设置i属性, 那么只能修改目录下文件的数据, 但不允许建立和删除文件

选项 a:

  • 如果对文件设置a属性, 那么只能在文件中增加数据, 但是不能删除和修改数据; 使用echo aaa >> 文件
  • 如果对目录设置a属性, 那么只允许在目录中建立和修改文件,不能删除

给文件设置chattr属性

    chattr +i a.php

移除chattr属性

    chattr -i a.php

查看chattr属性

    //查看文件
    lsattr -a a.php
    // 查看目录
    lsattr -d dir
[root@localhost test]# lsattr -a cls
----i--------e- cls
[root@localhost test]# lsattr -d dir
----i--------e- dir
[root@localhost test]# rm -rf dir
rm: 无法删除"dir": 不允许的操作

你可能感兴趣的:(linux权限)