一、文件或目录权限chmod
一个Linux目录或者文件,都会有一个所有者和所属组。所有者是指文件的拥有者,而所属组指的是这个文件属于哪一个用户组。
通过ls -l 可以查看文件的所有者、所属组、权限等信息。
[root@centos-01 ~]# ls -l /etc/passwd
-rw-r--r--. 1 root root 1008 10月 17 06:04 /etc/passwd
权限前2-4位是所有者权限,中间5-7位是所属组权限,最后8-10位是其他用户权限。r=-读权限,w=写权限,x=执行权限。
权限可以用数字表示
r=4 w=2 x=1 rwx=7 r--=4 ---=0
-rw-r--r-- = 644
-rwwrwxrwx = 777
[root@centos-01 ~]# chmod 700 /root/.ssh/ #给目录分配700权限,drwx------
[root@centos-01 ~]# ls -ld /root/.ssh/
drwx------. 2 root root 80 10月 19 22:00 /root/.ssh/
权限第十一位是个点,意味着这个文件受selinux控制。
[root@centos-01 ~]# getenforce #查看selinux 状态
Enforcing #开启
[root@centos-01 ~]# setenforce 0 #临时关闭selinux
[root@centos-01 ~]# getenforce
Permissive #也是开启状态,只不过是打印一个警告
修改配置文件才可以永久修改
/etc/selinux/config
将SELINUX=enforcing 改成seling = disabled
chmod -R将目录下的子目录子文件一次性的批量更改文件权限
目录和目录下文件的原始权限:755,644
[root@centos-01 tmp]# ls -ld test2
drwxr-xr-x. 2 root root 19 10月 23 23:17 test2
[root@centos-01 tmp]# ls -l test2/1.txt
-rw-r--r--. 1 root root 0 10月 23 23:17 test2/1.txt
将目录文件改为777。之后可以发现,目录权限已改为777,但文件权限还是644。
[root@centos-01 tmp]# chmod 777 test2
[root@centos-01 tmp]# ls -ld test2
drwxrwxrwx. 2 root root 19 10月 23 23:17 test2
[root@centos-01 tmp]# ls -l test2
-rw-r--r--. 1 root root 0 10月 23 23:17 1.txt
加上-R 参数,并将目录权限改为700。之后可以发现目录权限和文件权限都被改成了700。
[root@centos-01 tmp]# chmod -R 700 test2
[root@centos-01 tmp]# ls -ld test2
drwx------. 2 root root 19 10月 23 23:17 test2
[root@centos-01 tmp]# ls -l test2
-rwx------. 1 root root 0 10月 23 23:17 1.txt
u=user g=group o=other a=all
chmod u=rwx,g=r,o=r a.txt #此时a.txt具有-rwxr--r--权限
chmod a=rwx a.txt #此时a.txt具有-rwxrwxrwx权限
chmod u-x a.txt #此时a.txt具有 -rw-rwxrwx权限
加号,等号同上。
权限对目录的重要性:
r:表示具有读取目录结构列表的权限,有r权限可以通过ls显示目录内容列表。
w:表示具有更改该目录结构列表的权限,如下:
新建新的文件与目录
删除已经存在的文件与目录(不论该我呢见的权限为何)
将已存在的文件或目录重命名
转移该目录内的文件、目录位置
总之,目录的w权限就与该目录下的文件名变动有关。
x:代表的是用户能否进入该目录成为工作目录的用途,所谓的工作目录就是你目前所在的目录。目录不具有x权限则不能切换(cd)到此目录内,
注意:要开放目录给任何人浏览时,至少要给r及x权限。
三、更改所有者和所属组chown
chown 更改文件(目录)所有者,也可以更改所属组
[root@localhost /]# ls -l /tmp/1.txt #查看文件属性
-rw-r--r--. 1 root root 15 10月 24 14:12 /tmp/1.txt
#文件的所有者和所属组均为 root 。
[root@localhost /]# chown huang /tmp/1.txt
#将文件的所有者改为 huang。
[root@localhost /]# ls -l /tmp/1.txt
-rw-r--r--. 1 huang root 15 10月 24 14:12 /tmp/1.txt
#文件的所有者由root变成了huang,而用户组依然是root 。
chown user1:group1 目录(文件)
#可以将目录(文件)的所有者改为user1,所属组改为group1。
chown :group2 目录(文件)
#可以将目录(文件)的所属组改为group2,而所有者没有改变。
chgrp 更改文件(目录)的所属组
[root@localhost /]# ls -l /tmp/test2.txt #查看文件属性
-rw-r--r--. 1 root root 4 10月 24 14:16 /tmp/test2.txt
#文件的所有者和所属组均为 root 。
[root@localhost /]# chgrp huang /tmp/test2.txt
#将文件的所有组改成huang。
[root@localhost /]# ls -l /tmp/test2.txt
-rw-r--r--. 1 root huang 4 10月 24 14:16 /tmp/test2.txt
#文件的所有者没有改变,还是root。所属组变成了huang。
shown -R 可以批量修改目录及目录下文件的所有者和所属组。
shown -R user:group /tmp/test/
#可以将/tmp/test 目录及目录下文件的所有者改为user所属组改为group。
查看系统中有哪些用户可用命令cat /etc/passwd 查看。
四、umask
通过umask,可以确定文件和目录的默认权限。
默认情况下,目录最大权限为:777
默认情况下,文件最大权限为:666
我们新建文件和目录的权限都为文件最大权限-umask值。
查看umask值,直接输如 umask就可以查看
[root@localhost ~]# umask
0022
修改umask(临时)
[root@localhost ~]# umask 002
[root@localhost ~]# umask
0002
[root@localhost /]# mkdir /tmp/test
#在tmp目录下创建test目录
[root@localhost /]# touch /tmp/test/1.txt
#在test目录下创建1.txt文件
[root@localhost /]# ls -l /tmp/test/1.txt
-rw-r--r--. 1 root root 0 10月 24 15:45 /tmp/test/1.txt
#新建文件权限为644(rw-rw-rw- - ----w--w- = rw-r--r--)
[root@localhost /]# ls -ld /tmp/test
drwxr-xr-x. 2 root root 19 10月 24 15:45 /tmp/test
#新建目录权限为755(rwxrwxrwx - ----w--w- = rwxr-xr-x)
#默认情况下root的umask为022,普通用户为002
[root@localhost /]# umask 002
#将umask改成002
[root@localhost /]# mkdir /tmp/test2
#在tmp目录下创建test2目录
[root@localhost /]# touch /tmp/test/2.txt
#在/tmp/test/目录下创建2.txt
[root@localhost /]# ls -l /tmp/test/2.txt
-rw-rw-r--. 1 root root 0 10月 24 16:04 /tmp/test/2.txt
#新建文件权限为664(rw-rw-rw- - -------w- = rw-r-wr--)
[root@localhost /]# ls -ld /tmp/test2
drwxrwxr-x. 2 root root 6 10月 24 16:03 /tmp/test2
#新建目录权限为775(rwxrwxrwx - -------w- = rwxrwxr-x)
如果把umask改成003,如果用umask相减。理论上新建的文件权限为663(rw-rw--wx)。实际情况目录权限为664。
rw-rw-rw- - -------wx = rw-rw-r--
0权限减去任意权限都为0.
[root@localhost /]# umask
0003 #umask为003
[root@localhost /]# touch test.txt #新建文件test.txt
[root@localhost /]# ls -l test.txt
-rw-rw-r--. 1 root root 0 10月 24 16:15 test.txt
#文件权限为664
永久修改权限需要修改配置文件:
vi /etc/profile 71行为普通用户权限,73行为超级用户权限
vi /etc/bashrc 60行为普通用户权限,62行为超级用户权限
配置修改好需要刷新配置:
source /etc/profile
source /etc/bashrc
四、隐藏权限lsattr、chattr
隐藏权限用ls -l是查询不到的。
创建一个1.txt文件,用chattr给它加上i权限。
chattr +i 1.txt
vi编辑这个文件,进入后按i进入编辑模式,下方提示该文件为只读文件。
虽然可以输入内容,但是保存的时候还是不能保存,即便是用wq!也不行。
i权限可以让文件不能被删除、改名、追加、移动等。只有root用户能设置该属性。
chattr -i 1.txt 可以将文件的i权限去掉。
chattr +a 5.txt a权限只能追加,不能修改、删除、重命名、重定向、编辑等。(可以touch,更改mtime)
chattr -a 5.txt 可以将文件的a权限去掉
给目录加上i权限后,目录不能删除文件,不能移动、不能创建文件。目录下文件内容可以更改,但是文件不能删除,不能重命名。
给目录加上a权限,可以创建文件,但是不能删除、移动目录。
目录加上a权限,目录下的文本内容可以修改,但不能对目录下的文件进行重命名、删除操作。
lsattr 可以查询文件的特殊权限。
lsattr -a 可以查看所有文件的特殊权限,包括隐藏文件
lsattr -d 只列出当前目录的数据
lsattr -R 可以连同子目录的数据一并列出来
本文转自 豆渣锅 51CTO博客,原文链接:http://blog.51cto.com/754599082/1976016