文件权限及相关命令

root
233
文章
0
评论
2020年2月18日16:51:59 评论 5823字阅读19分24秒

Linux系统中一切都是文件,但是每个文件的类型不尽相同,因此Linux系统使用了不同的字符来加以区分。

删除指定文件排除

[root@node01 data]# ll
总用量 16
-rw-r--r--  1 root root 1945 6月  18 2020 bfe3a36ebd2528b454be6aebece806db5b40407b833e2af9617bf39afaff8c16.json
drwxr-xr-x  2 root root   50 6月  18 2020 c2afd774dba77ad5a3597403cbacb0599f53162805b6ff238d17b71291173879
drwxr-xr-x  2 root root   50 6月  16 18:54 d5a1f498983f4c543747f722d8321646cf07bae8225ac64ca908fb96b2642daa
drwxr-xr-x  2 root root   50 6月  16 18:54 dbfb2b66322895a95a2d7cebd95acb30ad51c191e48d142ba15b45fd3b3b7607
-rw-r--r--  1 root root 2326 6月  16 18:54 e1482a24335a6e76d438ae175f79409004588570d3e5dbb4c8140e025e848570.json
drwxr-xr-x  2 root root   50 6月  18 2020 f9f03c2d4ac6bc80505f80765d37ab272bccdd5920f8bdee289b7d91c46ce4dd
drwxr-xr-x. 8 root root   80 7月  31 01:46 kubernetes
-rw-r--r--  1 root root  295 1月   1 1970 manifest.json
drwxrwxr-x  5 1000 1000   66 5月  26 07:02 release-v3.18.4
-rw-r--r--  1 root root  105 1月   1 1970 repositories


[root@node01 data]# rm -rf !(kubernetes|release-v3.18.4)
-bash: !: event not found
[root@node01 data]# shopt -s extglob
[root@node01 data]# rm -rf !(kubernetes|release-v3.18.4)
[root@node01 data]# ll
总用量 0
drwxr-xr-x. 8 root root 80 7月  31 01:46 kubernetes
drwxrwxr-x  5 1000 1000 66 5月  26 07:02 release-v3.18.4

 

 

权限分为:

  • 普通权限
  • 特殊权限
  • 隐藏权限
  • ACL文件访问控制

-:普通文件。(文本文件)

d:目录文件。(d = 目录)

l:链接文件。 (特指 软链接文件(快捷方式) = 符号链接)

b:块设备文件。 (block = 硬件 = 机械硬盘 = 扇区 = 块)

c:字符设备文件。 (字符设备 = 虚拟终端 = tty)

p:管道文件。 ( --》 |分管符 )

s:socket 安全套接字文件 (什么时安全套接字?? == 所有的服务基于某个协议 所有服务 = 端口号 http监听80端口 怎么监听 80到底在哪? 虚拟层 - 安全套接层 -启动服务 - 80端口 mysql.sock)

Linux权限是操作系统用来限制对资源访问的机制,权限一般分为读、写、执行。系统中每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户或用户组可以对特定文件进行相应的操作。

Linux每个进程都是以某个用户身份运行,进程的权限与该用户的权限一样,用户的权限越大,则进程拥有的权限就越大。

Lnux中有的文件及文件夹都有至少权限三种权限:

 

注意:

目录必须拥有x权限,否则无法查看其内容

