系统运维
文件权限
在linux中一切都是文件,但是每个文件的类型不尽相同,linux系统使用不同的字符来加以区分,常见的字符如下:
字符含义–
普通文件
d
目录文件
l
链接文件
b
块设备文件
c
字符设备文件
p
管道文件
每个文件都有所有者和所有组,并且有各自的权限,读(r)写(w)执行(x),对于文件和目录rwx含义是不用的
文件:
r 读取文件内容的权限
w 修改文件内容的权限
x 执行文件内容的权限
目录:
r 查看目录下文件的权限
w 穿件、删除、修改目录下文件的权限
r 进入目录的权限
示例如下:
lrwxrwxrwx. 1 root root 7 feb 7 19:53 bin -> usr/bindr-xr-xr-x. 3 root root 4096 feb 7 12:08 boot文件的特殊权限
suid
suid是一种对二进制程序进行设置的特殊权限,可以上二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)
命令是chmod u s 文件名,将所有者的权限由rwx变成rws,其中x变成s表示拥有了suid权限,如果原本所有者的权限是rw-就会变成rws,其中-会变成大写的s
例如passwd命令:
[root@localhost /]# ll /bin/passwd -rwsr-xr-x. 1 root root 27832 jan 30 2014 /bin/passwdsgid
sgid主要实现两种功能:
让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置)
在某个目录中创建的文件自动继承改目录的用户组
命令是chmod g s 文件名,将所有组的权限由rwx变成rws,其中x变成s表示拥有了sgid权限,如果原本所有组的权限是rw-就会变成rws,其中-会变成大写的s
示例:
创建一个目录test,属主和属组是test,将目录的权限设置为777,其他用户都可以在test目录下创建自己的文件,属主和属组都是用户自己
设置sgid后,其他用户在test目录下创建的文件,属组将会变成test
[root@localhost /]# chmod 777 /test[root@localhost /]# ls -l /testdrwxrwxrwx. 2 test test 6 feb 7 20:36 test[root@localhost /]# su -l developer -c touch /test/a.txt[root@localhost /]# chmod g s /test[root@localhost /]# ls -l /testdrwxrwsrwx. 2 test test 6 feb 7 20:36 test[root@localhost /]# su -l developer -c touch /test/b.txt[root@localhost /]# ls -l test/-rw-r--r--. 1 developer developer 0 feb 7 20:37 a.txt-rw-r--r--. 1 developer test 0 feb 7 20:37 b.txtsbit
对一个目录设置了sbit权限后,改目录中的文件只能被其所有者执行删除操作,其他用户没有删除权限。
命令是 chmod o t 目录名 ,文件的其他人权限部分的x执行权限会被替换成t或者t,原本有x执行权限则会写成r,原本没有x执行权限则会被写成t。
例如系统中的/tmp目录,所有用户都可以在/tmp目录下创建文件,但是不能删除其他用户创建的文件。
文件的隐藏属性
chattr命令
chattr命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件名” 。如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加 " 参数" ,如果想要把某个功能移除文件,则需要追加 "-参数"。命令参数如下表:
示例:
对一个普通文件进行操作,创建、覆盖、追加、删除都是可以的:
[root@localhost ~]# touch aa.txt[root@localhost ~]# echo hello >aa.txt [root@localhost ~]# echo hello >>aa.txt [root@localhost ~]# rm -f aa.txt对一个文件加上隐藏权限a,只能追加文件,不能覆盖和删除文件
[root@localhost ~]# touch bb.txt[root@localhost ~]# chattr a bb.txt [root@localhost ~]# echo hello >bb.txt -bash: bb.txt: operation not permitted[root@localhost ~]# echo hello >>bb.txt [root@localhost ~]# rm -f bb.txt rm: cannot remove ‘bb.txt’: operation not permittedlsattr 命令
lsattr命令用于显示文件的隐藏权限,格式为"lsattr [参数] 文件"。在linux系统中,文件的隐藏权限必须使用lsattr命令来查看
[root@localhost ~]# lsattr bb.txt -----a---------- bb.txt[root@localhost ~]# ls -l bb.txt -rw-r--r--. 1 root root 6 feb 10 11:00 bb.txt文件访问控制列表
上面讲的一般权限、特殊权限、隐藏权限的一个共性—权限是针对某一类用户设置的,如果想对一个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(acl)。给予普通文件或者目录设置acl其实就是针对指定的用户或者用户组设置文件或者目录的操作权限。如果针对某个目录设置了acl,则目录中的文件会继承其acl;如果对文件这事了acl,则文件不再继承其所在目录的acl。
例如:
使用普通用户linuxprobe进入root用户的家目录中,会提示没有权限
[linuxprobe@localhost ~]$ cd /root-bash: cd: /root: permission denied[linuxprobe@localhost ~]$ setfacl 命令
setfacl 命令用户管理文件的acl规则,格式为"setfacl [参数] 文件名"。文件的acl提供的是在所有者、所有组、其他人的读、写、执行权限之外的特殊权限控制,使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读、写、执行权限的控制。针对目录需要使用 -r 参数;针对文件使用 -m 参数;如果要删除某一个文件的acl,则使用 -b 参数。
示例:
设置用户在/root目录上的权限,使普通用户linuxprobe可以进入/root目录:
[root@localhost ~]# setfacl -rm u:linuxprobe:rwx /root[root@localhost ~]# su - linuxprobelast login: mon feb 10 11:10:08 cst 2020 on pts/2[linuxprobe@localhost ~]$ cd /root/[linuxprobe@localhost root]$ lsanaconda-ks.cfg bb.txt initial-setup-ks.cfg删除acl权限:
setfacl -b /rootgetfacl 命令
getfacl命令用户显示文件上设置的acl信息,格式为"getfacl 文件名"。
[root@localhost ~]# getfacl /root/getfacl: removing leading \\\'/\\\' from absolute path names# file: root/# owner: root# group: rootuser::r-xuser:linuxprobe:rwxgroup::r-xmask::rwxother::---
高防服务器优势查询域名到期抢注时间cloud域名怎么注册?cloud域名在哪里注册?云服务器ecs连不上网阿里云服务器怎么修改地域限制安徽省2020年智慧城市、大数据中心、5G项目名单To B产品拉新的3个关键因素和6个套路账号邮箱修改-其他问题