文件权限管理

来源:互联网 发布:java中冒泡排序法代码 编辑:程序博客网 时间:2024/05/16 01:57

一、基本权限管理

1.ll命令之后的文件:

-rw-r--r--    -  文件类型                              (-文件 d目录 l软链接)    u 所有者  g 所属组 o 其他人     (所有者可以不属于所属组)    r 读 w 写 x 执行

2.chmod命令:

使用+、-、r、w、x
格式:chmod [选项] 模式 文件名 (-R 递归)

命令 说明 chmod u+x 文件名 给所有者赋予执行权限 chmod g+w,o+w 文件名 给所属组和其他人增加写权限 chmod g-w,o-w 文件名 删除权限 chmod u=rwx,g=rw 文件名 清除原始权限,赋予指定权限 chmod a=rw 给所有人赋予指定权限

权限的数字表示

r ---- 4w ---- 2x ---- 1rwx:7 rx:5 rw:6 r:4644:  rw-r--r--777: 755:  rwxr-xr-xchmod 777 文件

其他命令

chown 用户名  文件名     //改变文件的所有者chgrp 所属组  文件名     //改变所属组chown 所有者:所属组 文件名   //同时修改所有者和所属组

3.sudo权限:

root把本来只能超级用户执行的命令赋予普通用户执行。
sudo的操作对象是《系统命令》

visudo命令实际修改的是/etc/sudoers文件    root   ALL=(ALL)  ALL    用户名 被管理主机的地址=(切换的身份) 授权命令(绝对路径)        user1 ALL=(ALL) /sbin/shutdown -r now        user1 ALL=/usr/sbin/useradd        user1 ALL=/usr/sbin/passwd    ***********可以更改root命令        解决:            user1 ALL=/usr/sbin/passwd [a-zA-Z]*, !/usr/sbin/passwd "", !/usr/sbin/passwd root        注意:不要赋予普通用户vi权限。不然会有权限(以root身份)修改所有配置文件。    %wheel ALL=(ALL)  ALL        %组名   被管理主机的地址=(切换的身份) 授权命令(绝对路径)sudo -l  查看所有被允许的命令sudo 命令    //执行命令,之前会要求输入当前用户的密码,必须是绝对路径

4.权限的作用:

权限对文件的作用:

r:读取文件内容(cat more head tail)w:编辑、新增、修改文件内容(vi echo)    但是不包括删除。    文件夹保存文件,文件保存数据。删除文件需要对文件夹有写权限,理解:文件夹和文件都有自己的数据块,x:可执行对文件来讲,最高权限是执行x

权限对目录的作用:

r:可以查询目录下的文件名(ls)w:具有修改目录结构的权限。如新建文件和目录,删除此目录下文件和目录,重命名、剪切(touch rm mv cp)x:可以进入目录(cd)对目录来讲,最高权限是写w。有效的权限:0  5(rx) 7(rwx)无效的权限:4 1 6...(原因:没有x,就没有进入目录的权限,其他操作没有意义)

二、特殊权限介绍

1.默认权限:

window中默认权限继承至上一级文件,Linux中umask查看默认权限umask     //0022,0文件的特殊权限,022文件默认权限文件默认值计算:    文件默认不能建立为执行文件,必须手工赋予执行权限。    文件默认权限最大666    默认权限需要换算成字母再相减    建立文件之后的默认权限,为666减去umask值。    666  rw-rw-rw-  默认权限最高值    022  ----w--w-  umask  //修改umask值来改变最终默认权限    644  rw-r--r--  结果文件夹默认值计算:    目录权限最大为777    换算成字母后减去umask值。临时修改umask值:    umask 0000永久修改umask值:    vi /etc/profile  环境变量配置文件

2.特殊权限:

安全性考虑,若非必须,不要使用这些权限
s代表可执行的SUID,S代表不可执行的SUID

SetUID:仅能作用于文件

ll /usr/bin/passwd  用户修改自身密码      只有可以执行的二进制程序才能设定SUID权限      命令执行者要对该程序拥有x权限      命令执行者在执行该程序时获得该程序属主的身份(在执行程序的过程中灵魂附体为文件的属主)      SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。  增加方法:      chmod 4775 文件名      chmod u+s  文件名         rwsrwxr-x  取消方法:      chmod 0775 文件名      chmod u-s 文件名      rwxrwxr-x  危险的SetUID:      chmod 4755 /bin/vi  *************给vi设定SUID,执行vi时身份是root。      关键目录应严格控制写权限,比如"/","/usr"      用户密码设置要严格遵守密码三原则      对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件设置了SetUID权限

