linux下对文件操作的所有限制

linux系统管理 struggling 1717次浏览 0个评论

学习linux也有一段时间了,大概总结了linux下访问文件的各种限制,下面 为大家详细解释,有不全的希望大家补充下。

一,文件的权限
仅对于文件来说:
r:表示对文件的列出
w:表示对文件的写入,删除
x:表示执行,文件默认没有执行权限

<code>
[root@localhost test]# umask
0022
[root@localhost test]# touch a
[root@localhost test]# ls -l a
-rw-r--r--. 1 root root 0 Apr  4 00:27 a
[root@localhost test]# echo  hello >a
[root@localhost test]# cat a
hello
[root@localhost test]# ./a
-bash: ./a: Permission denied</code>

只要文件有w权限即可访问
二,目录的权限
下面是目录对文件权限的限制:
r:列出目录下的文件
w:表示在目录下能创建及删除文件
x:可以访问文件及目录下的子目录

<code>
[user@localhost tmp]$ mkdir test3
[user@localhost tmp]$ touch test3/file
[user@localhost tmp]$ ls -ld test3
drwxrwxr-x. 2 user user 4096 Apr  4 00:49 test3
[user@localhost tmp]$ ls -l test3
total 0
-rw-rw-r--. 1 user user 0 Apr  4 00:49 file
[user@localhost tmp]$ chmod a-r test3
[user@localhost tmp]$ ls -l test3
ls: cannot open directory test3: Permission denied
[user@localhost tmp]$ ls -l test3/file
-rw-rw-r--. 1 user user 0 Apr  4 00:49 test3/file</code>

第一个ls失败是因为缺乏读取权限,但有执行权限,第二个ls访问成功,所以,删除目录的读取权限并不能阻止用户访问目录下的文件,只要知道文件名就能进行访问。

<code>
[user@localhost tmp]$ chmod a-x test3
[user@localhost tmp]$ ls -ld test3
d-w--w----. 2 user user 4096 Apr  4 00:49 test3
[user@localhost tmp]$ ls -l  test3/file
ls: cannot access test3/file: Permission denied
[user@localhost tmp]$ cd test3
bash: cd: test3: Permission denied

删除执行权限则无法访问。

[user@localhost tmp]$ chmod a+r test3
[user@localhost tmp]$ ls -ld test3
drw-rw-r--. 2 user user 4096 Apr  4 00:49 test3
[user@localhost tmp]$ ls -l  test3
ls: cannot access test3/file: Permission denied
total 0
-????????? ? ? ? ?            ? file
[user@localhost tmp]$ ls -l test3/file
ls: cannot access test3/file: Permission denied
[user@localhost tmp]$ cd test3
bash: cd: test3: Permission denied</code>

没有执行权限无法浏览其内容,也无法进入其目录。

三,隐藏属性

<code>
[root@localhost test]# ls -l
total 4
-rw-r--r--. 1 root root  10 Apr  1 08:27 a
[root@localhost test]# chattr +i a
[root@localhost test]# lsattr 
----i--------e- ./a
[root@localhost test]# rm a
rm: remove regular file `a'? y
rm: cannot remove `a': Permission denied
[root@localhost test]# echo  123>a
bash: a: Permission denied</code>

设置隐藏属性,不能删除,修改文件

四,设置粘贴位

要删除一个文件,你不一定要有这个文件的写权限,但你一定要有这个文件的上级目录的写权限。也就是说,你即使没有一个文件的写权限,但你有这个文件的上级目录的写权限,你也可以把这个文件给删除,而如果没有一个目录的写权限,也就不能在这个目录下创建文件。
如何才能使一个目录既可以让任何用户写入文件,又不让用户删除这个目录下他人的文件,sticky就是能起到这个作用。stciky一般只用在目录上,用在文件上起不到什么作用。

系统是这样规定的, 假如本来在该位上有x, 则这些特别标志 (suid, sgid, sticky) 显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T) 。

