Linux运维学习之路(6)文件和目录权限

来源:互联网 发布:电脑看本子的软件 编辑:程序博客网 时间:2024/06/08 10:23

一、概念


  文件权限设置: 可以赋于某个用户或组 能够以何种方式 访问某个文件。  Linux文件权限主要分为读、写、执行三种控制权限,使用ls -l命令查看文件或目录信息时,系统会显示为r(读取权限)、w(写入权限)、x(执行权限),例如:

这里写图片描述
第一列的第一个字符代表文件类型:-代表普通文件,d代表目录,l代表连接文件,b代表块设备文件,c代表字符设备文件,s代表套接字文件,p代表管道文件。第二至第九个字符代表权限,权限三位为一组,分别是所有者(user),所属组(group),其他人(other)。
第二列是链接数量或子目录数量。
第三列是文档的所有者。
第四列是文档的所属组。
第五列是文档的容量大小。
第六、七、八列是文档最近被修改的时间,例如Sep 3 12:12
第九列是文件或目录的名称。

对于权限,除了可以用比较直观的rwx表示外,还可以使用数字表示,知道了权限是什么,那么权限对文件和目录的含义是什么呢?
这里写图片描述

二、设置权限


(1) chown:改变文件或目录的所有者、所属组
这里写图片描述
修改file001的所有者、所属组,(chown tom:hr file001等价于chown tom.hr file001)
这里写图片描述
ll是别名,相当于ls -l
这里写图片描述
还可以只修改文件的所有者或所属组
这里写图片描述
递归修目录的所有者或所属组
这里写图片描述

(2)chmod:改变文件或目录的权限
这里写图片描述

a.使用符号
u 表示所有者
g 表示所属组
o 表示其他人
a 表示所有用户(包括所有者、所属组、其他人)

= 表示重新设置用户权限,会覆盖原来的权限
- 表示在原来的权限上去掉用户权限
+ 表示在原来的权限上加上用户权限

# chmod u+x file1             //属主增加执行# chmod a=rwx file1           //所有人等于读写执行# chmod a=- file1             //所有人没有权限# chmod ug=rw,o=r file1       //属主属组等于读写,其他人只读

这里写图片描述

b.使用数字
这里写图片描述
基本权限类型:
读:r 4
写:w 2
执行: x 1

例如644
6 = 4 + 2 => rw-
4 = 4 => r–
4 = 4 => r–
例如755
7 = 4 + 2 + 1 =>rwx
5 = 4 + 1 =>r-x
5 = 4 + 1 =>r-x

chown与chmod的区别:
这里写图片描述
这里写图片描述

三、设置权限案例


针对hr部门的访问目录/home/hr设置权限,要求如下:
1. root用户和hr组的员工可以读、写、执行
2. 其他用户没有任何权限

# groupadd hr# useradd hr01 -G hr# useradd hr02 -G hr# mkdir /home/hr# chgrp hr /home/hr# chmod 770 /home/hr# ll -d /home/hr/drwxrwx---. 2 root hr 4096 313 14:26 /home/hr/

==rwx对文件的影响==

实战案例1: rwx对文件的影响# vim /home/file1date# ll /home/file1-rw-r--r-- 1 root root 5 726 14:43 /home/file1# chmod o+x /home/file1# chmod o+w /home/file1# su - alice[alice@localhost ~]$ cat /home/file1    //测试读[alice@localhost ~]$ /home/file1        //测试执行-bash: /home/file1: 权限不够[alice@localhost ~]$ /home/file120170726日 星期三 14:46:29 CST[alice@localhost ~]$ vim /home/file1    //测试写datels

==rwx对目录的影响==

