Linux权限设置详解

看完鸟哥的Linux私房菜,对Linux有了更深的了解,特别是权限控制这一方面,特此总结,记录一下。

本文适合对Linux权限一知半解的人,不适合完全不同Linux权限的人,只是提点,不会特别详细,详细内容请看鸟哥的Linux私房菜。


一,文件与目录的普通权限

首先来说说Linux下面的最普通也是最常用的权限,r:4(读),w:2(写),x:1(执行)。

对于文件和目录来说,这三个权限分别代表不同的操作:

读:r:4:对于文件是读文件权限;对于文件夹r权限表示是否可以查看该目录先的文件,也就是ls。

写:w:2:对于文件是写文件权限,但是不可删除文件,但是如果只给写权限没有读文件权限是不能写入数据的;对于文件夹来说w权限表示时是否可以在该文件夹下面新建文件和目录,删除文件和目录二不管该文件或者目录的权限是什么,重命名问价和目录,移动文件和目录,可以不配合r权限,不能ls但是可以创建文件。

执行:x:1:对于文件来说是执行权限;对于文件夹x权限表示是否可以cd进如该目录。

可以通过命令:

chgrp:改变文件所属用户组

chown:改变文件所有者

chmod:改变文件的权限

命令具体使用请查阅相关资料


二,文件与目录的默认权限和隐藏权限

文件默认权限:umask

umask是指用户在新建文件或者目录时的权限默认值,通常为0022(root用户),

创建文件时,默认权限是666,然后‘减去’umask值

创建目录时,默认全显示777,然后‘减去’umask值

umask有4位值,第一位表示特殊权限,后面会讲到,剩下的三位数分别表示用户,用户组和其他用户,所谓的‘减去’不是减去数字,而是减去权限,如2表示写权限,则减去写权限,上面的0022表示用户组减去写权限,其他用户减去写权限。可通过umask 002/0022自己设置,默认第一位也就是特殊权限可以不写默认为0.


文件隐藏属性chattr,lsattr

chattr命令的用法:chattr [ -RVf ] [ -v version ] [ mode ] files…
最关键的是在[mode]部分,[mode]部分是由+-=和[ASacDdIijsTtu]这些字符组合的,这部分是用来控制文件的
属性。

+ :在原有参数设定基础上,追加参数。
- :在原有参数设定基础上,移除参数。
= :更新为指定参数设定。
A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生。
S:硬盘I/O同步选项,功能类似sync。
a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。
c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。
d:即no dump,设定文件不能成为dump程序的备份目标。
i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。
j:即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效。
s:保密性地删除文件或目录,即硬盘空间被全部收回。
u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion。
各参数选项中常用到的是a和i。a选项强制只可添加不可删除,多用于日志系统的安全设定。而i是更为严格的安全设定,只有superuser (root) 或具有CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加该选项。

应用举例:
1、用chattr命令防止系统中某个关键文件被修改
chattr +i /etc/resolv.conf

然后用mv /etc/resolv.conf等命令操作于该文件,都是得到Operation not permitted 的结果。vim编辑该文件时会提示W10: Warning: Changing a readonly file错误。要想修改此文件就要把i属性去掉: chattr -i /etc/resolv.conf

# lsattr /etc/resolv.conf
会显示如下属性
----i-------- /etc/resolv.conf

2、让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件
chattr +a /var/log/messages

更改linux的root密码 报:passwd: Authentication token manipulation error


三,文件特殊权限:SUID,SGID,SBIT

前面提到了普通的r,w,x权限,那当然还有更高级的特殊权限!

SUID:4

当s这个标志出现在文件所有者的x权限上时,如'-rwsr-xr-x'时,测试就被称为SetUID。基本上SUID有下面限制和功能:

1.SUID权限仅对二进制且有可执行权限的程序有效;

2.本权限仅在执行过程中有效;

3.执行该程序时执行者将具有该程序所有者(owner)的权限。如passwd命令


SGID:2

当s标志出现在用户组的x时称为SetGID,如'-rwxr-sr-x'。与SUID不同的是,SGID可以针对文件或者目录来设置。如果对于文件来说,SGID有如下的功能:

1.SGID权限对二进制且有可执行权限的程序有效。

