打算把去年学习的Linux整理一下,先从文件权限说起ugo基本权限acl权限suid,sgid,sticky高级权限selinuxugo基本权限一个文件对应三个权限objects,分别是文件的所有者用户,所属组,其他人每个权限对象对应三种权限,分别是读r,写w,执行x。例如$touchfile1$ls-lfile1-rw-r--r--1rootroot0Jul1415:15file1$mkdirdir1drwxr-xr-x1rootroot4096Jul1415:15dir1默认文件权限是0644,默认的目录权限是0755,之所以默认是这些权限是因为umask的值$umask0022umask的默认值是0022,默认的目录权限是0777-0022=0755,默认的文件权限是在此基础上减去执行权限变成0644。至于0644和0755前面的0是什么,我们会在高级权限中介绍umask命令,只能暂时生效。启动并登录后,它将恢复为默认值。如果想永久生效,可以更改/etc/profile或者~/.bash_profile(没有就加,有就修改),r,w,x这三个权限对于目录和files,如下表权限名filedirectoryr查看文件内容,如catfile1可以列出目录内容,如lsdir1w可以改变文件内容,如echo1>>file1可以创建或删除目录下的文件(对于没有x权限的目录,w权限无效)x可以作为命令执行可以进入目录,如cddir1;可以访问目录下的文件(当然也要看文件的权限)。权限变更格式1chmod{权限对象}{赋值符号}{权限}{文件名}其中{权限对象}可以是u、g、o、a其中之一,分别代表所有者用户,所属组belongs,othersother,andeveryoneallFormat2chmod{permissionnumber}{filename}$chmodu+xfile1$chmodg+w,o-r,u=wrxfile1$chmod755file1小想法:for/root目录下的一个文件,其他人有读取权限创建新用户,你能查看该文件吗?修改根目录权限为777,新建用户,能删除/etc目录吗?acl权限以上的文件file1,root用户有rw权限,root组用户等有r权限。这时候我想让tom用户有x权限,怎么办?貌似这种操作单靠ugo的基本权限是无法实现的。这就需要我们现在要说的acl权限了。getfaclfile1#file:file1#owner:root#group:rootuser::rw-group::r--other::r--此时没有acl权限添加acl权限$setfacl-mu:tom:xfile1$ls-lfile1-rw-r-xr--+1rootroot0Oct1223:10file1$getfaclfile1#file:file1#owner:root#group:rootuser::rw-user:tom:--xgroup::r--mask::r-xother::r--添加acl权限后,发现ls-l的结果变了:所属组的权限变成了rx,并且原来是r,权限-rw-r-xr--后面多了一个+。先说+,表示文件有acl扩展权限。这时候getfacl查看acl权限,发现比一开始没有acl权限的时候多了两行user:tom:--xmask::r-x。ls-l显示的group的r-x不是group的权限,而是mask的权限,mask的权限是什么?mask权限会随着新设置的acl权限而变化。是文件所有acl权限和组权限的并集,即mask权限为user:tom:--x和group::r--权限r-x的并集;如果再加一个acl权限,让tony组的用户有写权限setfacl-mg:jack:w,那么mask的权限就是rwxmask。该权限的作用是暂时限制acl权限,例如注意file1的详细权限为user::rw-user:tom:--xgroup::r--mask::r-xother::r--假设这个有时不仅tom有ACL权限,Jack、Andy等人也有很多ACL权限。这个时候,他们的权限应该暂时降低。怎么做?是否可以使用setfacl-bfile1命令删除所有acl权限?如果用户较多,删除后一一添加。多麻烦啊!这个时候,你只需要暂时禁用遮罩权限即可。$setfacl-mm::-file1$getfaclfile1#file:file1#owner:root#group:rootuser::rw-user:tom:--x#effective:---group::r--#effective:---mask::---other::r--此时tom的有效权限是'---',因为mask权限涵盖了所有的acl权限,但事实真的如此吗?,其实这里有个小问题,用户tom对file1有读权限,因为mask禁用所有权限后,用户tom又属于other了,other现在有suid,sgid,sticky高级权限读file1,下面说说之前的权限编号,0755和0664中的0是什么意思;这一位代表高级权限的个数,0表示没有高级权限,1表示sticky(粘性位),2表示sgid,4表示suidsuidsuid只能作用于可执行二进制文件,为什么呢?suid的作用是让执行二进制程序的人拥有二进制文件所有者的权限,所以suid只能用于可执行文件。看例子:####当前是root账户$llfile2-rw-r-----1rootroot0Oct1201:37/root/file2####切换到tom账户$catfile2cat:file2:Permissiondenied####查看/etc/shadow文件,该文件用于存放用户密码$ll/etc/shadow------------1rootroot685Oct1201:42/etc/shadow####当前用户tom,修改密码操作$passwd####...####最后发现/etc/shadow文件被tom用户通过passwd密码修改了####为什么tom可以通过passwd命令修改?对于汤姆,没有w权限/etc/shadowfile####tom不能用cat命令查看没有tom$ll/usr/bin/cat-rwxr-xr-x权限的file2文件。1rootroot540802016年11月6日/usr/bin/cat$ll/usr/bin/passwd-rwsr-xr-x。1rootroot27832Jun102014/usr/bin/passwd从例子中可以看出,passwd命令和cat命令的区别在于passwd的权限是'-rwsr-xr-x',而权限cat命令的是'-rwxr-xr-x',这里passwd权限中原来拥有者的x权限变成了s,所以tom在通过passwd命令修改没有w权限的,在/etc/shadow时,会自动有/etc/shadow文件root的所有者的权限(虽然该文件没有root的w权限,但是root用户拥有所有的权限,即使该文件没有root的权限也没关系)guid关于sgid,它有两个作用一种类似于suid,当sgid被添加到一个可执行的二进制文件中时,执行该文件的用户拥有其所属组的所有权限;另一种是,如果将sgid添加到一个目录,则在该目录下创建的文件或目录与该目录属于同一组,创建的目录会自动添加sgid$lldir2-ddrwx--s---4roottom32Oct1522:16dir2#dir2permissionis2710,即0710再增加一个sgid#此时umask为022,默认值为$touchdir2/file1$lldir2-rw-r--r--1roottom0Oct1522:20file1$mkdirdir2/dir21drwxr-sr-x2roottom6Oct1522:14dir21#dir21目录继承dir2的sgid和组tom$umask777$mkdirdir2/dir22d-----S---2roottom17Oct1522:16dir22#dir22目录继承了dir2的sgid,但是因为dir22没有所属组的x权限,所以s代表sgid变为大写,大写的S表示无效,#另外suid加上owner没有x权限文件也是大写的Ssticky。我们知道/tmp目录是可读可写的,任何人都可以访问。根据之前的ugo权限,当一个目录为用户可写时,用户可以随意删除mobile目录下的文件$ll/tmp/xxx.log-rw-r--r--1rootroot122Sep916:02/tmp/xxx.log$su-tom$rm-f/tmp/xxx.logrm:cannotremove'/tmp/xxx.log':Operationnotpermitted为什么tom不能删除xxx.log文件在tom可写的/tmp目录中?$ll-d/tmpdrwxrwxrwt.33rootroot8192Oct1522:46/tmp/可以看到/tmp的权限有t多,这就是sticky的目的sticky是让用户只能删除和移动自己的文件。对于不属于您的文件,无权删除或移动。对于粘性,目录必须是other有x权限,否则t变成大写,无效,为什么?想一想就很好理解,如果目录没有x权限,那你就不能进入目录,更不能删除mobile目录下的文件,这时候需要sticky权限有什么用呢?注意:使用chmod给文件或目录添加suid或sgid时,只能是'chomdu+s/g+sfile',不能是'chmodo+sfile',o+s也可以加,不可以被添加;给目录添加sticky时,只能是'chmodo+tdir';给目录加suid,给文件加sticky是可以加的,但是有什么用呢?SELinux是对标准linux权限的增强所有操作系统访问控制都基于关联对象和主题的某种类型的访问控制属性你怎么理解这句话?操作系统:当然是linux等操作系统。访问控制:上面说的权限可以说是访问控制对象:主要是指文件、目录、端口等Subject:主要是指进程访问控制属性:对应标准的linux权限读、写和执行权限,而对应的selinux称为安全上下文(SecurityContext)。比如当主进程httpd要访问一个对象网页文件a.html,在没有selinux的情况下,需要看a。html的访问控制属性(即读取和执行权限)是否对httpd主进程开放取决于selinux的安全上下文#查看文件的安全上下文$ll-Z/var/www/html-rw-r--r--。rootrootunconfined_u:object_r:admin_home_t:s0a.html-rw-r--r--。rootrootunconfined_u:object_r:httpd_sys_content_t:s0index.html#查看进程的安全上下文$ps-ZChttpdLABELPIDTTYTIMECMDsystem_u:system_r:httpd_t:s08083?00:00:01httpdsystem_u:system_r:httpd_t:s08094?00:00:00httpd#查看端口安全上下文$semanageport-l|egrep'\<80\>'http_port_ttcp80,81,443,488,8008,8009,8443,9000主要是文件权限,进程和端口安全上下文就不解释了。在开启selinux的前提下,httpd服务器可以访问index.html,而无法访问a.html(会报403错误)。为什么?原因在于a.html的安全上下文在其安全上下文中:unconfined_u:object_r:admin_home_t:s0index.html的安全上下文:unconfined_u:object_r:httpd_sys_content_t:s0用分号隔开的几个安全上下文代表:USER:ROLE:TYPE[LEVEL[:CATEGORY]]在默认的安全策略targeted中,USER和ROLE几乎没有作用,主要是TYPE。这里httpd访问不到a.html的原因也是因为两个文件的TYPE不一样。selinux中有两种安全策略,targeted(常见的网络服务httpd和vsftpde由selinux控制)和strict(每个进程由selinux控制,这里主要说targeteda,也是默认的修改文件的安全策略安全上下文$chcon-thttpd_sys_content_t/var/www/html/a.html$ll-Z/var/www/html/a.html-rw-r--r--.rootrootunconfined_u:object_r:httpd_sys_content_t:s0/var/www/html/a.htmlselinuxsecuritycontextrules#查看规则$semanagefcontext-l|grep"/var/www/html".../var/www/html(/.*)?allfilessystem_u:object_r:httpd_sys_content_t:s0...#添加规则(/var/www/html目录下所有php文件的安全上下文标签为admin_home_t)$semanagefcontext-a-tadmin_home_t"/var/www/html/(.*\.php)"$touch/var/www/html/1.php&&ll-Z/var/www/html/1.php-rw-r--r--.rootrootunconfined_u:object_r:httpd_sys_content_t:s0/var/www/html/1.php#为什么新建的文件没有按照规则生成一个带有admin_home_t标签的文件?因为文件生成基于父目录#如何让文件按规则改变安全上下文标签?您需要使用以下命令:restorecon#resettherules$restorecon-RFv/var/www/html#setthedirectoryaccordingtoAllrulesinthisdirectoryresetthesecuritycontextlabelrestoreconreset/var/www/html/1.phpcontextunconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:admin_home_t:s0selinux关于文件权限,暂时就这些,selinux还包括文件之外的其他内容,比如端口,进程等,以及其他细节。分享。这篇文章是基于我的评论和写作。由于本人能力有限,文章中可能存在错误或语句不通之处。请大家有问题及时反馈,谢谢
