linux文件权限及管理系统,linux文件系统权限管理

一.文件权限

linux中,文件系统有自带有权限管理,针对资源(文件,目录,程序)去管理,我们先来看下针对文件的权限管理,通过ll查看一个文件,如下:

[root app]#ll a.txt

-rw-r--r-- 1 root root 0 5月 27 11:10 a.txt

其中rw-r--r--.就是这个文件的权限了,而后边的root root代表文件的属主和数组,我们先列一下。

权限:

r:read,读权限,可用4表示

w:write,写权限,可用2表示

x:execute,执行权限,可用1表示

文件所属:

u:属主,文件所有者,就是上边的第一个root ;

g:属组,文件所属者的主组,就是上边第二个root ;

o:其他,表示既不是文件属主也不是文件属组的其他用户,上边没有显示出来;

其实权限rw-r--r--是分为三段的,三个为一段。rw-为第一段,表示用户的属主的权限,r是读,w是写,-为空,所以这个文件的所有者权限就是读和写;第二段r--表示用户的属组的权限,只有r,后边为空,所以权限为只读;第三段为其他用户,权限也是只读。比如,feng用户是一个其他用户,我们切到这个用户,往文件里边写东西,会提示权限不够,如下:

[root app]#su feng

[feng app]$echo "haha" >> a.txt

bash: a.txt: 权限不够

明白这些之后,我们就可以给文件更改权限了,命令为chmod,比如要让feng用户拥有给a.txt写的权限,就这样写:

[root ~]#chmod u=rw,g=r,o=rw a.txt

然后ll a.txt看一下结果:

[root ~]#ll a.txt

-rw-r--rw-. 1 root root 12 5月 21 16:20 a.txt

验证下:

[root app]#su feng

[feng app]$echo "haha" >> a.txt

[feng app]$cat a.txt

haha

没有提示错误,a.txt之前是空的,现在有内容了。当然只要给他加执行权限,可以用简单的写法:

[root app]#chmod o+w a.txt

或者直接用数字来表示,上面也提到过,r表示4,w表示2,x表示1,读写就是4+2为6,以此类推:

[root app]#chmod 646 a.txt

[root app]#ll a.txt

-rw-r--rw- 1 root root 5 5月 27 11:24 a.txt

另外我们也可以修改文件的属主和属组,命令为chown和chgrp:

[root app]#ll b.txt

-rw-rw-r-- 1 feng feng 0 5月 27 13:04 b.txt

[root app]#chown root b.txt

[root app]#ll b.txt

-rw-rw-r-- 1 root feng 0 5月 27 13:04 b.txt

[root app]#chgrp root b.txt

[root app]#ll b.txt

-rw-rw-r-- 1 root root 0 5月 27 13:04 b.txt

二.目录权限

通过上面的讲解,我们了解了文件的权限,现在来看点不一样的地方:将a.txt换成其他用户只读,然后用feng用户删除a.txt,因为feng用户没有w权限,所以删除不了。然而,结果并不是这样:

[root app]#chmod o-w a.txt

[root app]#ll a.txt

-rw-r--r-- 1 root root 5 5月 27 11:24 a.txt

[root app]#su feng

[feng app]$rm -f a.txt

[feng app]$ll a.txt

ls: 无法访问a.txt: 没有那个文件或目录

没有w权限的feng用户竟然删除了a.txt,这其实是另一层原因导致的。

文件名字其实是存于目录文件中的,而删除文件其实只是删除目录中的文件名和i节点编号,不会删除节点表和数据,所以删除文件只需要用户对目录有w权限就可以的。下面为目录权限的作用:

r: 可以使用ls查看此目录中文件列表

w: 可在此目录中创建文件,也可删除此目录中的文件

x: 可以使用ls -l查看此目录中文件列表,可以cd进入此

目录权限的设置更改和文件一样。要将目录下所有文件的权限包括目录都设成相同权限,可以用chmod -R来实现递归操作。但是目录一般都是需要x权限的,要不查看和进入操作都不能实现会很难受,而文件一般不会给x权限,递归操作就有点不方便了,这时,就需要X权限,他的作用是在递归授权的时候,只给目录加上x权限,而文件不加,如下:

[root app]#chmod -R a=rwX /app

[root app]#ll -a /app

总用量 8

drwxrwxrwx. 2 root root 4096 5月 27 13:09 .

dr-xr-xr-x. 30 root root 4096 5月 27 10:03 ..

-rw-rw-rw- 1 root root 0 5月 27 13:09 1.txt

-rw-rw-rw- 1 root root 0 5月 27 13:09 2.txt

-rw-rw-rw- 1 root root 0 5月 27 13:09 3.txt

三.特殊权限SUID,SGID,Sticky

SUID

当一个用户想要运行一个程序时,需要拥有这个程序文件的执行权才可以执行,有些程序普通用户是没有执行权限的,比如说创建用户的useradd:

