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) 收藏 举报