ls -l file #查看文件权限 ls -ld dir #查看目录权限2、权限的读取
文件的属性被称为文件的元数据(meta data),一种元数据用1个byte来记录内容。
ls -l a >> -rw-rw-r--. 1 westos westos 0 Oct 5 11:03 a ls -ld zzh/ >> drwxrwxr-x. 2 westos westos 6 Oct 5 11:04 zzh/
(1)文件权限信息:
- | rw-rw-r-- | . | 1 | westos | westos | 0 | Oct 5 11:03 | a
[1] [2] [3] [4] [5] [6] [7] [8] [9]
(2)目录权限信息:
d | rwxrwxr-x | . | 2 | westos | westos | 6 | Oct 5 11:04 | zzh/
[1] [2] [3] [4] [5] [6] [7] [8] [9]
(3)每一位代表含义:
[1]:文件类型
< - >普通文件
管道 | [2]:用户权限 rw- | r-- | r-- 分别代表u(user)、g(group)、o(others)用户的权限。 [3]:系统的selinux开启 [4]:对于文件:文件内容被系统记录的次数(硬连接个数) 对于目录:目录中子目录的个数 [5]:文件所有者 [6]:文件所有组 [7]:对于文件:文件内容大小 对于目录:目录中子文件的元数据大小 [8]:文件内容被修改的时间 [9]:文件(或目录)名称 u:user,文件的所有者(也称拥有者) g:group,文件的所有组(也称拥有组) o:others,既不是拥有者也不是拥有组的其他用户的通称 rxw | r-- | r-- u g o user > group > other < - >:权限未开启 < r >:可读(read) 对于文件:可以读取文件内容;对于目录,可以 < w >:可写(write) 对于文件:可以更改文件内容;对于目录,可以在目录中新建或删除文件 < x >:可执行(execute) 对于文件:可以用文件名称调用文件内记录的程序;对于目录:可以进入目录中 (1) chmod --reference=/tmp ./zzh #复制/tmp目录的权限到./zzh上 这里可以看出,目录的权限是 chmod -R --reference=/tmp ./zzh1 #复制/tmp目录的权限到./zzh1及目录的子文件上,<-R>代表递归操作 这里可以看出,此命令加上了参数<-R>,复制权限时也会让目录下的文件获得相同的权限 (2) chmod < a | u | g | o >< + | - | = >< r | w | x > file #用字符方式设定权限 例如: chmod u-rw ./test/test1 #对文件 chmod -R a=rx ./test #对目录 这里可以看出,经过此操作后,目录 chmod a=w ./test #对目录 这里因为没有设置参数<-R>,所以此操作仅对目录本身有效。 (3) 权限布尔数(bool)指表示方式,即三位二进制数可以表示的范围,权限有则代表1,没有则代表0 这样就可以把权限转化成相应的数字,可以更方便地进行权限管理。 这里先用 答:系统本身存在的意义是共享资源,从安全角度讲系统共享的资源越少、开放的权力越小,系统的安全性就越高;因此既要保证系统安全,又要系统创造价值,就要把应该开放的权力默认开放,把不安全的权力默认保留。所以如何保留权力就需要系统管理人员设定。 (1)临时设定系统预留权力 umask #查看保留权力 umask 保留值 #临时设定系统预留权力 注意: 目录默认权限 = 777 - 文件默认权限 = 777 - 这里先用 由于文件的默认权限要比目录的默认权限少<111>也就是三个位都缺少 (2)永久更改系统预留权力 永久更改系统预留权力分为三步,涉及到对系统配置文件的更改,而且预留权力越大(也就是 第一步:更改shell系统配置文件 vim /etc/bashrc #shell系统配置文件 使用 这里改的是第77行:“<77 umask 022 #root用户的umask>”,把这一行的umask值从022改为其他值,修改后的值就是系统预留权力值。 第二步:更改系统环境配置文件 vim /etc/profile #系统环境配置文件 使用 这里改的是第62行:“<62 umask 022 #root用户的umask>”,把这一行的umask值从022改为其他值,修改后的值就是系统预留权力值。 第三步:重新加载以上两个文件 这里通过 状态监视窗口显示目前系统中存在的用户及用户组,这里我在桌面上新建了三个文件和一个目录,可以看出新建的这些文件默认的用户是 chown lee test1 #改变文件 chgrp linux test2 #改变文件 chown westoslee.westoslee test3 #改变文件 chown -R lee testdir #更改目录 chgrp -R linux testdir #更改目录 这里分别执行了上述命令,从监控窗口可以看出,目录 答:特殊权限是直接控制三位是否开启或关闭的符号位,与之前的“数字方式设置权限”类似,三个位置的权限开启则表示1,关闭则表示0,所以分别由<4,2,1>表示;特殊位是在普通位之前的那一位。 针对目录:如果一个目录的“stickyid”开启后,那么这个目录中的文件只能被所有人删除。 (1)添加“stickyid”权限的方法: (2)小实验: 第一步:先建立一个目录,然后使用 第二步: 切换到用户 第三步: 为了让每个用户只能删除自己的文件,我们对目录设置“stickyid”权限后(这里可以看到此目录的权限的“o”位已经由 针对目录:目录中新建的文件自动归属到目录的所属组中。 针对可执行文件:只针对二进制的可执行文件(c程序),当运行二进制可执行文件时都是用文件所有组身份运行,和执行用户无关。 (1)对目录来说: 添加“sgid”权限的方法: 小实验: 第一步:这里先用 第二步:先切换到用户 第三步:切换到root下,对目录执行 第四步:再次切换到root下,使用 注意:这里虽然文件 (2)对可执行文件来说: 添加“sgid”权限的方法: chmod g+s /bin/cat #修改此程序的 小实验:以 这里需要使用监测程序的命令:(这个命令是监测程序运行时的用户、用户组以及程序名称) 这里第一步:先用 第二步:用 第三步:使用 对可执行文件:只针对二进制可执行文件(c程序),当运行二进制可执行文件是都是以文件拥有者身份运行,和执行用户无关。 (1)添加“suid”权限的方法: chmod u+s /bin/cat #修改此程序的位,使得此文件以文件拥有者身份运行 小实验:以 在上个实验的基础上,通过 答:acl(Aiccess Control Lists,访问控制列表),功能是在列表中可以设定特殊用户对于特殊文件的特殊权限。 这里是< . >表示acl列表没有开启 这里是< + >表示acl列表已开启 测试:这里先创建了一个文件 注意:从< . >到< + >的转变过程,是因为先通过 显示内容分析: #file: testfile #文件名称 #owner: root #文件拥有者 #group: root #文件拥有组 user : : rw- #文件拥有者权限 user : lee : rw- #特殊指定用户权限 group : : r-- #文件拥有组权限 group : westos : -- #特殊指定的用户组的权限 mask : : rw- #能够赋予特殊用户和特殊用户组的最大权限阈值 other : : r-- #其他人的权限 注意:当acl权限列表没有开启时, 注意:当文件权限列表开启后,不要用 setfacl -m u:lee:rw testfile #设定特殊用户 setfacl -m g:westos:rw testfile #设定特殊用户组 setfacl -m u: :rwx testfile #设定文件所有人的权限 setfacl -m g: :0 testfile #设定文件所有组的权限 setfacl -x u:lee testfile #删除列表中的用户 setfacl -b testfile #关闭acl列表 这里分为以下几步: 第一步:先创建一个文件 第二步:通过 第三步:通过 第四步:通过 第五步:通过 第六步:通过 拥有者 > 特殊指定用户 > 权限多的组 > 权限少的组 > 其他 mask是能够赋予指定用户权限的最大阈值 注意: (1)当设定完毕文件的acl列表后用 (2)恢复之前的权限:setfacl -m m:权限 文件 。(这里的权限是指mask值。也就是说重置mask值。要改变文件的权限还是得通过 这里先用以上命令恢复了此文件的文件拥有组的权限,当出入参数为0时,文件的mask值为< --- >,然后重新通过 setfacl -m u:lee:rwx /mnt/leedir #只对于/mnt/leedir目录本身生效 setfacl -Rm u:lee:rwx /mnt/leedir #对于/mnt/leedir目录及目录下所有已存在文件生效 setfacl -m d:u:lee:rwx /mnt/leedir #对于/mnt/leedir目录中新建的文件生效 ~~~~~~~~~~~~~~~未完待续~~~~~~~~~~~~~~~ 1、mask值的理解:在没有设置mask值时,mask值随着操作者赋予此文件(或目录)的特殊用户的特殊权限的变化而变化,当权限设定完成后,再次去设置mask值,这时候就可以看到,之前设置的那些权限会在这次设置的mask值范围内生效,超过mask值的范围,那些权限也就失效了。socket套接字
3、用户身份匹配
chmod --reference=/tmp /mnt/westosdir
#复制/tmp目录的权限到/mnt/westosdir上
chmod -R --reference=/tmp /mnt/westosdir
#复制/tmp目录的权限到/mnt/westosdir及目录的子文件上,<-R>代表递归操作
chmod < a | u | g | o >< + | - | = >< r | w | x > file #用字符方式设定权限
chmod g+x ./test/test2 #对文件
chmod o=wx ./test/test3 #对文件
chmod a=rwx ./test/test4 #对文件
chmod u=rwx,g=---,o=rx ./test/test5 #对文件
rwx = 111 = 7
rw- = 110 = 6
r-x = 101 = 5
r-- = 100 = 4 = r
-wx = 011 = 3
-w- = 010 = 2 = w
--x = 001 = 1 =x
--- = 000 = 0
74 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
75 umask 002 #普通用户的umask
76 else
77 umask 022 #root用户的umask
78 fi
59 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
60 umask 002 #普通用户的umask
61 else
62 umask 022 #root用户的umask
63 fi
修改完成后,这里需要重新加载这两个文件才能生效。source /etc/bashrc
source /etc/profile
chown username file #更改文件拥有者
chgrp groupname file #更改文件拥有组
chown username:groupname file #同时更改文件的拥有者和拥有组
chown | chgrp -R username | groupname dir
#更改目录本身及目录中内容的拥有者或者拥有组
chmod 1原始权限 dir
chmod o+t dir
chmod 2原始权限 dir
chmod g+s dir
chmod 2原始权限 可执行文件
chmod g+s 可执行文件
watch -n 1 "ps ax -o user,group,comm | grep cat"
chmod 4原属性 可执行文件
chmod u+s 可执行文件
权限,即开启了此文件的“suid”权限,这就可以使这个程序运行时以文件的拥有者身份运行,通过-rw-rw-r--. 1 westos westos 0 Oct 7 08:58 testfile
^
-rw-rw-r--+ 1 westos westos 0 Oct 7 08:58 testfile
^
getfacl testfile #读取acl权限列表
八、attr权限