实战案例2:对目录没有w,对文件有rwx# mkdir /dir10# touch /dir10/file1# chmod 777 /dir10/file1 # ll -d /dir10/drwxr-xr-x. 2 root root 4096 311 18:37 /dir10/# ll /dir10/file1 -rwxrwxrwx. 1 root root 0 311 18:37 /dir10/file1[alice@localhost ~]$ cat /dir10/file1 [alice@localhost ~]$ rm -rf /dir10/file1 rm: 无法删除"/dir10/file1": 权限不够实战案例3:对目录有w,对文件没有任何权限# chmod 777 /dir10/# chmod 000 /dir10/file1 # ll -d /dir10/drwxrwxrwx. 2 root root 4096 311 18:37 /dir10/# ll /dir10/file1 ----------. 1 root root 0 311 18:37 /dir10/file1[alice@localhost ~]$ cat /dir10/file1 cat: /dir10/file1: 权限不够[alice@localhost ~]$ rm -rf /dir10/file1 [alice@localhost ~]$ touch /dir10/file2
小结: 对目录有w权限,可以在目录中创建新文件,可以删除目录中的文件(跟文件权限无关)注意事项:文件: x 权限小心给予目录: w 权限小心给予

四、基本权限 ACL


由于系统的基本权限是针对文档所有者、所属组或其他用户进行设置的,无法针对某个单独的用户进行控制,所以就有了ACL访问控制列表。

文件权限管理之: ACL设置基本权限(r、w、x)
UGO设置基本权限: 只能一个用户,一个组和其他人
ACL 设置基本权限: r,w,x

==ACL基本用法==设置:# touch /home/test.txt# ll /home/test.txt -rw-r--r-- 1 root root 0 10-26 13:59 /home/test.txt# getfacl /home/test.txt# setfacl -m u:alice:rw /home/test.txt //增加用户alice权限# setfacl -m u:jack:- /home/test.txt //增加用户jack权限# setfacl -m o::rw /home/test.txt查看/删除:# ll /home/test.txt -rw-rw-r--+ 1 root root 0 10-26 13:59 /home/test.txt# getfacl /home/test.txt# setfacl -m g:hr:r /home/test.txt# setfacl -x g:hr /home/test.txt //删除组hr的acl权限# setfacl -b /home/test.txt //删除所有acl权限=查看帮助=# man setfacl# getfacl file1 |setfacl --set-file=- file2 //复制file1的ACL权限给file2

ACL高级特性

mask:用于临时降低用户或组(除属主和其他人)的权限mask决定了他们的最高权限建议:为了方便管理文件权限,其他人的权限置为空# setfacl -m o::- /home/file100.txt //chmod o=- /home/file100.txt# setfacl -m m::--- /home/file100.txtdefault: 继承(默认)要求: 希望alice能够对/home以及以后在/home下新建的文件有读、写、执行权限思路:步骤一: 赋予alice对/home读、写、执行权限# setfacl -R -m u:alice:rwx /home步骤二: 赋予alice对以后在/home下新建的文件有读、写、执行权限 (使alice的权限继承)# setfacl -m d:u:alice:rwx /home

高级权限suid,sgid,sticky

文件权限管理之:高级权限问题1: 为什么会失败!# ll /root/file1.txt -rw-r--r-- 1 root root 4 727 14:14 /root/file1.txt[alice@localhost ~]$ cat /root/file1.txtcat: /root/file1.txt: 权限不够分析:root /usr/bin/cat (root) /root/file1.txt 可以成功alice /usr/bin/cat (alice) /root/file1.txt 出错
普通用户修改密码:alice /usr/bin/passwd (root) /etc/shadow高级权限的类型suid 4sgid 2sticky 1 粘滞位设置特殊权限a、字符chmod u+s filechmod g+s filechmod g+s dirchmod o+t dirb、数字chmod 4777 filechmod 7777 filechmod 2770 dirchmod 3770 dir
示例1:suid 普通用户通过suid提权 <针对文件>在进程文件(二进制,可执行)上增加suid权限# chmod u+s /usr/bin/cat# chmod u+s /usr/bin/rm[alice@localhost ~]$ cat /root/file1.txt普通用户可以修改密码:alice /usr/bin/passwd /etc/shadow[alice@localhost ~]$ ll /etc/shadow---------- 1 root root 1487 64 13:43 /etc/shadow[alice@localhost ~]$ ll /usr/bin/passwd-rwsr-xr-x. 1 root root 30768 217 2012 /usr/bin/passwd[alice@localhost ~]$ passwd 更改用户 alice 的密码 。为 alice 更改 STRESS 密码。(当前)UNIX 密码:# ps aux |grep passwdroot 3674 0.0 0.0 165764 1884 pts/1 S+ 14:34 0:00 passwd