[root app]#ll /usr/sbin/useradd

-rwxr-x---. 1 root root 111320 5月 11 2016 /usr/sbin/useradd

[root app]#su feng

[feng app]$useradd haha

bash: /usr/sbin/useradd: 权限不够

而当一个用户执行了一个程序的时候,这个生成的进程的属主就变成了这个用户,和程序文件本身属于谁没关系,比如我们用feng用户执行cat,用ps查看进程,看到进程的属主是feng:

[root ~]#ps aux|grep cat

feng 3513 0.0 0.0 100952 556 pts/0 S+ 14:10 0:00 cat

所以,不同的用户发起的进程,权限是不同的。这样就带来一个问题,比如我们要给自己的账号修改密码,虽然用的是passwd这个命令,但是最终结果会写到/etc/shadow这个文件,普通用户对他是没有任何权限的,我们看一下:

[root app]#ll /etc/shadow

-r-------- 1 root root 1953 5月 26 14:15 /etc/shadow

所以就会导致普通用户修改自己账户的密码都没有这个能力,这就是很尴尬的事情了,但事实是普通用户可以修改自己的密码的,因为系统给passwd这个命令设置了特殊权限,我们来看下:

[root app]#type passwd

passwd is /usr/bin/passwd

[root app]#ll /usr/bin/passwd

-rwsr-xr-x. 1 root root 30768 11月 24 2015 /usr/bin/passwd

其中,用户属主的第一段为rws,这个s就是特殊权限SUID,他的用途就是将执行进程的用户变成程序文件属主,由于/usr/bin/passwd这个程序文件的属主为root,所以,不管哪个用户执行这个程序,进程属主都是root,这样就可以做到每个用户都可以修改自己的密码写入/etc/shadow中。如下,我们用feng用户执行passwd程序,用ps aux看下进程属主是root而不是feng:

[feng app]$passwd

更改用户 feng 的密码 。

为 feng 更改 STRESS 密码。

(当前)UNIX 密码:

[root ~]#ps aux|grep passwd

root 3661 0.0 0.1 165652 1916 pts/0 S+ 14:45 0:00 passwd

root 3665 0.0 0.0 103344 856 pts/1 S+ 14:45 0:00 grep passwd

SUID只能作用在二进制可执行文件上才有意义,给文件加减SUID得语法为chmod u+s FILE和或者用数字表示chmod 4755 FILE,第一个4为SUID。

SGID

SGID也可以作用在可执行二进制文件上,代表执行这个程序的用户自动变成文件属组用户,拥有文件属组的权限。语法为chmod g+s或chmod 2755

另外,SGID还可以作用在目录上,让目录中新建的文件继承父目录的所属组,如下:

[root app]#chmod g+s /app

[root app]#ll -d /app

drwxrwsrwx. 2 feng feng 4096 5月 27 15:07 /app

[root app]#cd /app/

[root app]#touch test

[root app]#ll test

-rw-r--r-- 1 root feng 0 5月 27 15:09 test

Sticky

我们来考虑一个问题,当几个用户同时需要在一个目录下写文件时,他们肯定都拥有目录的写权限,但是这样就可以删除别的用户在这个目录下的文件。这时就需要Sticky来限制这种行为。

Sticky作用在目录上,作用就是让文件的属主才拥有删除文件的权利,别的用户对文件只能追加,不能修改和删除改名。语法为chmod o+t或者chmod 1755

注意

当基础权限中没有x权限时,s和t权限显示都会变成大写S和T。

umask

创建文件和目录时,有个默认的权限,文件为644,目录为755.这是因为有个叫umak的东西,我们可以理解成权限的掩码,用umask查看默认掩码:

[root app]#umask

0022

而由于文件x权限比较危险,所以文件最高权限为666,目录最高权限为777,然后默认umak为022.所以文件的默认权限就是666减去022,就是644了,目录同理为755.

那么问题又来了,我们将文件最高权限设为666就是不想让文件拥有x权限,但是假如将umak设为013呢,默认创建的文件权限为653,是有执行权限的。但是事实是这样吗,我们来看下:

[root app]#umask 013

[root app]#umask

0013

[root app]#touch test2

[root app]#ll test2

-rw-rw-r-- 1 root feng 0 5月 27 15:43 test2

事实是新创建的用户并没有x权限,而是在掩码的基础上基数加1了。这其实是因为掩码的本质是用二进制异或运算的,我们也不需要太了解,只需要知道当掩码设为奇数时,文件得出的权限偶数不变,奇数加1就得出了最终结果。

用umak命令设置的掩码时保存在内存中的,系统重启就丢失,如果要自定义umask我们要写进开机启动文件中,在/etc/bashrc中或者用户家目录.bashrc等启动文件中将umask命令写入即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值