在操作Linux系统的过程中,常用到ls,ll等 命令查看目录下包含的文件和文件夹的具体信息。

ll命令的显示详解

drwxrwxrwt.   9 root root    4096 Oct 27 22:01 tmp

第一段:10个字符,第1个字符表示文件类型,具体来说d表示这是个目录,如果是-,表示是一个普通文件;
剩余的9个字符,分成3组(owner(拥有者)/group(群组)/others(其他))每组3个字符(r(读取)/w(写入)/x(执行)),分别表示用户权限
第二段:是个数字,表示连接数;
第三段:表示文件的拥有者,root;
第四段:表示文件的群组。root;
第五段: 表示文件大小,单位默认为bytes(ll -h可人性化显示单位);
第六段:表示文件建立或这最近的修改时间,月-日-时-分;
第七段:表示文件或目录名字;

这里提到了权限,那权限的更改就在我其他的博客中查阅,或者网上也有很多相关介绍。

特殊情况

在畅游Linux系统的过程中,你肯定见过rws、rwg、rwt等情况,也可能你没注意到,但含有这种权限的目录文件系统中还是有很多的,下面就来介绍下这些特殊的权限:
  以下内容查考自:
  每一个文件都有一个所有者, 表示该文件是谁创建的;同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组。如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具有的权限。而setuid, setgid可以来改变这种设置.。

1、标志介绍

(1)setuid
  该位是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令。比如我们用普通用户运行passwd命令来更改自己的口令,实际上最终更改的是/etc/passwd文件我们知道/etc/passwd文件是用户管理的配置文件,只有root权限的用户才能更改

[root@localhost ~]# ls -l /etc/passwd
-rw-r--r-- 1 root root 2379 04-21 13:18 /etc/passwd

作为普通用户如果修改自己的口令通过修改/etc/passwd肯定是不可完成的任务,但是不是可以通过一个命令来修改呢答案是肯定的,作为普通用户可以通过passwd 来修改自己的口令这归功于passwd命令的权限我们来看一下;

[root@localhost ~]# ls -l /usr/bin/passwd
-r-s--x--x 1 root root 21944 02-12 16:15 /usr/bin/passwd

因为/usr/bin/passwd 文件已经设置了setuid 权限位(也就是r-s–x–x中的s),所以普通用户能临时变成root,间接的修改/etc/passwd,以达到修改自己口令的权限。
  
(2)setgid
  该权限只对目录有效. 目录被设置该位后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。
  
(3)sticky bit
  该位可以理解为防删除位. 一个文件是否可以被某用户删除, 主要取决于该文件所属的组是否对该用户具有写权限. 如果没有写权限, 则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件. 如果希望用户能够添加文件但同时不能删除文件, 则可以对文件使用sticky bit位. 设置该位后, 就算用户对目录具有写权限, 也不能删除该文件。

2、如何操作这些标志
  操作这些标志与操作文件权限的命令是一样的,都是 chmod。有两种方法来操作,
(1)方式一
chmod u+s temp – 为temp文件加上setuid标志(setuid 只对文件有效)
chmod g+s tempdir – 为tempdir目录加上setgid标志(setgid 只对目录有效)
chmod o+t temp – 为temp文件加上sticky标志(sticky只对文件有效)

(2)方式二
  采用八进制方式,对一般文件通过三组八进制数字来置标志,如 666,777,644等。如果设置这些特殊标志, 则在这组数字之外外加一组八进制数字,如 4666,2777等。这一组八进制数字三位的意义如下:
abc
a - setuid位, 如果该位为1, 则表示设置setuid 4—
b - setgid位, 如果该位为1, 则表示设置setgid 2—
c - sticky位, 如果该位为1, 则表示设置sticky 1—
  设置完这些标志后, 可以用 ls -l 来查看。如果有这些标志, 则会在原来的执行标志位置上显示。 如
rwsrw-r-- 表示有setuid标志
rwxrwsrw- 表示有setgid标志
rwxrw-rwt 表示有sticky标志
  那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t)。否则, 显示为大写字母 (S, S, T)。
  
注意:
  setuid和setgid会面临风险,所以尽可能的少用