chmod,chown,umask,隐藏权限lsattr,chattr

文件或目录权限 chmod

之前学习的ls -l命令时候,学习了列出每个位置都是什么。

[root@aminglinux-01 ~]# ls -l
总用量 4
   -rw-------.   1         root   root    1422     7月  31 23:06 anaconda-ks.cfg
文件类型  权限   inode使用数量   所有者  所属组  文件大小          日期
  • 开头除了第一位是文件类型外,后面九位都是权限位。

  • 在inode使用量前面11位。第一位表示文件类型,后面九位表示文件权限,最后一个(.)是受制于selinux。如果关闭selinux,新建的文件或目录就会没有(.)

  • 在九位权限位置里,前三位代表所有者权限,中间三位是所属组权限,后三位是其他用户权限。

  • 其中rwx

    • r 读 数字4
    • w 写 数字2
    • x 执行 数字1
  • 权限一般也用数字表示,比如764,就是所有者(u)rwx,所属组(g)rw-,其他用户(o)r--

r+w+x=7
rwxrwxrwx=777

修改权限命令: chmod

  • chmod = change mode 更改权限
  • 用法:chmod 777 文件/目录名字
  • 或者:chmod u=rwx,g=rw,o=r 文件/目录名字
  • 操作只对目录或文件本身生效。如需目录及子文件子目录全部生效需要加-R
[root@aminglinux-01 ~]# ls -l
总用量 8
-rw-r--r--. 1 root root 1008 8月   9 08:55 2.txt
-rw-------. 1 root root 1422 7月  31 23:06 anaconda-ks.cfg.1
[root@aminglinux-01 ~]# 

现在的2.txt文件权限是644。我们改成700,权限就会变成rwx --- ---。如下:

[root@aminglinux-01 ~]# chmod 700  2.txt 
[root@aminglinux-01 ~]# ls -l
总用量 8
-rwx------. 1 root root 1008 8月   9 08:55 2.txt
-rw-------. 1 root root 1422 7月  31 23:06 anaconda-ks.cfg.1
[root@aminglinux-01 ~]# 
  • chmod -R

加上-R 命令可以同时更改目录及目录下所有的权限。

[root@aminglinux-01 ~]# chmod 700 /tmp/aming1/
[root@aminglinux-01 ~]# ls -l /tmp/
总用量 236
-rwxr-xr-x. 1 root root 117656 8月   9 09:19 111
drwx------. 3 root root     17 8月   9 09:23 aming1
drwxr-xr-x. 4 root root     31 8月   9 09:34 aming2

[root@aminglinux-01 ~]# ls -l /tmp/aming1/
总用量 0
drwxr-xr-x. 3 root root 30 8月   9 09:40 111
[root@aminglinux-01 ~]# chmod -R 777 /tmp/aming1/
[root@aminglinux-01 ~]# ls -l /tmp/aming1/
总用量 0
drwxrwxrwx. 3 root root 30 8月   9 09:40 111
[root@aminglinux-01 ~]# ls -l /tmp/
总用量 236
-rwxr-xr-x. 1 root root 117656 8月   9 09:19 111
drwxrwxrwx. 3 root root     17 8月   9 09:23 aming1
drwxr-xr-x. 4 root root     31 8月   9 09:34 aming2
  • 还有一个用法是 chmod a+x 文件/目录名字

意思是u,g,o同时加上x权限。

a-x,就是全部去掉x权限。

也是可以,u+w,u-x,g+w,g-w等等都可以用。

[root@aminglinux-01 ~]# chmod 700 /tmp/aming1/

[root@aminglinux-01 ~]# ls -l /tmp/
总用量 236
-rwxr-xr-x. 1 root root 117656 8月   9 09:19 111
drwx------. 3 root root     17 8月   9 09:23 aming1
drwxr-xr-x. 4 root root     31 8月   9 09:34 aming2


[root@aminglinux-01 ~]# chmod a+x /tmp/aming1/
[root@aminglinux-01 ~]# ls -l /tmp/
总用量 236
-rwxr-xr-x. 1 root root 117656 8月   9 09:19 111
drwx--x--x. 3 root root     17 8月   9 09:23 aming1
drwxr-xr-x. 4 root root     31 8月   9 09:34 aming2

[root@aminglinux-01 ~]# chmod a-x /tmp/aming1/
[root@aminglinux-01 ~]# ls -l /tmp/
总用量 236
-rwxr-xr-x. 1 root root 117656 8月   9 09:19 111
drw-------. 3 root root     17 8月   9 09:23 aming1
drwxr-xr-x. 4 root root     31 8月   9 09:34 aming2
[root@aminglinux-01 ~]# 

更改所有者和所属组 chown

  • chown = change owner 更改所有者
  • chown 不仅可以更改所有者,也可以更改所属组。
  • cat /etc/passwd 来查看系统用户都有哪些。
  • 用法:chown 所有者:所属组 文件名/目录

下面修改一下新建文件的所有者。