<code>
[user@localhost tmp]$ chmod +t test3
[user@localhost tmp]$ ls -ld test3
drwxrwxrwt. 2 user user 4096 Apr  4 01:18 test3
[user@localhost test3]$ touch  a  b
[user@localhost test3]$ ls -l 
total 0
-rw-rw-r--. 1 user user 0 Apr  4 01:21 a
-rw-rw-r--. 1 user user 0 Apr  4 01:21 b
[fei@localhost test3]$ touch c  d
[fei@localhost test3]$ ls -l
total 0
-rw-rw-r--. 1 user user 0 Apr  4 01:21 a
-rw-rw-r--. 1 user user 0 Apr  4 01:21 b
-rw-rw-r--. 1 fei  fei  0 Apr  4 01:21 c
-rw-rw-r--. 1 fei  fei  0 Apr  4 01:21 d
[fei@localhost test3]$ rm a
rm: remove write-protected regular empty file `a'? y
rm: cannot remove `a': Operation not permitted</code>

user用户建立test3目录,设置粘贴位t,用户fei不能删除user的文件,但user能删除其他用户创建的文件。

五,SUID及SGID

SUID:Set UID

SUID 权限仅对二进位程序(binary program)有效;
运行者对於该程序需要具有 x 的可运行权限;
本权限仅在运行该程序的过程中有效 (run-time);
运行者将具有该程序拥有者 (owner) 的权限。

SGID:Set GID

SGID 对二进位程序有用;
程序运行者对於该程序来说,需具备 x 的权限;
运行者在运行的过程中将会获得该程序群组的支持!

SUID的优先级比SGID高,SUID的作用就是这样:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。

六,ACL权限

ACL即Access Control List 主要的目的是提供传统的owner,group,others的read,write,execute权限之外的具体权限设置,ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限控制,对于需要特殊权限的使用状况有一定帮助。如,某一个文件,不让单一的某个用户访问。

ACL使用两个命令来对其进行控制
getfacl:取得某个文件/目录的ACL设置项目
setfacl:设置某个文件/目录的ACL设置项目
ACL可以针对用户(user),用户组(group)和默认属性(mask)进行设置。

setfacl 参数
-m:设置后续acl参数
-x:删除后续acl参数
-b:删除全部的acl参数
-k:删除默认的acl参数
-R:递归设置acl,包括子目录
-d:设置默认acl参数!只对目录有效。

<code>
[root@localhost test1]# ls -l
total 4
-rw-r--r--. 1 root root    4 Mar 31 05:44 a
[root@localhost test1]# setfacl -m u:user:rw a      #为其添加所有者权限
[root@localhost test1]# ls -l  a                  #对比权限,比以前的多了几个,后面还多了个‘+’
-rw-rw-r--+ 1 root root 4 Mar 31 05:44 a
[root@localhost test1]# getfacl a                #查阅其权限
# file: a
# owner: root
# group: root
user::rw-
user:user:rw-                        #------此处为刚添加的权限
group::r--
mask::rw-
other::r--
[root@localhost test1]# setfacl -m g:user:rwx a     #为其添加组权限
[root@localhost test1]# ls -l a
-rw-rwxr--+ 1 root root 4 Mar 31 05:44 a               #权限变化了
[root@localhost test1]# getfacl a
# file: a
# owner: root
# group: root
user::rw-
user:user:rw-
group::r--
group:user:rwx                      #---------添加的组权限
mask::rwx
other::r--
[root@localhost test1]# setfacl -m m:r a         #设置mask权限为r
[root@localhost test1]# ls -l a
-rw-r--r--+ 1 root root 4 Mar 31 05:44 a
[root@localhost test1]# getfacl a
# file: a
# owner: root
# group: root
user::rw-
user:user:rw-			#effective:r--   《=====仅有r权限了
group::r--
group:user:rwx			#effective:r--   《=====仅有r权限了
mask::r--                                        《======设置为r
other::r--
[root@localhost test1]# setfacl -b a           #删除所有acl参数
[root@localhost test1]# getfacl a          
# file: a
# owner: root
# group: root
user::rw-
group::r--
other::r--
</code>

七,SELinux

此处有点难,等我整理好再补上!谢谢大家访问。


DevOps-田飞雨 》》转载请注明源地址
喜欢 (1)or分享 (0)
发表我的评论
取消评论
*

表情 贴图 加粗 链接 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址