本文共 11827 字,大约阅读时间需要 39 分钟。
- 7.1文件的基本权限:r w x (UGO)- 7.2文件的特殊权限:suid sgid sticky和文件扩展权限ACL- 7.3实战:创建一个让root都无法删除的文件- 7.1 文件的基本权限- 7.1.1 权限的作用
通过对文件设定权限可以达到以下三种访问限制权限:
[root@xuegod63 ~]# ll /etc/passwd-rw-r--r--. 1 root root 2053 9月 19 2017 /etc/passwd
文件权限基本解释:
- rw- r-- r--. 1 root root 2053 9月 19 2017 /etc/passwd- rwx r-x r-x user1 user1 time FILENAME
文件类型 拥有者的权限 所属组的权限 其他人的权限 拥有者 属组 最后修改时间 对象
例:
[root@xuegod63 ~]# ll /dev/sda /dev/cdrom /etc/passwd /dev/tty0lrwxrwxrwx 1 root root 3 9月 19 2017 /dev/cdrom -> sr0brw-rw---- 1 root disk 8, 0 9月 19 2017 /dev/sdacrw--w---- 1 root tty 4, 0 9月 19 2017 /dev/tty0-rw-r--r--. 1 root root 2053 9月 19 2017 /etc/passwd
如下效果图:
对于文件来说:
对于目录来说:
举例如下:
每个用户都拥有自己的专属目录,通常放置/home下例2: 你以什么用户身份登录,那么你创建的文件或目录,自动成为该文件的所属主和组
上一次登录:二 9月 19 12:57:21 CST 2017:0 上
[mk@xuegod63 ~]$ [mk@xuegod63 ~]$ touch a.txt[mk@xuegod63 ~]$ ll a.txt -rw-rw-r-- 1 mk mk 0 5月 8 20:58 a.txt
chown
语法:chown user:group filename 比如:chown hr:san a.txt 把文件的属主和属组改为hr,sanchown user filename 比如:chown san a.txt 把文件的属主改为san用户chown :group filename 比如: chown :miao a.txt 把文件的属组改为miao这个组chown user: filename 比如:chown san: a.txt 自动继承这个用户所有的组chgrp hr filename 比如: chgrp hr f.txt -R :递归(目录下的所有内容都更改,否则只修改目录)
例:
[root@xuegod63 ~]# touch {a,b,c}.txt[root@xuegod63 ~]# ll *.txt-rw-r--r-- 1 root root 0 5月 8 21:03 a.txt-rw-r--r-- 1 root root 0 5月 8 21:03 b.txt-rw-r--r-- 1 root root 0 5月 8 21:03 c.txt[root@xuegod63 ~]# chown mk a.txt[root@xuegod63 ~]# ll a.txt -rw-r--r-- 1 mk root 0 5月 8 21:03 a.txt[root@xuegod63 ~]# chown mk:mk a.txt[root@xuegod63 ~]# ll a.txt -rw-r--r-- 1 mk mk 0 5月 8 21:03 a.txt[root@xuegod63 ~]# chown :root a.txt[root@xuegod63 ~]# ll a.txt -rw-r--r-- 1 mk root 0 5月 8 21:03 a.txt
互动:一个文件只有读的权限,拥有者是否可以写这个文件?
实验:[root@xuegod63 ~]# su - mk[mk@xuegod63 ~]$ touch a.txt[mk@xuegod63 ~]$ ll a.txt -rw-rw-r-- 1 mk mk 0 5月 8 21:07 a.txt
在另一个终端上,以root身份登录:
[root@xuegod63 ~]# chmod 000 /home/mk/a.txt #修改成000权限[root@xuegod63 ~]# ll /home/mk/a.txt ---------- 1 mk mk 14 5月 8 21:08 /home/mk/a.txt
回到以mk身份登录的终端:
[mk@xuegod63 ~]$ vim a.txt # 写入aaa , :wq! 保存
在另一个终端上,以root身份登录:
[root@xuegod63 ~]# cat /home/mk/a.txt aaaaa
实验结果:文件所有者一定可以写文件。 就像root可以对shadow强制写。 因shadow的拥有者是root
修改权限用的命令:chmod
对谁操作:
操作符:
权限:r w x
例如下在的组合:u-w user 拥有者
g+x group 组
o=r other 其他人
例:chmod修改权限
[root@xuegod63 ~]# touch 1.txt[root@xuegod63 ~]# ll 1.txt -rw-r--r-- 1 root root 0 5月 8 21:20 1.txt[root@xuegod63 ~]# [root@xuegod63 ~]# chmod u-w 1.txt[root@xuegod63 ~]# ll 1.txt -r--r--r-- 1 root root 0 5月 8 21:20 1.txt[root@xuegod63 ~]# chmod g+x 1.txt[root@xuegod63 ~]# ll 1.txt -r--r-xr-- 1 root root 0 5月 8 21:20 1.txt[root@xuegod63 ~]# chmod a+x 1.txt # 给shell脚本加一个可执行权限[root@xuegod63 ~]# ll 1.txt -r-xr-xr-x 1 root root 0 5月 8 21:20 1.txt[root@xuegod63 ~]# [root@xuegod63 ~]# chmod a=rwx 1.txt[root@xuegod63 ~]# ll 1.txt -rwxrwxrwx 1 root root 0 5月 8 21:20 1.txt
权限 二进制值 八进制值 描述
例1:
例2:语法:
chmod 755 文件或文件夹名字chmod a=rwx b.txt 等于 chmod 777 b.txt
例:
[root@xuegod63 ~]# touch dd.txt[root@xuegod63 ~]# ll dd.txt -rw-r--r-- 1 root root 0 5月 8 21:40 dd.txt[root@xuegod63 ~]# chmod 755 dd.txt [root@xuegod63 ~]# ll dd.txt -rwxr-xr-x 1 root root 0 5月 8 21:40 dd.txt[root@xuegod63 ~]# chmod 700 dd.txt [root@xuegod63 ~]# ll dd.txt -rwx------ 1 root root 0 5月 8 21:40 dd.txt
有三种权限可以应用:读取,写入与执行,这些权限对访问文件和目录的影响如下:
权限 对文件的影响 对目录的影响为什么我们创建的文件的权限是644呢?
我们创建文件的默认权限是怎么来的?umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字文件默认权限=666 ,目录默认权限=777我们一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。永久生效,编辑用户的配置文件vim .bash_profile [root@xuegod63 ~]# vim /etc/profile
注: UID大于199 且用户的组名和用户名一样,那么 umask值为002,否则为022.注: -gt 在shell中表示大于; id -g 显示用户组ID ,id -gn显示组名。
临时生效: umask 权限补码
[root@xuegod63 ~]# umask 044[root@xuegod63 ~]# touch ss.txt[root@xuegod63 ~]# ll ss.txt -rw--w--w- 1 root root 0 5月 8 21:47 ss.txt
权限的算法:一般情况是:目录默认权限-umask 值
666-022=644 777-022=755 #这是一个好的记忆方法,但不严谨。
互动:umask掩码为033 创建普通文件后,权限是什么? 互动:umask掩码为033 创建普通文件后,权限是什么? 666-033=633 ( rw- -wx -wx) ?
例:[root@xuegod63 ~]# umask 033[root@xuegod63 ~]# touch k.txt[root@xuegod63 ~]# ll k.txt -rw-r--r-- 1 root root 0 5月 8 22:00 k.txt答:结果为: 644
权限科学的计算方法:
例1: umask 为022
6 6 6 umask 0 2 2110 110 110 000 010 010 # 转成二进制 111 101 101 # umask取反的值110 110 110 与 #第二步,默认权限和umask取反后的值做与运算111 101 101 # umask取反的值110 100 1006 4 4 #转成8进制
例2: umask 为033 结果为: 644
6 6 6 umask 0 3 3110 110 110 000 011 011 # 转成二进制 111 100 100 # umask取反的值110 110 110 与 #默认权限和umask取反后的值做与运算111 100 100 # umask取反的值110 100 1006 4 4 #转成8进制
7.2 文件的特殊权限:suid sgid sticky和文件扩展权限ACL
其实文件与目录设置不止这些,还有所谓的特殊权限。由于特殊权限会拥有一些“特权”.
功能:程序运行时的权限从执行者变更成程序所有者的权限
SUID SGID Stickybit
**互动: 普通用户mk,没有对shadow文件写入的权限, 但是mk用户使用passwd修改自己密码时,可以修改shadow文件中的内容,这是什么原因?[root@xuegod63 ~]# ll /etc/shadow
----------. 1 root root 1179 9月 19 2017 /etc/shadow[root@xuegod63 ~]# su - mk上一次登录:二 5月 8 21:07:24 CST 2018pts/0 上[mk@xuegod63 ~]$ passwd 更改用户 mk 的密码 。为 mk 更改 STRESS 密码。(当前)UNIX 密码:123456新的 密码:Xuegod666重新输入新的 密码:Xuegod666passwd:所有的身份验证令牌已经成功更新。[root@xuegod63 ~]# vim /etc/shadow #查看shadow文件已经被mk用户修改成功。因为mk用户执行passwd命令时,权限会提升成root用户,所以可以修改成功。**例2:
[root@xuegod63 ~]# useradd mk[root@xuegod63 ~]# su - mk[root@xuegod63 ~]$less /etc/shadow #看不到内容[root@xuegod63 ~]# su - root[root@xuegod63 ~]# chmod u+s /usr/bin/less #切换到root,给一个suid权限[root@xuegod63 ~]# su - mk[mk@xuegod63 ~]$ less /etc/shadow #看到
查看u+s后的效果:
[root@xuegod63 ~]# ll /usr/bin/less-rwsr-xr-x 1 root root 154536 Sep 26 2011 /usr/bin/less[root@xuegod63 ~]# ps -axu | grep lessroot 43407 0.0 0.0 110260 980 pts/0 S+ 22:30 0:00 less /etc/shadow
另外:
[root@xuegod63 ~]# chmod 4755 /usr/bin/less # 等同于 chmod u+s /usr/bin/less
SGID:
功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的权限。
[root@xuegod63 ~]# mkdir test
[root@xuegod63 ~]# ll -d testdrwxr-xr-x 2 root root 4096 Jan 24 20:14 test[root@xuegod63 ~]# chmod g+s test[root@xuegod63 ~]# !llll -d testdrwxr-sr-x 2 root root 4096 Jan 24 20:14 test测试:sgid效果
-[root@xuegod63 ~]# chown :bin test/ [root@xuegod63 ~]# touch test/a.txt [root@xuegod63 ~]# ll !$ ll test/a.txt -rw-r--r-- 1 root bin 0 Jan 24 20:15 test/a.txt
Stickybit
限定:只作用于目录功能:目录下创建的文件只有root、文件创建者、目录所有者才能删除。例: 系统中的tmp目录就是这样[root@xuegod63 ~]# ll -d /tmp/drwxrwxrwt. 11 root root 4096 Jan 24 19:41 /tmp/
用法:
chmod o+t /tmp/test/
扩展ACL :access control list
例:设置用户mk对文件a.txt拥有的rwx权限 ,mk不属于a.txt的所属主和组,mk是other。怎么做?[root@xuegod63 ~]# touch /tmp/a.txt[root@xuegod63 ~]# getfacl /tmp/a.txtgetfacl: Removing leading '/' from absolute path names# file: tmp/a.txt# owner: root# group: rootuser::rw-group::r--other::r--#setfacl -m u:mk:rwx /tmp/a.txt u : 设置某个用户拥有的权限[root@xuegod63 ~]# getfacl /tmp/a.txtgetfacl: Removing leading '/' from absolute path names...user::rw-user:mk:rwx[mk@xuegod63 ~]$ vim /tmp/a.txt [mk@xuegod63 ~]$ ll /tmp/a.txt -rw-rwxr--+ 1 root root 8 5月 8 22:42 /tmp/a.txt
例2: 给目录加扩展权限
[root@xuegod63 ~]# mkdir /tmp/test #setfacl -m d:u:mk:rwx /tmp/test # -d default 设置默认acl,对目录有效,此目录下新建的目录或文件都继承此acl权限
例:测试一下 -d 参数:
[root@xuegod63 ~]# mkdir /tmp/test [root@xuegod63 ~]# setfacl -m d:u:mk:rwx /tmp/test [root@xuegod63 ~]# getfacl /tmp/test/getfacl: Removing leading '/' from absolute path names# file: tmp/test/# owner: root# group: rootuser::rwxgroup::r-xother::r-xdefault:user::rwxdefault:user:mk:rwxdefault:group::r-xdefault:mask::rwxdefault:other::r-x[root@xuegod63 ~]# touch /tmp/test/a.txt[root@xuegod63 ~]# mkdir /tmp/test/data[root@xuegod63 ~]# getfacl /tmp/test/a.txt #因为-d参数,所以test下所有创建的文件和目录都继承了默认的acl权限getfacl: Removing leading '/' from absolute path names# file: tmp/test/a.txt# owner: root# group: rootuser::rw-user:mk:rwx #effective:rw-group::r-x #effective:r--mask::rw-other::r--[root@xuegod63 ~]# getfacl /tmp/test/datagetfacl: Removing leading '/' from absolute path names# file: tmp/test/data# owner: root# group: rootuser::rwxuser:mk:rwxgroup::r-xmask::rwxother::r-xdefault:user::rwxdefault:user:mk:rwxdefault:group::r-xdefault:mask::rwxdefault:other::r-x
例3:给目录下所有文件都加扩展权限
[root@xuegod63 ~]# setfacl -R -m u:lee:rw- testdirectory/ #-R一定要在-m前面,表示目录下所有文件[root@xuegod63 ~]# setfacl -x u:mk /tmp/a.txt # 去掉单个权限[root@xuegod63 ~]# setfacl -b /tmp/a.txt # 去掉所有acl权限
发现windows中 有文件删除不了,怎么办? 使用360 强制删除,粉碎文件 那么在Linux下怎么办?
[root@xuegod63 ~]# touch hack.sh aa.sh [root@xuegod63 ~]# ll hack.sh aa.sh -rw-r--r-- 1 root root 0 May 24 21:29 aa.sh-rw-r--r-- 1 root root 0 May 24 21:29 hack.sh[root@xuegod63 ~]# rm -rf aa.sh***使用xshell悄悄执行在后台添加attr扩展属性:(这个别让学员看到^_^)[root@xuegod63 ~]# chattr +i hack.sh
删除文件:
[root@xuegod63 ~]# rm -rf hack.sh #发现删除不了
为什么删除不了?
从REHL6 开始,新增加文件系统扩展属性:
命令:chattr注:immutable [ɪˈmju:təbl] 不可改变的 ; Append [əˈpend] 追加
解决:
[root@xuegod63 ~]# lsattr hack.sh----i----------- hack.sh[root@xuegod63 ~]# chattr -i hack.sh[root@xuegod63 ~]# echo aa >> hack.sh[root@xuegod63 ~]# lsattr hack.sh #查看扩展属性---------------- hack.sh[root@xuegod63 ~]# chatchat chattr [root@xuegod63 ~]# chattr +a hack.sh[root@xuegod63 ~]# rm -rf hack.shrm: 无法删除"hack.sh": 不允许的操作[root@xuegod63 ~]# echo aaa >> hack.sh
总结:
转载于:https://blog.51cto.com/xuegod/2301275