2.执行该程序时执行者将获得该程序用户组的权限。

当一个目录设置了SGID权限后,它将具有如下功能:

1.用户若对此目录巨涌r和x权限时,该用户能够进入此目录。

2.用户在此目录下的有效用户组将会变成该目录的用户组。

3.若用户在此目录下具有w权限时,则用户所创建的新文件的用户组与此目录的用户组相同。


SBIT(Sticky Bit):1

SBIT权限目前只针对目录有效,对于文件已经没有效果了。SBIT对于目录的作用是:

1.当用户对于此目录具有w,x权限即具有写入权限时,当用户在该目录下创建文件或者目录时,仅有自己和root才有权限删除该文件。

换句话说:当甲用户对A目录具有w权限时,表示甲用户对该目录任何人新建的目录和文件均可进行删除,重命名,移动等操作。不过,如果将A目录加上了SBIT的权限时,则甲只能针对自己创建的文件和目录进行删除,重命名,移动等操作,而无法删除其他人的文件。例如/tmp本身的权限就是'drwxrwxrwt',这样每个用户都只能修改删除自己创建的文件和文件夹。


由于三个特殊权限分别作用于不同的地方,因此可通过一个数字来设置权限:

#chmod 4775  test    #加入了SUID权限

#chmod 1774 test     #加入了SBIT权限

#chmod 6777 test     #加入了SUID和SGID权限

注意:若添加后显示权限为大写的字母,如:

#chmod 7666 test      ===>   -rwSrwSrsT

因为test文件连执行的x权限都没有,所有该文件无法执行,S,T就表示空。


四,主机的具体权限设置:ACL控制

ACL可以针对单一用户,单一文件或目录进行r,w,x的权限设置,对于需要特殊权限的使用状况非常有帮助。他主要可以针对几个项目:

用户(user):可以针对用户来设置权限;

用户组(group):可以针对用户组来设置权限;

默认属性(mask):可以在该目录下新建文件或者目录时设置新数据的默认权限。


ACL设置:getfacl,setfacl

getfacl:取得某个文件或目录的ACL设置项目。

setfacl:设置某个文件或目录的ACL规定。

setfacl 参数:

  -m:设置后续acl参数 
  -x:删除后续acl参数  
  -b:删除全部的acl参数
  -k:删除默认的acl参数
  -R:递归设置acl,包括子目录
  -d:设置默认acl

setfacl命令可以识别以下的规则格式:

 [d(default)]:u[用户列表]: [rwx] 指定用户的权限,文件所有者的权限(如果uid没有指定)。 

 [d(default)]:g[用户组列表]:[rwx] 指定群组的权限,文件所有群组的权限(如果gid未指定) 

 [d(default)]:m: [rwx] 有效权限掩码 

 [d(default)]:o[其他用户列表] :[rwx] 其他的权限

例:

1.针对特定的用户,使用户code对test目录只有读取的权限:

# setfacl -m u:code:r /test  #若无用户列表,代表设置该文件所有者

2.针对特定的用户组,是用户组mygroup对目录test只有rx权限

#setfacl -m g:mygroup:rx /test

3.针对有限权限mask的设置

#setfacl -m m:r  test

4.ACL设置的权限可以被子目录所继承

#setfacl -m d:u:testuser:rx  /test


五,sudo命令

sudo命令用于普通用户执行只有管理员才能执行的命令,只有在/etc/sudoers文件中的用户才可以使用sudo命令。

/etc/sudoers中为主要内容为:

root    ALL=(ALL)    ALL

若想普通用户执行sudo命令,模仿root增加一行即可,这四个参数分别有不同的意义:

用户账号     登陆者的来源主机名=(可切换的身份)  可执行的命令(需要写绝对路径)

若用户为%test则表示test用户组。

例如:myuser  ALL=(root)   !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

表示myuser只能切换到root用户,不能切换到其他用户,且不能执行passwd或者passwd root命令,但是可以更改其他用户的密码。


六,开机以指定用户执行命令

有些时候我们需要以指定用户开机自启某些命令,但是在/etc/rc.local中编写自启执行命令却是以root权限执行的,这时候需要使用命令:su - user -c command来指定用户启动某命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值