1 Linux的权限
1.1 Linux从文件的属性看起
1.2 属主和属组的概念
上面图片中,后半部分,两个root ,第一个代表这个文件夹是属于root用户一个人的;第二个root代表这个文件夹是属于root这个组的。
换句话说就是:就是这个/root/文件夹承认root用户是主人,同时还承认一个root组中的所有成员也都是主人。
假如一个文件夹确定了属主是某个用户,属组是某个组,那就是说这两个用户可以对这个文件夹为所欲为了?
1.3 权限位
- 位置1:决定是不是可以读,如果可以读就是 r ;如果不可以读就是 -
- 位置2:决定是不是可以写,如果可以写就是 w ;如果不可以就是 -
- 位置3:决定是不是可以执行,如果可以执行就是 x ;如果不可以执行就是 -
1.4 普通文件和权限位的关系
一个普通的文本文件,属主是 linuxuser,属组是 admin,linuxuser对应的权限是 rwx,也就是可读,可写,可执行;admin 组对应的权限是r-x,也就是,可读,不可写,可执行。
对于一个普通文件来说,如果有可读权限则可通过cat命令读取内容:
cat /home/linuxuser/1.txt --有可读权限才能这样看文件里的内容,可读权限指的是文件中的内容是否可以被访问到
如果有可写权限的可以通过 vim 进行编辑文件:
vim /home/linuxuser/1.txt --有可写权限的话,才可以编辑文件,并且允许你保存如果没有权限,Vim不让保存。
可执行权限,是针对Shell脚本而言的,有可执行权限才能被执行
可执行权限指的是如果这个文件是一个脚本文件,就必须得有可执行权限才能运行起来。脚本的意思就是一段代码,执行一段功能。
1.5 解读文件夹和权限位的关系
- 文件夹的权限与普通文件还是有一些差别的
对于文件来说,只有文件夹有可读权限才能通过 ls 命令访问这个文件夹下的内容
只有文件夹具有可写权限,才能在文件夹下进行 创建,删除,改文件名的操作
可执行权限,准确的说,就是不能进入这个文件夹,最直接的就是 cd 命令能不能用。
1.6 other其他用户权限是什么
其他用户权限,既不是属组,也不是属主,就算所是其他用户。
/root/ 文件夹的权限很严格,除了root用户外,其他的任何用户都没有任何权限。切换到 linuxuser 下测试,什么权限也没有(linuxuser 在这里就相当于是其他用户)。
1.7 修改权限
chown -R 属主:属组 用户文件夹 --chown命令配合-R可以一次性改变属主和属组。
chmod u=rwx g=rx o=r 用户文件夹
-u代表user,也就是属主,g代表属组的权限,o代表其他权限chmod a=rwx 用户文件夹
-a代表所有的权限包括属主,属组,其他还可以使用加减法,
例如:u-w 表示去掉可写权限,u+w 表示加上可写权限。
1.8 用数字快速修改权限
规定:r = 4,w = 2,x = 0,-=0(没有权限就是0),然后用加法进行计算。
2. 权限扩展
2.1 文件默认权限 umask
当在Linux下创建一个新文件或文件夹时,就算没有设定权限,也会自带一个默认权限,下图这种情况就是 umask 的原因。
umask 的值是 0022,第一个0不用管先,在Linux操作系统中,有初始最大权限的概念,文件是 666,文件夹是 777,这就相当于锁定一个初始值。
Linux当前的umask是022,用它做一个减法,把最大初始权限每一位分别减去对应的umask的每一位,例如:777-022的每位相减的结果是 755,所以创建一个文件的默认权限就是 755。
需要特别说明的是,如果是针对一个文件夹,就直接用减法就可以了。如果是针对一个普通文件,还是可以用减法,不过要分两种情况,
第一种情况,减法后的每一位都是偶数,这就是最终结果
第二种情况,减法后的任意一位是奇数,那么这一位奇数需要 +1。
可以通过 vim /etc/profile 命令来修改 umask 的值
2.2 文件的特殊权限位
linuxuser是一个普通用户,没有任何权限,但是修改了密码,也就是修改了 shadow 文件。
当找到passwd命令时,发现这个命令的属主权限中有一个是 s,这代表了普通用户linuxuser使用passwd命令时,系统看到passwd命令中属主属性有大写 S 后,表示这个命令的属主权限被linuxuser用户获得,也就是linuxuser用户获得文件 /etc/shadow 的root 的rwx权限。
一个普通用户linuxuser是没有权限直接修改 /etc/shadow 文件的,因为这个文件的权限是 --- --- ---,而linuxuser修改自己密码时使用 passwd 命令,等于说 passwd是一个桥梁。passwd 这个命令也是一个文件,也就是 /usr/bin/passwd,并且这个文件的属主权限中有一位 SGID。有了这个 SGID 后,当普通用户 linuxuser 调用这个 passwd 命令时,linux系统就去找这个 passwd 文件的属主,发现 passwd 文件的属主是 root 管理员,并且 root 对这个 passwd 文件有 rw 权限。所以说,root 用户对passwd 文件有 读/写权限,于是Linux 操作系统让 linuxuser 用户继承了 读/写 权限,并可以临时用在 shadow 文件上,这样普通用户就通过passwd命令修改了 shadow 文件。SGID 就是一个继承属组的关系。
如果说一个目录没有 SGID 权限时,在这个目录下创建的子目录的属组就是默认的用户属组;
如果说一个目录有 SGID 权限时,不管是那个用户,在这个下面创建子目录都会继承上目录的属组。