SetGID:能作用于文件和目录

locate命令:用户对/usr/bin/locate命令有执行权限,/usr/bin/locate所属组为slocate,并设置了SGID。用户执行locate时,组身份会升级为slocate,而slocate对/var/lib/mlocate/mlocate.db拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库。命令结束后用户身份返回为原组。    只有可执行文件的二进制程序才能设置SGID    命令执行者要对该程序拥有x权限    命令执行者在执行该程序时,组身份升级为该程序文件的属组    SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效。给目录设置SGID权限:    用户在此目录下新建文件默认的所属组为目录的组,而不是用户本身的组设定SGID:    chmod 2755 文件名   //0755    chmod g+s 文件名   //g-s删除

一个监控系统中所有拥有SUID和SGID文件的脚本

#!bin/bashfind / -perm -4000 -o -perm -2000 > /tmp/setuid.check#搜索系统中所有拥有SUID和SGID的文件,保存到临时文件中for i in $(cat /tmp/setuid.check)#每次循环取出临时文件中的文件名do        grep $i /root/suid.log > /dev/null        #suid.log为预先保存的所有合法的拥有suid文件的模板,查看文件是否在模板中        #suid.log的创建命令:find / -perm -4000 -o -perm -2000 > /root/suid.log        if("$?" != "0")        #检测上一个命令的返回值,若不为0,证明上一个命令报错        then                 echo "$i isn't in listfile!" >> /root/suid.log.$(date+%F)                #若文件名不在模板文件中,输出错误信息到日志文件        fidonerm -rf /tmp/setuid.check

Sticky BIT:粘着位权限,仅能对目录有效

普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限。(7)    要求目录给其他人的权限为7,除了系统自带的,不建议给其他目录增加SBIT权限。如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了root可以删除所有的文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。应用场景:共享目录,每个用户上传文件,但禁止删除其他用户的文件。    设置:        chmod 1755 目录        chmod o+t 目录    删除:        chmod 0755 目录        chmod o-t 目录/tmp  临时目录拥有777,默认拥有SBIT权限

3.不可改变位权限:(chattr权限)

chattr [+-=] [选项] 文件名或目录名+增加     -删除     =等于某权限SBIT选项: i和aa等价于append , i等价于insert    文件设置i属性:不允许对文件进行删除、改名,也不能添加和修改数据;        锁定,有此属性时,root都不可修改,但root可以去掉此属性        chattr +i 文件名    目录设置i属性:只能修改目录下文件的数据,但不允许建立和删除文件。    文件设置a属性:只能在文件中增加数据,不能删除和修改数据;        禁止vi增加数据(很难判断是否增加还是删除),只能输出重定向。    目录设置a属性:只允许在目录中建立和修改文件,不允许删除文件。lsattr 文件名lsattr -d 目录名

4.ACL权限

Access Control list,解决文件权限控制中,用户身份不足的问题。

查看分区ACL权限是否开启:(ACL权限是挂载权限,属于分区的)

df          //查看分区dumpe2fs -h /dev/sda5   查询指定分区详细文件系统信息的命令。-h 仅显示超级块中信息,而不显示磁盘块组的详细信息。临时开启ACL,重新挂载:     mount -o remount,acl  /    //重新挂载根目录,增加acl权限。永久开启:     vi /etc/fstab    //在分区表中修改:defaults,acl         mount -o remount /

查看ACL权限:

getfacl 文件名    //查看文件的ACL权限,+表示有ACL权限。

设定ACL权限的命令:

setfacl 选项 文件名    -m  增加:        setfacl -m u:user1:rx  文件名      //给用户user设置rx权限        setfacl -m g:group1:rx  文件名     //给用户组group1设置rx权限        setfacl -m m:rx 文件名             //指定最大有效权限            mask :指定最大有效权限,给用户赋予的ACL权限需要和mask的权限相与才能得到用户的真正权限。    -x  删除指定:        setfacl -x u:用户名 文件名    -b  删除所有acl权限:        setfacl -b 文件名    -d  默认acl权限:给父目录设定了默认ACL权限“之后”,在父目录中建立的所有子文件都会继承父目录的ACL权限。        setfacl -m d:u:用户名:权限  文件名    -R  递归设置acl权限:        setfacl -m u:user1:rx -R 文件名   //递归,只能赋予目录。给父目录设定权限时,给“已有的”子文件和目录赋予相同的权限        递归时注意权限溢出:        执行权限对目录的作用和文件的作用是不一样的。目录需要执行权限来进入目录,但文件应尽量少给执行权限。
0 1
原创粉丝点击