目前两种给普通用户提权手段

sudo: 了解,有针对性,例如针对某个用户以能够以root的身份执行某些命令。suid: 基本针对所有用户,任何用户在执行有suid权限的程序时(例如/usr/bin/rm),都是以root身份在执行。
示例2:sticky 用户只能删除自己的文件 <针对目录># mkdir /home/dir1# chmod 777 /home/dir1测试:user1在/home/dir1建立文件, user2尝试删除!# chmod o+t /home/dir1# ll -d /home/dir1rwxrwxrwt 2 root root 4096 09-02 02:26 /home/dir1谁可以删除:root文件的所有者目录的所有者
示例3:sgid 新建文件继承目录属组 <针对目录># mkdir /home/hr# chgrp hr /home/hr/# chmod g+s /home/hr# ll -d /home/hr/drwxr-sr-x. 2 root hr 4096 Dec 5 16:03 /home/hr/# touch /home/hr/file9# ll /home/hr/-rw-r--r--. 1 root hr 0 Dec 5 16:03 file9

文件属性 chattr

文件权限管理之: 文件属性注:设置文件属性(权限),针对所有用户,包括root# touch file100 file200 file300# lsattr file100 file200 file300 -------------e- file100-------------e- file200-------------e- file300# man chattr# chattr +a file100 # chattr +i file200 # chattr +A file300# lsattr file100 file200 file300 -----a-------e- file100----i--------e- file200-------A-----e- file300# echo 111 > file100 //以覆盖的方式写入bash: file100: Operation not permitted# rm -rf file100 rm: cannot remove `file100': Operation not permitted# echo 111 >> file100 //以追加的方式写入,例如日志文件# echo 111 > file200bash: file200: Permission denied[root@instructor ~]# echo 111 >> file200bash: file200: Permission denied# rm -rf file200 rm: cannot remove `file200': Operation not permitted# chattr -a file100# chattr -i file200# chattr -A file300

进程掩码 mask umask
文件权限管理之: 进程umask
进程 新建文件、目录的默认权限会受到umask的影响,umask表示要减掉的权限

shell (vim,touch) =======umask======> 新文件或目录权限
vsftpd =======umask======> 新文件或目录权限
samba =======umask======> 新文件或目录权限
useradd =======umask======> 用户HOME

示例1: 在shell进程中创建文件[root@tianyun ~]# umask //查看当前用户的umask权限0022[root@tianyun ~]# touch file800[root@tianyun ~]# mkdir dir800[root@tianyun ~]# ll -d dir800 file800 drwxr-xr-x. 2 root root 4096 311 19:40 dir800-rw-r--r--. 1 root root 0 311 19:40 file800示例2:修改shell umask值(临时)[root@tianyun ~]# umask 000[root@tianyun ~]# mkdir dir900[root@tianyun ~]# touch file900[root@tianyun ~]# ll -d dir900 file900 drwxrwxrwx. 2 root root 4096 311 19:44 dir900-rw-rw-rw-. 1 root root 0 311 19:44 file900示例3:修改shell umask值(永久 建议不要)[root@tianyun ~]# vim /etc/profile if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; thenumask 002elseumask 022fi[root@tianyun ~]# source /etc/profile //立即在当前shell中生效示例4:通过umask决定新建用户HOME目录的权限[root@tianyun ~]# vim /etc/login.defs UMASK 077[root@tianyun ~]# useradd gougou[root@tianyun ~]# ll -d /home/gougou/drwx------. 4 gougou gougou 4096 311 19:50 /home/gougou/[root@tianyun ~]# vim /etc/login.defsUMASK 000[root@tianyun ~]# useradd yangyang[root@tianyun ~]# ll -d /home/yangyang/drwxrwxrwx. 4 yangyang yangyang 4096 311 19:53 /home/yangyang/示例5:例如vsftpd进程 /etc/vsftpd/vsftpd.conf 【了解】[root@tianyun ~]# yum -y install vsftpd[root@tianyun ~]# man vsftpd.confanon_umasklocal_umask

有什么错误的地方,欢迎大家指出!未完待续…