文件是否可以删除 不是看文件自身权限 而是看所在目录是否具备(w权限

对一个文件来说,不想人其他人操作,o对应的(r)是最主要的,不想让自己操作,u对应的(r)

[root@web02 /]# ll ba.sh 
-rw-r----- 1 root root 24 Feb 18 12:05 ba.sh
[root@web02 /]# sh ba.sh 
haha

[root@web02 /]# su - baba
Last login: Tue Feb 18 12:10:29 CST 2020 on pts/2
[baba@web02 ~]$ cd /
[baba@web02 /]$ cat ba.sh 
cat: ba.sh: Permission denied
[baba@web02 /]$ sh ba.sh 
sh: ba.sh: Permission denied
[baba@web02 /]$ ll ba
ls: cannot access ba: No such file or directory

授权有两种方式:

1、 数字式 (生产环境必用)

2、表达式 通过 + - =

Linux权限授权,默认是授权给三种角色,分别是user、group、other,Linux权限与用户之间的关联如下:

U代表User,G代表Group,O代表Other;

每个文件的权限基于UGO进行设置;

权限三位一组(rwx),同时需授权给三种角色,UGO;

每个文件拥有一个所属用户和所属组,对应UGO,不属于该文件所属用户或所属组使用O来表示;

文件 = 默认权限是644 ===> 666

目录 = 默认权限是755 ===> 777 ===> 022 ==> umask(反掩码)

权限最小化 = 目录肯定是要能访问 一定具备X权限; 文件具备X ==> w权限

umask = 0022 特殊权限

修改umask后 目录默认还是777 - umask ==>文件 默认777-umask(红帽)

修改的话在/etc/profile里

普通权限

chmod(change modify) 修改权限(文件+目录)

数字方式 授权: 属主可读 属组可写 其他可执行

r-- -w- --x ==》 421

  表达式  授权: u  = user

                         g = group  

                         o = other 

                           + 授权   - 撤销    =覆盖

为用户添加x权限,为属组添加x权限 ,撤销其他的所有权限

chmod u+x,g+x,o-x file10

chown = change owner 修改所属 (文件+目录 归属)

-R ==> 递归 -- 目录+里面的文件(后起创建的文件)都会继承权限

 

目录加"/",不加"/"的区别

chmod -R /etc --- 不加/ 连同etc自身都改变

                 /etc/ ---加/ 不包括etc自身

 

查看目录权限

ll -d 目录名

[root@web02 ~]# ll -d /
dr-xr-xr-x. 26 root root 4096 Feb 16 21:18 /

特殊权限

一般特殊权限的使用:

  • 二进制命令可执行脚本(u+s让其他人拥有文件所有者的能力,前提o必须带有r
  • 共享文件(一般是目录o+t

二级制命令示例:

用户想看/root/目录内的文件,看不了

  • visudo 授权普通用户
  • 直接给对应的命令的属主位加s,就可以看了
[root@web02 ~]# echo 123 >xx
[root@web02 ~]# cat xx
123

切换baba用户看是否能查看
[root@web02 ~]# su - baba
Last login: Tue Feb 18 11:51:15 CST 2020 on pts/2
[baba@web02 ~]$ cat /root/xx
cat: /root/xx: Permission denied

给cat命令加u+s
[baba@web02 ~]$ su - root
Password: 
Last login: Tue Feb 18 11:54:35 CST 2020 on pts/2
[root@web02 ~]# chmod u+s /bin/cat
[root@web02 ~]# ll /bin/cat
-rwsr-xr-x. 1 root root 54080 Nov 6 2016 /bin/cat

[root@web02 ~]# su - baba
Last login: Tue Feb 18 11:54:55 CST 2020 on pts/2
[baba@web02 ~]$ cat /root/xx
123

共享文件示例:

chmod o+t  目录     实现目录共享,其它用户不能随意修改信息

一般使用在目录上,此目录是共享目录权限为777,不加粘滞位,我上传的文件,别人可以随意修改,改了以后属主属组信息变成他自己的,太乱了,加了粘滞位以后其它用户可以进行数据共享,不能相互修改,只有自己才能改自己的文件

 

Linux中设置特殊权限方法如下:

  • 设置suid: chmod u+s thinkmoedu.net
  • 设置sgid: chmod g+s thinkmoedu.net
  • 设置sticky: chmod o+t thinkmoedu.net

特殊权限与设置普通权限一样,可以使用数字方式表示

  • SUID = 4
  • SGID = 2
  • Sticky = 1

可以通过chmod 4755 thinkmo.net对该目录授予特殊权限为s的权限,Linux系统中s权限的应用常见包括:su、passwd、sudo

隐藏权限

Linux系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉。有用户曾经在生产环境中碰到过明明权限充足但却无法删除某个文件的情况,或者仅能在日志文件中追加内容而不能修改或删除内容,这在一定程度上阻止了黑客篡改系统日志

chattr命令

参数作用

i     无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件

a    仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)

S    文件内容在变更后立即同步到硬盘(sync)

s    彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)

A   不再修改这个文件或目录的最后访问时间(atime)

b    不再修改文件或目录的存取时间

D   检查压缩文件中的错误

d    使用dump命令备份时忽略本文件/目录

c    默认将文件或目录进行压缩

u    当删除该文件后依然保留其在硬盘中的数据,方便日后恢复 ( 硬盘恢复--> 需要特殊工具)

t    让文件系统支持尾部合并(tail-merging)

x    可以直接访问压缩文件中的内容
-R    递归

chattr +i  文件名-------无法删除文件,修改文件,移动文件,追加文件内容

[root@web02 ~]# chattr +i xx
[root@web02 ~]# lsattr xx
----i----------- xx

[root@web02 ~]# chattr +i xx
[root@web02 ~]# lsattr xx
----i----------- xx
[root@web02 ~]# mv xx /
mv: cannot move ‘xx’ to ‘/xx’: Operation not permitted
[root@web02 ~]# rm -rf xx
rm: cannot remove ‘xx’: Operation not permitted
[root@web02 ~]# echo 12 >>xx
-bash: xx: Permission denied

chattr +a  文件名-------无法删除文件,移动文件,删除文件内容,但是只能追加文件内容

[root@web02 ~]# lsattr xx
---------------- xx
[root@web02 ~]# chattr +a xx
[root@web02 ~]# lsattr xx
-----a---------- xx
[root@web02 ~]# cat xx
123
11
[root@web02 ~]# rm -rf xx
rm: cannot remove ‘xx’: Operation not permitted
[root@web02 ~]# mv xx /
mv: cannot move ‘xx’ to ‘/xx’: Operation not permitted
[root@web02 ~]# echo 11 > xx
-bash: xx: Operation not permitted
[root@web02 ~]# echo 111 >> xx
[root@web02 ~]# cat xx
123
11
111

lsattr命令

查看隐藏权限

lsattr 文件名

lsattr -d 目录名

文件访问控制列表(访问控制列表 ACL)

对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了。通俗来讲,基于普通文件或目录设置ACL其实就是针对指定的用户或用户组设置文件或目录的操作权限。另外,如果针对某个目录设置了ACL,则目录中的文件会继承其ACL;若针对文件设置了ACL,则文件不再继承其所在目录的ACL。

setfacl命令

setfacl命令用于管理文件的ACL规则,格式为“setfacl [参数] 文件名称”。文件的ACL提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用-R递归参数;针对普通文件则使用-m参数;如果想要删除某个文件的ACL,则可以使用-b参数

setfacl -Rm u:用户名:rwx 目录名

getfacl 文件名-------查看文件的ACL权限

setfacl -Rb 文件名-----取消某个文件的ACL

 

示例:

ACL文件访问控制一般用于,某些目录普通用户访问没有权限,又想让某个人访问,给sudo提权心里又不舒服,就可以使用ACL,他对这个指定目录或者文件有权限进行操作

我们都知道普通用户是访问不了/root/家目录的,我们现在给/root/目录指定用户配置ACL

[root@web02 ~]# setfacl -Rm u:baba:rwx /root
setfacl: /root/xx: Operation not permitted
[root@web02 ~]# getfacl /root
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::r-x
user:baba:rwx
group::r-x
mask::rwx
other::---

[root@web02 ~]# su - baba
Last login: Tue Feb 18 12:36:16 CST 2020 on pts/2
已经能进入目录了
[baba@web02 ~]$ cd /root/

 

 

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2020年2月18日16:51:59
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: