码迷,mamicode.com
首页 > 其他好文 > 详细

文件权限

时间:2018-09-10 22:23:38      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:vat   否则   除了   yum   共享   sgi   ota   conda   span   

1、文件权限与归属

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

 -:普通文件。

d:目录文件。

l:链接文件。

b:块设备文件。

c:字符设备文件。

p:管道文件。

在Linux系统中,每个文件都有所属的所有者和所有组,并且规定了文件的所有者、所有组以及其他人对文件所拥有的可读(r)、可写(w)、可执行(x)等权限。对于一般文件来说,权限比较容易理解:“可读”表示能够读取文件的实际内容;“可写”表示能够编辑、新增、修改、删除文件的实际内容;“可执行”则表示能够运行一个脚本程序。

对目录文件来说,“可读”表示能够读取目录内的文件列表;“可写”表示能够在目录内新增、删除、重命名文件;而“可执行”则表示能够进入该目录。

技术分享图片

文件权限的数字法表示基于字符表示(rwx)的权限计算而来,其目的是简化权限的表示。例如,若某个文件的权限为7则代表可读、可写、可执行(4+2+1);若权限为6则代表可读、可写(4+2)。我们来看这样一个例子。现在有这样一个文件,其所有者拥有可读、可写、可执行的权限,其文件所属组拥有可读、可写的权限;而且其他人只有可读的权限。那么,这个文件的权限就是rwxrw-r--,数字法表示即为764。不过大家千万别再将这三个数字相加,计算出7+6+4=17的结果,这是小学的数学加减法,不是Linux系统的权限数字表示法,三者之间没有互通关系。

技术分享图片

图中包含了文件的类型、访问权限、所有者(属主)、所属组(属组)、占用的磁盘大小、修改时间和文件名称等信息。通过分析可知,该文件的类型为普通文件,所有者权限为可读、可写(rw-),所属组权限为可读(r--),除此以外的其他人也只有可读权限(r--),文件的磁盘占用大小是34298字节,最近一次的修改时间为4月2日的凌晨23分,文件的名称为install.log。

2、文件的特殊权限

在复杂多变的生产环境中,单纯设置文件的rwx权限无法满足我们对安全和灵活性的需求,因此便有了SUID、SGID与SBIT的特殊权限位。这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。

 (1)SUID

SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。例如,所有用户都可以执行passwd命令来修改自己的用户密码,而用户密码保存在/etc/shadow文件中。仔细查看这个文件就会发现它的默认权限是000,也就是说除了root管理员以外,所有用户都没有查看或编辑该文件的权限。但是,在使用passwd命令时如果加上SUID特殊权限位,就可让普通用户临时获得程序所有者的身份,把变更的密码信息写入到shadow文件中。

 查看passwd命令属性时发现所有者的权限由rwx变成了rws,其中x改变成s就意味着该文件被赋予了SUID权限。

[root@localhost Desktop]# ls -l /etc/shadow
----------. 1 root root 1141 Sep 10 20:58 /etc/shadow
[root@localhost Desktop]# ls -l /bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jan 30  2014 /bin/passwd

(2)SGID

SGID主要实现如下两种功能:

让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);

在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。

每个文件都有其归属的所有者和所属组,当创建或传送一个文件后,这个文件就会自动归属于执行这个操作的用户(即该用户是文件的所有者)。如果现在需要在一个部门内设置共享目录,让部门内的所有人员都能够读取目录中的内容,那么就可以创建部门共享目录后,在该目录上设置SGID特殊权限位。这样,部门内的任何人员在里面创建的任何文件都会归属于该目录的所属组,而不再是自己的基本用户组。此时,我们用到的就是SGID的第二个功能,即在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。

[root@localhost Desktop]# cd /tmp/
[root@localhost tmp]# mkdir test
[root@localhost tmp]# ls -ld test/
drwxr-xr-x. 2 root root 6 Sep 10 21:20 test/
[root@localhost tmp]# chmod 777 test/
[root@localhost tmp]# ls -ld test/
drwxrwxrwx. 2 root root 6 Sep 10 21:20 test/
[root@localhost tmp]# chmod g+s test/
[root@localhost tmp]# ls -ld test/
drwxrwsrwx. 2 root root 6 Sep 10 21:20 test/

chmod命令是一个非常实用的命令,能够用来设置文件或目录的权限,格式为“chmod [参数] 权限 文件或目录名称”。如果要把一个文件的权限设置成其所有者可读可写可执行、所属组可读可写、其他人没有任何权限,则相应的字符法表示为rwxrw----,其对应的数字法表示为760