[root@aminglinux-01 ~]# touch /tmp/lunyu.log
[root@aminglinux-01 ~]# ls -l /tmp/lunyu.log 
-rw-r--r--. 1 root root 0 8月   9 21:45 /tmp/lunyu.log
[root@aminglinux-01 ~]# chown linyu /tmp/lunyu.log 
[root@aminglinux-01 ~]# ls -l /tmp/lunyu.log 
-rw-r--r--. 1 linyu root 0 8月   9 21:45 /tmp/lunyu.log
[root@aminglinux-01 ~]# 
  • 更改所属组命令:chgrp,用法同上。但是chown既可以更改所有者也可以同时或者单独更改所属组,所以chgrp就要淘汰啦。

  • chown 同时或者单独更改所属组
[root@aminglinux-01 ~]# chown linyu:games /tmp/lunyu.log 
[root@aminglinux-01 ~]# ls -l /tmp/lunyu.log 
-rw-r--r--. 1 linyu games 0 8月   9 21:45 /tmp/lunyu.log
[root@aminglinux-01 ~]# chown :root /tmp/lunyu.log 
[root@aminglinux-01 ~]# ls -l /tmp/lunyu.log 
-rw-r--r--. 1 linyu root 0 8月   9 21:45 /tmp/lunyu.log
[root@aminglinux-01 ~]# 
  • chown -R 命令

同样可以一次性更改目录及子目录和文件的所有者和所属组。

umask

linux在创建一个文件或者目录时候都会有一个默认的权限。这个是怎么来的呢。
运行一下 umask

[root@aminglinux-01 ~]# umask
0022

这个是root用户下的umask值,通过这个值可以确定文件以及目录默认是什么权限。

首先创建一个目录和文件。然后修改一下啊umask值,在创建一个目录和文件。然后对比一下看有什么联系。

[root@aminglinux-01 ~]# touch 123.txt
[root@aminglinux-01 ~]# mkdir aaa
[root@aminglinux-01 ~]# ls -l 
总用量 8
-rw-r--r--. 1 root root    0 8月   9 22:08 123.txt
-rwx------. 1 root root 1008 8月   9 08:55 2.txt
drwxr-xr-x. 2 root root    6 8月   9 22:08 aaa
-rw-------. 1 root root 1422 7月  31 23:06 anaconda-ks.cfg.1
在0022时候,文件默认是:644,目录默认是:755
[root@aminglinux-01 ~]# umask 002
[root@aminglinux-01 ~]# umask 
0002
[root@aminglinux-01 ~]# touch 456.txt
[root@aminglinux-01 ~]# mkdir bbb
[root@aminglinux-01 ~]# ls -l
总用量 8
-rw-r--r--. 1 root root    0 8月   9 22:08 123.txt
-rwx------. 1 root root 1008 8月   9 08:55 2.txt
-rw-rw-r--. 1 root root    0 8月   9 22:14 456.txt
drwxr-xr-x. 2 root root    6 8月   9 22:08 aaa
-rw-------. 1 root root 1422 7月  31 23:06 anaconda-ks.cfg.1
drwxrwxr-x. 2 root root    6 8月   9 22:14 bbb
[root@aminglinux-01 ~]# 
在0002时候,文件默认是:664,目录默认是:775

得出答案是:

在0022时候,文件默认是:644,目录默认是:755

在0002时候,文件默认是:664,目录默认是:775

首先目录,必须会有x权限,因为想查看这个目录,首先都要进入查看,所以有x权限。所以默认权限最大的话就是777.文件不需要必须有x权限,所以默认666就可以满足。


由此规律得出:目录:777-022=755
                    777-002=775
              文件:666-022=644
                    666-002=664
                    

这个规律合乎逻辑但是不一定是准确的。

如果我们设置umask 为 003。按照之前的算法666-003=663


[root@aminglinux-01 ~]# umask 003
[root@aminglinux-01 ~]# touch 888.txt
[root@aminglinux-01 ~]# ls -l 888.txt 
-rw-rw-r--. 1 root root 0 8月   9 22:27 888.txt
[root@aminglinux-01 ~]# 

通过实践发现默认的权限竟然是664。

那么之前的算法就是有漏洞的。

正确的算法是:

文件 666(rw-rw-rw-)- 003(-------wx)=rw-rw-r-- 也就是664

目录 777(rwxrwxrwx)- 002(-------w-)=rwxrwxr-x 也就是775

隐藏权限 lsattr ,chattr

  • 设置隐藏权限命令:chattr

  • 查看隐藏权限命令:lsattr

  • 查看目录的隐藏权限命令:lsattr -d

用法 :

  • 常用:

chattr +i

chattr +a

  • chattr +i

[root@aminglinux-01 ~]# chattr +i 123.txt 
[root@aminglinux-01 ~]# lsattr 123.txt 
----i----------- 123.txt

在文件以及目录+i权限时候,是不可以更改,移动,删除等操作,不能做任何操作

  • chattr +a

在文件以及目录+a权限时候,是不能移动,删除等操作,但是文件可以追加内容,目录里可以新加文件或目录。

  • 如需取消权限:chattr -i/a

  • 扩展:

a:让文件或目录仅供附加用途。

b:不更新文件或目录的最后存取时间。

c:将文件或目录压缩后存放。

d:将文件或目录排除在倾倒操作之外。

i:不得任意更动文件或目录。

s:保密性删除文件或目录。

S:即时更新文件或目录。

u:预防以外删除。

  • 参数

  -R 递归处理,将指定目录下的所有文件及子目录一并处理。

posted on 2018-03-28 21:41  xxxyyzz点xyz  阅读(795)  评论(0)    收藏  举报

导航