当前位置: 首页 > Linux

linux-文件权限和用户权限

时间:2023-04-06 19:38:38 Linux

rwx除了root用户,root用户不受任何限制file:r(read,read):对于文件,有读取文件内容的权限;w(write,write):对于文件,有添加和修改文件内容的权限;x(execute,execute):对于文件,有执行文件的权限;[skyuser1@VM_158_86_centostest]$lltotal0-r-xr-xr-x1skyuser1skyuser10May2317:25a.txt#Nowwritepermission[skyuser1@VM_158_86_centostest]$echo"aaa">a.txt-bash:a.txt:Permissiondenied#Norreadpermission[skyuser1@VM_158_86_centostest]$chmod333a.txt[skyuser1@VM_158_86_centostest]$lla.txt--wx-wx-wx1skyuser1skyuser10五月2317:27a.txt[skyuser1@VM_158_86_centos测试]$cata.txtcat:a.txt:Permissiondenieddirectory:r(Read,read):具有浏览目录的权限。w(Write,写):具有删除、移动、修改目录中文件的权限。x(eXecute,execute):用户有进入目录的权限。exec:#根目录的目录权限[skyuser1@VM_158_86_centos/]$ll-ddr-xr-xr-x.20rootroot4096May2311:39.#没有写入权限,所以普通用户无法创建任何文件[skyuser1@VM_158_86_centos/]$toucha.txttouch:cannottouch'a.txt':Permissiondenied#无法删除文件[skyuser1@VM_158_86_centos/]$ll/a.txt-rw-r--r--1rootroot24Mar1217:34/a.txt[skyuser1@VM_158_86_centos/]$rm-rfa.txtrm:cannotremove'a.txt':Permissiondenied#Cannotmovefiles[skyuser1@VM_158_86_centos/]$mv/a.txt/homemv:无法将'/a.txt'移动到'/home/a.txt':权限被拒绝根用户可以做任何事情[root@VM_158_86_centos/]#touchb.txt[root@VM_158_86_centos/]#ls/b.txt/b.txt具有x执行权限的文件可以通过sh或者bash执行.sh文件但是不能通过./bill.sh执行文件[skyuser1@VM_158_86_centostest]$llbill.sh-rw-rw-r--1skyuser1skyuser123May2317:30bill.sh[skyuser1@VM_158_86_centostest]$shbill.sh123[skyuser1@VM_158_86_centostest]$./bill.sh-bash:./bill.sh:Permissiondenied感觉还是有的这个机制的一个问题是的,只要执行bashxxx.sh文件,根目录下的root.sh文件就可以执行了,那你拿x权限干什么?[wuyuhong@VM_158_86_centostemp_bird]$su-root密码:上次登录:2019年5月23日星期四17:54:36CST/0上次登录失败:2019年5月23日星期四17:59:49pts/0自上次成功登录以来有1次登录尝试失败。欢迎tomyworld.pleasesmile[root@VM_158_86_centos~]#cd/[root@VM_158_86_centos/]#vimtest.sh[root@VM_158_86_centos/]#bashtest.sh我是root创建的可执行文件[root@VM_158_86_centos/]#su-skyuser1Lastlogin:ThuMay2317:52:27CST2019onpts/0welcometomyworld.pleasesmile[skyuser1@VM_158_86_centos/]$bashtest.shroot创建的可执行文件[skyuser1@VM_158_86_centos/]$lltest.sh-rw-r--r--1rootroot54May2318:00test.shumask当新建文件或目录时,文件的默认权限会根据umask设置umaskis指定创建文件或目录时当前用户权限的默认值[root@VM_158_86_centosvbird]#umask0022[root@VM_158_86_centosvbird]#umask-Su=rwx,g=rx,o=rx一般文件的创建不要执行权限,一般文件通常用于数据记录,所以不需要x权限——rw-rw-rw-目录的x权限决定了用户是否可以进入该目录,所以一般需要x权限drwxrwxrwxumask的分数参考为默认值required减去的权限是上面减去的:-rw-r--r--drwxr-xr-x为了安全起见,root默认的umask是022,普通用户默认的umask是002,以及保留同组写权限文件隐藏属性操作:+:增加一个特殊参数-:去除一个特殊参数=:设置一个特殊参数选项:a:该文件只能添加数据,不能删除,修改数据,只有root可以设置i:不能删除,重命名,设置链接,不能添加和编辑数据,只有root可以设置命令:lsattr[-adR]fileorDirectory-a:显示隐藏文件属性-d:目录本身的隐藏属性-R:连同子目录也列出在chattr中:chattr+aiStestFile文件特殊权限rwtrws[root@VM_158_86_centos~]#ll-d/tmpdrwxrwxrwt.7rootroot4096May2703:31/tmp[root@VM_158_86_centos~]#ll/usr/bin/passwd-rwsr-xr-x.1rootroot27832June10,2014/usr/bin/passwdSetUID(SUID)/etc/shadow:保存账户信息[root@VM_158_86_centos~]#ll/etc/shadow------------1rootroot1133May2317:55/etc/shadow/etc/shadow这个文件只有root可以读写,但是普通用户可以通过/usr/bin/passwd命令写入或者修改密码的操作,也就是说,修改后的数据之所以能通过passwd写入文件/etc/shadow,是因为SUID-rwsr-xr-x。1rootroot27832June102014/usr/bin/passwd[wuyuhong@VM_158_86_centos~]$passwdChangingpasswordforuserwuyuhong.Changingpasswordforwuyuhong.(current)UNIXpassword:Newpassword:Retypenewpassword:passwd:allauthenticationtokens更新成功。SUID验证过程wuyuhong对/usr/bin/passwd有x权限,也就是说wuyuhong可以执行passwd。passwd的拥有者是root;wuyuhong执行passwd的进程会<暂时>获得root权限;/etc/shadow可以通过wuyuhong执行的passwd修改;然而[wuyuhong@VM_158_86_centos~]$cat/etc/shadowcat:/etc/shadow:Permissiondenied[wuyuhong@VM_158_86_centos~]$ll/usr/bin/cat-rwxr-xr-x1rootroot54160Oct312018/usr/bin/catcat命令没有SUID属性,所以不能cat/etc/shadowSUID只对二进制可执行文件有效SETGID(SGID)locate指令有SGID属性[root@VM_158_86_centos~]#ll/usr/bin/locate-rwx--s--x1rootslocate40520Apr112018/usr/bin/locatelocate的本质是查询/var/lib/mlocate/mlocate.db数据库,从而获取结果updatedb手动更新数据库,updatenew文件,配置等[root@VM_158_86_centos~]#ll/var/lib/mlocate/mlocate.db-rw-r-----1rootslot3107582May2716:13/var/lib/mlocate/mlocate.db可见只有root可以读写mlocate.db,slocate组可以读取mlocate.db见证奇迹[root@VM_158_86_centos~]#ll/usr/bin/locate-rwx--s--x1rootslocate405202018年4月11日/usr/bin/locate[root@VM_158_86_centos~]#ll/var/lib/mlocate/mlocate.db-rw-r-----1rootslocate31075825月27日16:13/var/lib/mlocate/mlocate.db[root@VM_158_86_centos~]#su-wuyuhong上次登录:2019年5月27日星期一16:13:58CSTonpts/0欢迎来到我的世界。请微笑[wuyuhong@VM_158_86_centos~]$locate/usr/bin/passwd/usr/bin/passwd[root@VM_158_86_centos~]#ll/usr/bin/locate-rwx--s--x1rootlocate40520Apr112018/usr/bin/locate和SUID是非常相似,locate的其他用户的执行权限为x,拥有执行权限的locate组的属主slocate执行locate的进程,会<暂时>获取slocate的权限;so.slocate可以读取mlocate;prefectSGID对二进制程序很有用;program对于这个程序,执行者需要有x权限;执行者在执行过程中会得到程序组的支持。SGID不仅对二进制可执行文件有效,对目录也有效。如果用户有r和x权限,则用户可以进入该目录;该目录下用户的有效组将成为该目录的组;目的:如果用户在该目录下有w权限,则用户新建文件,新建文件所属组与该目录所在组相同模拟测试:[root@VM_158_86_centos~]#groupaddproject[root@VM_158_86_centos~]#useradd-Gprojectpro_user1[root@VM_158_86_centos~]#useradd-Gprojectpro_user2[root@VM_158_86_centos~]#idpro_user1uid=1006(pro_user1)gid=1011(pro_user1)groups=1011(pro_user1),1010(project)[root@VM_158_86_centos~]#idpro_user2uid=1007(pro_user2)gid=1012(pro_user2)groups=1012(pro_user2),1010(project)[root@VM_158_86_centos~]#mkdir/srv/prohome[root@VM_158_86_centos~]#ll-d/srv/prohome/drwxr-xr-x2rootroot4096May2716:51/srv/prohome/[root@VM_158_86_centos~]#chgrpproject/srv/prohome/[root@VM_158_86_centos~]#chmod770/srv/prohome/[root@VM_158_86_centos~]#ll-d/srv/prohome/drwxrwx---2rootproject4096May2716:51/srv/prohome/[root@VM_158_86_centos~]#su-pro_user1欢迎来到我的世界。请微笑[pro_user1@VM_158_86_centos~]$cd/srv/prohome/[pro_user1@VM_158_86_centosprohome]$touchabc.txt[pro_user1@VM_158_86_centosprohome]$exitlogout[root@VM_158_86_centos~]#su-pro_user2欢迎来到我的世界。请微笑[pro_user2@VM_158_86_centos~]$cd/srv/prohome/[pro_user2@VM_158_86_centosprohome]$echo"hello">abc.txt-bash:abc.txt:Permissiondenied[pro_user2@VM_158_86_centosprohome]$llabc.txt-rw-rw-r--1pro_user1pro_user105月27日17:14abc.txtabc.txt文件属于pro_user1的用户,也属于pro_user1,所以pro_user2没有写权限,只有r只读权限。此时需要授予/srv/prohome/的SGID权限,使pro_user1和pro_user2创建的文件成为项目组文件[pro_user1@VM_158_86_centos~]$cd/srv/prohome/[pro_user1@VM_158_86_centosprohome]$touchhello[pro_user1@VM_158_86_centosprohome]$llhello-rw-rw-r--1pro_user1project0May2722:37hellosu:身份验证失败[pro_user1@VM_158_86_centosprohome]$su-rootPassword:上次登录:5月27日星期一22:28:36CST2019来自183.220.26.92onpts/0欢迎来到我的世界。请微笑[root@VM_158_86_centos~]#su-pro_user2Lastlogin:May2717:14:36CST2019onpts/0Lastfailedlogin:MonMay2722:38:49CST2019onpts/0自上次成功登录以来有1次登录尝试失败。欢迎来到我的世界。请微笑[pro_user2@VM_158_86_centos~]$cd/srv/prohome/[pro_user2@VM_158_86_centosprohome]$echo"123">hello[pro_user2@VM_158_86_centosprohome]$cathello123添加SGID后创建的文件是同组的主组项目成员可以访问和修改文件。StickyBit仅适用于目录。当用户对该目录有w、x权限时生效,即有写权限;当用户在该目录下创建文件或目录时,只有他和root才有对该文件的操作权限,也就是说只有他可以操作该目录下载自己创建的文件,不能操作别人创建的文件。其他人(同组,或其他有权限的)有执行权限,不能操作我的文件。我有其他人(同组,或其他有权限)有执行权限,不能操作其他人的文件SetSUIDSGIDSBIT4toSUID2toGID1toSBITchmod4755XXX;chmod7755XXX;chmodu=rwxs,go=xXXX;chmodu+sg+so+tXXXchmod7666test;ls-ltest;-rwSrwSrwT666表示没有执行权限,所以这里设置7,所以是SST,SST表示无效状态ACL(访问控制列表)灵活地授予特殊权限。为什么需要ACL?传统的linux权限只能给一个User(创建者),一个组和其他不在这个组的人设置权限如果我需要为这个文件设置3个不同的用户,这时候两个不同的权限怎么办不同的群体?传统的权限控制是不可能的。只能通过ACL更细化的权限控制才能解决问题。传统的权限控制控制的范围很大,而ACL则细分成更小的区域。这十分完美。ACL主要针对哪些方面?控制权限?主要可以关注几项:用户(user):可以为用户配置权限;group(组):为组作为对象配置权限;默认属性(掩码):也可以针对本目录下的用户接下来,在新建文件/目录时,规范新建数据的默认权限;getfaclsetfaclshell,/sbin/nologin系统账号的shell是使用/sbin/nologin,重点是系统账号不需要登录,所以给他这个不能登录虽然这个账号不能登录,但是可以使用其他系统资源,例如:WWW服务由apache帐户管理,mongodb数据库服务由mongodb帐户管理。susu和su之间的切换-为了安全起见,尽量以普通用户的身份进行linux的日常操作,等到需要设置系统环境后,再成为root进行系统管理#使用su切换身份时,变量设置methodread是非登录shell,这种方式很多这个变量不会改变[wuyuhong@VM_158_86_centos~]$surootPassword:欢迎来到我的世界。请微笑[root@VM_158_86_centoswuyuhong]#env|grep"wuyuhong"USER=wuyuhongPATH=/root/.nvm/versions/node/v10.7.0/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/wuyuhong/.local/bin:/home/wuyuhong/binMAIL=/var/spool/mail/wuyuhongPWD=/home/wuyuhongLOGNAME=wuyuhong#使用su从普通用户切换到root,一些环境变量currentshell不会改变#但是,使用su-就是使用login-shell来切换用户,此时环境变量会被彻底改变[wuyuhong@VM_158_86_centos~]$su-root密码:Lastlogin:SunJun1619:10:04CST2019onpts/0欢迎来到我的世界。请微笑[root@VM_158_86_centos~]#env|grep'root'NVM_DIR=/root/.nvmUSER=rootMAIL=/var/spool/mail/rootPATH=/root/.nvm/versions/node/v10.7.0/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/binPWD=/rootHOME=/rootLOGNAME=rootNVM_BIN=/root/.nvm/versions/node/v10.7.0/bin虽然方法很方便,需要知道root密码,所以不安全。sudo开头,系统默认只有root可以执行sudo。Sudo可以切换身份来执行某些任务。Ex:当我们需要使用apache账号执行WWW某些任务服务时,但是apache是??/sbin/nologin,不能用su-来切换。这时候必须使用sudo来执行sudo的执行过程:1、当用户执行sudo时,系统会在/etc/sudoers文件中查找use该用户是否有执行sudo的权限2、如果有是权限,输入密码确认3.密码成功sudo后续命令visudo和/etc/sudoers编辑/etc/sudoers管理sudo用户和使用范围PAM模块PAM是一组应用程序接口。它提供了一系列验证机制。只要用户将验证阶段的要求告知PAM,PAM就可以将验证结果上报给用户。PAM的重点在于/etc/pam.d/配置文件SELinux:SecurityEnhancedLinux:SecurityEnhancedLinux事实上,SELinux是设置进程、文件等详细权限基础的核心模块。自主访问控制——DiscretionaryAccessControl,DACDAC:是根据进程的所有者(root或普通用户)和文件资源的rwx来判断是否有访问能力。DAC的缺点:1.root拥有最高权限,如果进程属于root权限,那么该进程可以操作系统上的任何资源2.用户可以更改资源的rwx权限,例如:将文件更改为777Permissions,那么任何人都可以访问委托访问控制:MandatoryAccessControl,MACMAC,可以根据特定的文件资源来控制权限。