四、文件与目录的默认权限和隐藏权限
1.文件默认权限:umask
当建立一个新的文件或目录的时候,它的默认权限跟umask有关,umask就是指定“目前用户在监理文件或目录时候的权限默认值”,那么如何得知或者设定umask呢?
[root@study ~]# umask
0022 <==与一般权限有关的是后面三个数字
[root@study ~]# umask -S
u=rwx,g=rx,o=rx
查询的方式有两种,如上所示。一是直接输入umask,然后显示出数字形态的权限设定。一种是加入-S,就会以符号类型的方式显示出权限。
预设情况如下:
(1)若用户建立为“文件”,则预设没有可执行权限,亦只有rw两个权限,所以最大为666,即-rw-rw-rw-。
(2)若用户建立为“目录”,由于x与是否可以进入该目录有关,所以所有权限均开放,即为777,预设权限如下:drwxrwxrwx。
要注意的是,umask指的是该默认值需要减掉的权限。我们举例umask值为022,那么用户建立文件和目录时权限如下:
预设权限 | 实际权限 | |
建立文件 | -rw-rw-rw-(666) | -rw-r–r– |
建立目录 | drwxrwxrwx(777) | drwxr-xr-x |
如果想要修改umask的值,只需要执行下面的语句即可:
umask xxx
例如我想要给新建的文件同用户组用户都可以编辑的时候,那么我们就不能拿掉group里面的w权限,所以我们需要设计umask为002(包括但不限于这个,只需要拿掉group中的w即可)。
umask 002
2.文件隐藏属性chattr, lsattr
(1)chattr
注意:chattr指令只能在Ext2/Ext3/Ext4的 Linux 传统文件系统上面完整生效,其他的文件系统可能就无法完整的支持这个指令。
[root@study ~]# chattr [+-=][ASacdistu] 文件或目录名称 选项与参数: +:增加某一个特殊参数,其他原本存在参数则不动。 -:移除某一个特殊参数,其他原本存在参数则不动。 =:设定一定,且仅有后面接的参数。 A:当设定了A这个属性时,若你有存取此文件(或目录)时,他的访问时间atime将不会被修改,可避免I/O较慢的机器过度的存取磁盘。(目前建议使用文件系统挂载参数处理这个项目) S:一般文件是异步写入磁盘的(原理请参考前一章sync的说明),如果加上S这个属性时,当你进行任何文件的修改,该更动会『同步』写入磁盘中。 a:当设定a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设定这属性。 c:这个属性设定之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!) d:当dump程序被执行的时候,设定d属性将可使该文件(或目录)不会被dump备份。 i:这个i可就很厉害了!他可以让一个文件『不能被删除、改名、设置连接也无法写入或新增数据!』对于系统安全性有相当大的帮助!只有 root 能设定此属性。 s:当文件设定了s属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来了喔! u:与s相反的,当使用u来配置文件案时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来救援该文件喔! |
注意:
(1)属性设定常见的是a与i的设定值,而且很多设定值必须要身为root才能设定。
(2)xfs文件系统仅支援 AadiS而已。
这个指令非常重要,特别是在系统的数据安全上面。由于这些属性都是隐藏的属性,所以需要使用下面的lsattr才能看到这个属性。
另外,如果是log file这种登录文件,就更需要+a这个属性,它可以增加,但不能修改或者删除旧的数据,非常适合log file。
(2)lsattr
[root@study ~]# lsattr [-adR] 文件或目录 选项与参数: -a :将隐藏文件的属性也展示出来; -d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名; -R :连同子目录的数据也一并列出来! |
如图4.1所示,第一行新建了一个名为attrtest的文件,第二行展示其隐藏属性(使用lsattr),看到其并没有设置chattr能够设置的属性,然后给其设置一个i属性(无法新增、修改、删除),然后执行一下删除操作,发现就连root用户都无法删除,这个时候使用lsattr查看下其隐藏属性,发现确实为i。最后删除其i属性,然后再次利用lsattr查看其属性,发现已经没有了i属性,并且可以被成功删除。
使用这两个指令要特别小心,否则可能会出现很大的困扰。
图4.4 chattr和lsattr演示
(3)文件特殊权限:SUID, SGID, SBIT
我们在terminal中执行ls -l /会发现有两个文件夹会有下面的结果:
drwxrwxrwt. 14 root root 4096 Jun 16 01:27 /tmp
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
这个s和t就是SUID/SGID的东西。
Set UID简称SUID,它有这样的功能:
①SUID 权限仅对二进制程序(binary program)有效;
②用户对于该程序需要具有x的可执行权限;
③本权限仅在执行该程序的过程中有效 (run-time);
④用户将具有该程序拥有者(owner)的权限。
Set GID简称SGID。与SUID不同,SGID是针对文件或目录来设置的。SGID有如下功能:
①SGID对二进制程序有用;
②程序用户对于该程序来说,需具备x的权限;
③用户在执行的过程中将会获得该程序用户组的支持。
SGID用在目录上的时候,它具有以下功能:
①用户若对于此目录具有r与x的权限时,该用户能够进入此目录;
②用户在此目录下的有效群组(effective group)将会变成该目录的群组;
③用途:若用户在此目录下具有 w 的权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同。
Sticky Bit,简称SBIT,目前只针对目录有效。它对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与root才有权力删除该文件。
(4)SUID/SGID/SBIT权限设定
SUID为4,SGID为2,SBIT为1。设定的时候,数字在RWX数字之前。
特别要说一个例子,如下所示:
[root@study tmp]# chmod 7666 test; ls -l test <==空的SUID/SGID权限-rwSrwSrwT 1 root root 0 Jun 16 02:53 test
原因:
因为s与t都是取代x这个权限的,但是我们下达的是7666。也就是说,user/group/others都没有x这个可执行的标志。所以,这个S和T代表的就是“空”。
除了数字表示法,也可以用符号法来处理。SUID是u+s,SGID是g+s,SBIT是o+t。
(5)查看文件类型:file
如果想知道某个文件的基本数据,例如它是ASCII、data,还是binary文件,且其中有没有使用到动态函数库等信息,就可以利用file命令来查看。例如图4.5所示。
图4.5 file查看举例
五、命令与文件的查询
我们常常需要知道那个文件放在哪里,才能够对该文件进行一些修改或维护等动作。有些时候某些软件配置文件的文件名是不变的,但是各分发版本放置的目录则不同。此时我们就需要利用一些搜索命令将该配置文件的完整文件名找到,这样才能进行修改。
1.脚本文件的文件名查询
我们知道在终端模式当中,连续输入两次[tab]按键就能够知道用户有多少命令可以下达。但是我们不知道这些命令的完整文件名放在哪里。这个时候,我们就可以通过which或type来寻找。
(1)which(寻找“执行文件”)
[root@study ~]# which [-a] command 选项或参数: -a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称。 |
如图5.1所示的举例。
图5.1 which举例
注意,这个命令是根据“PATH”这个环境变领所规范的路径去搜索“执行文件”的文件名。
(2)type
type将在后续来讲,在此就不说了。
2.文件名的查找
通常来说,find命令不常用,因为速度很慢。一般常用的是whereis和locate,前者是只找系统中某些目录底下的文件,而后者是利用数据库来搜索文件名。
(1)whereis
[root@study ~]# whereis [-bmsu] 文件或目录名 选项与参数:
|
如图5.2所示,第一个例子是找出ifconfig这个文件名,第二个例子是找出跟passwd的文件名,第三个例子是在man page中找到passwd的文件名。
图5.2 whereis演示
whereis只是查询/bin/sbin、/usr/share/man下的man page文件等几个比较特定的目录。具体想知道whereis查了多少目录,可以使用whereis -l来确认。
(2)locate/updatedb
[root@study ~]# locate [-ir] keyword 选项与参数: -i:忽略大小写的差异; -c:不输出文件名,仅计算找到的文件数量 -l:仅输出几行的意思,例如输出五行则是 -l 5 -S:输出locate所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等 -r:后面可接正规表示法的显示方式 |
我们要记住无论是whereis还是locate都是有局限性的。whereis只能在所能够检索的目录下检索文件,所以目录之外的文件搜索不到;而locate只能在建立的数据库中查找(数据库在/var/lib/mlocate),而这个数据库并不是实时更新,是定期更新,所以有可能刚建立的文件并不能搜索到。
解决locate的方法就是使用updatedb命令来手动更新数据库。使用方法非常简单,直接输入“updatedb”,然后回车即可。然后updatedb就会去读取/etc/updated.conf这个配置文件的设置,去搜索文件名,然后更新数据库。
如图5.3所示,是locate的演示。
图5.3 locate演示
(3)find
[root@study ~]# find [PATH] [option] [action] 选项与参数: 1.与时间有关的选项:共有-atime, -ctime与-mtime。我们以-mtime说明: -mtime n :n为数字,意义为在n天之前的“一天之内”被更动过内容的文件; -mtime +n :列出在n天之前(不含n天本身)被更动过内容的文件文件名; -mtime -n :列出在n天之内(含n天本身)被更动过内容的文件文件名。 -newer file :file 为一个存在的文件,列出比file还要新的文件文件名 2. 与用户或组名有关的参数: -uid n:n为数字,这个数字是用户的账号ID,亦即UID,这个UID是记录在/etc/passwd 里面与账号名称对应的数字。 -gid n:n为数字,这个数字是组名的ID,亦即GID,这个GID记录在/etc/group。 -user name:name为用户账号名称。 -group name:name 为组名。 -nouser:寻找文件的拥有者不存在于/etc/passwd的人。 -nogroup :寻找文件的用户组不存在于/etc/group的文件。 3. 与文件权限及名称有关的参数: -name filename:搜寻文件名为filename的文件。 -size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。(这个SIZE的规格有:c代表byte,k代表 1024bytes。所以,要找比50KB 还要大的文件,就是“-size +50k”。) -type TYPE:搜寻文件的类型为TYPE的。(类型主要有:一般正规文件(f),设备文件(b, c),目录(d),连接文件(l),socket (s),及 FIFO(p)等属性。) -perm mode:搜寻文件权限等于mode的文件,这个mode为类似 chmod的属性值。 -perm -mode:搜寻文件权限必须要全部包括mode的权限的文件。例如,我们要搜索0744的文件,使用“-perm -0744”。但是当一个文件的权限为4755时,也会被列出来,因为 -rwsr-xr-x 的属性已经囊括了 -rwxr–r– 的属性了。 -perm /mode:搜寻文件权限包含任一mode的权限的文件。例如,我们搜索-rwxr-xr-x,即-perm /755时,但一个文件属性为-rw——-也会被列出来,因为他有 -rw….的属性。 4. 额外可进行的动作: -exec com:com为其他指令,-exec后面可再接额外的指令来处理搜索到的结果。 -print:将结果打印到屏幕上,这个操作是预设操作。 |
find的特殊功能就是能够进行额外的动作。我们将下面的例子以图解来说明。
find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;
图5.4 解释说明
该例子中特殊的地方有{}以及\;还有-exec这个关键词,这些东西的意义为:
①{}代表的是由find找到的内容,如上图所示,find的结果会被放置到{}位置中;
②-exec一直到\;是关键词,代表find额外动作的开始(-exec)到结束(\;),在这中间的就是find指令内的额外动作。在本例中就是ls-l{}。
③因为;在bash环境下是有特殊意义的,因此利用反斜杠来转义。
六、权限与命令间的关系(非常重要)
1.让用户能进入某目录成为“可工作目录”的基本权限为:
(1)可使用的命令:例如cd等变换工作目录的命令;
(2)目录所需权限:用户对这个目录至少需要具有 x 的权限;
(3)额外需求:如果用户想要在这个目录内利用ls查阅文件名,则用户对此目录还需要r的权限。
2.用户在某个目录内读取一个文件的基本权限是:
(1)可使用的命令:例如本章谈到的 cat, more, less等等
(2)目录所需权限:用户对这个目录至少需要具有x权限;
(3)文件所需权限:用户对文件至少需要具有 r 的权限才行。
3.让用户可以修改一个文件的基本权限为何?
(1)可使用的命令:例如nano或未来要介绍的vi编辑器等;
(2)目录所需权限:用户在该文件所在的目录至少要有 x 权限;
(3)文件所需权限:用户对该文件至少要有r,w权限。
4.让一个用户可以建立一个文件的基本权限为何?
目录所需权限:用户在该目录要具有w,x的权限,重点在w。
5.让用户进入某目录并执行该目录下的某个命令之基本权限为何?
(1)目录所需权限:用户在该目录至少要有x的权限;
(2)文件所需权限:用户在该文件至少需要有x的权限。