[root@localhost Desktop]# ls -l
total 4
-rw-r--r--. 1 root root 208 Sep 10 19:55 a.txt
[root@localhost Desktop]# chmod 760 a.txt 
[root@localhost Desktop]# ls -l a.txt 
-rwxrw----. 1 root root 208 Sep 10 19:55 a.txt

除了设置文件或目录的权限外,还可以设置文件或目录的所有者和所属组,这里使用的命令为chown,其格式为“chown [参数] 所有者:所属组 文件或目录名称”。

chmod和chown命令是用于修改文件属性和权限的最常用命令,它们还有一个特别的共性,就是针对目录进行操作时需要加上大写参数-R来表示递归操作,即对目录内所有的文件进行整体操作。

[root@localhost Desktop]# ls -l a.txt 
-rwxrw----. 1 root root 208 Sep 10 19:55 a.txt
[root@localhost Desktop]# chown root:bin a.txt 
[root@localhost Desktop]# ls -l a.txt 
-rwxrw----. 1 root bin 208 Sep 10 19:55 a.txt

(3)SBIT

SBIT(Sticky Bit)(也可以称之为特殊权限位之粘滞位)。SBIT特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。换句话说,当对某个目录设置了SBIT粘滞位权限后,那么该目录中的文件就只能被其所有者执行删除操作了。

 RHEL 7系统中的/tmp作为一个共享文件的目录,默认已经设置了SBIT特殊权限位,因此除非是该目录的所有者,否则无法删除这里面的文件。

与前面所讲的SUID和SGID权限显示方法不同,当目录被设置SBIT特殊权限位后,文件的其他人权限部分的x执行权限就会被替换成t或者T,原本有x执行权限则会写成t,原本没有x执行权限则会被写成T。

[root@localhost Desktop]# ls -ld /tmp/
drwxrwxrwt. 14 root root 4096 Sep 10 21:32 /tmp/
[root@localhost Desktop]# cd /tmp
[root@localhost tmp]# ls -ald
drwxrwxrwt. 14 root root 4096 Sep 10 21:32 .
[root@localhost tmp]# echo "hello world" > test
[root@localhost tmp]# chmod 777 test 
[root@localhost tmp]# ls -l test 
-rwxrwxrwx. 1 root root 12 Sep 10 21:33 test

我们切换到另外一个普通用户,然后尝试删除这个其他人创建的文件就会发现,即便读、写、执行权限全开,但是由于SBIT特殊权限位的缘故,依然无法删除该文件:

[root@localhost tmp]# su lisi
[lisi@localhost tmp]$ ls
anaconda.log      packaging.log     systemd-private-JBMRai  vmware-root
hsperfdata_root   program.log       systemd-private-SLnO7R  yum.log
ifcfg.log         ssh-cFe7wOsqdfRi  systemd-private-YTe9oo
ks-script-dnxJqd  storage.log       test
[lisi@localhost tmp]$ rm -f test 
rm: cannot remove ‘test’: Operation not permitted

当然,要是也想对其他目录来设置SBIT特殊权限位,用chmod命令就可以了。对应的参数o+t代表设置SBIT粘滞位权限:

 如果一个文件的所有者的权限中没有x权限,加上SUID权限的时候是大写的S,有则是小写的s。

[root@localhost Desktop]# chmod 677 test 
[root@localhost Desktop]# ll test 
-rw-rwxrwx. 1 root root 6 Sep 10 21:50 test
[root@localhost Desktop]# chmod u+s test 
[root@localhost Desktop]# ll 
total 8
-rwxrw----. 1 root bin  208 Sep 10 19:55 a.txt
-rwSrwxrwx. 1 root root   6 Sep 10 21:50 test

SGID和SBIT也一样

[root@localhost Desktop]# ll
total 8
-rwxrw----. 1 root bin  208 Sep 10 19:55 a.txt
-rwSrwxrwx. 1 root root   6 Sep 10 21:50 test
[root@localhost Desktop]# chmod o+t test 
[root@localhost Desktop]# ll
total 8
-rwxrw----. 1 root bin  208 Sep 10 19:55 a.txt
-rwSrwxrwt. 1 root root   6 Sep 10 21:50 test

 

文件权限

标签:vat   否则   除了   yum   共享   sgi   ota   conda   span   

原文地址:https://www.cnblogs.com/zq8421/p/9623435.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!