我们有的时候有这样的需要,允许一人用户查看修改其它用户的文件,但不允许删除。用一个普通用户执行一个命令,但这个命令的运行身份是root。因为linux系统权限设置过于简单,像做这些事情就需要用到facl了。facl是file access control list的缩写。

当一个用户访问一个文件时,文件权限匹配模型是这样的工作顺序:检查用户是否为文件的属主,如果是则按属主的权限来看读写执行权限。如果不是则检查用户是否为此文件的所属组的成员,如果是则按属组的权限。如果不是则都其它用户权限来给定。

SUID

一般情况下当我们以一个普通用户运行一个程序时,这个程序的发起者是用户本身,而这个程序是用户的代理。但如果给一个程序指定了SUID时,其它用户再运行这个程序则是以这个程序的所有者运行,passwd命令就是这样运行的,前提是程序的属主需要有执行权限。

chmod u+s [文件名] 用来给可执行的程序加上SUID位,然后用ls -l 查看这个文件,执行权限位显示为小s或大S。小s表示属主有执行的权限,大S表示属主没有执行权限。

clipboard

用途,/etc/shadow这个文件普通用户使用cat命令无法查看,以root身份把cat这个程序加上SUID然后普通用户再执行cat /etc/shadow时就可以查看到文件的内容。

用户普通用户执行cat /etc/shadow

clipboard[1]

把cat程序拷贝到/wukui/test下并加上SUID后

#cp `which cat` /wukui/test/

#chmod u+s /wukui/test/cat

clipboard[2]

#su - wukui

#/tmp/test/cat /wukui/shadow

clipboard[3]

SGID

如果我们想给系统的一个用户对某个文件有写的权限,又不想给其它用户写权限,还不想把这个用户加入到我们这个组里,这时候就用到SUID了。SUID一般用在给目录设置。

比如/wukui/test这个目录里普通用户可以修改此目录里的文件内容,但不动这个目录的other权限。做法如下

#mkdir /wukui/test  创建目录

#groupadd fileshare 创建组

#chown :fileshare /wukui/test  修改此目录的所属组

#chmod g+s /wukui/test  给此目录添加SGID

#usermod -G fileshare user1  把user1加入到fileshare组

经过以上的操作,此目录里的文件other没有写的权限,user1用户也可以修改了。

ls -ld /wukui/test

clipboard[4]

sticky :沾滞位

    这个一般给目录用,如果想让user1用户修改user2的文件,又不想让user2删除user1的文件,每个用户只能删除自己的文件。这里就需要乃至粘滞位了。

使用格式 :chmod o+s <目录名>

chmod o+s /wukui/test 这样/wukui/test这个目录里所有普通用户只能删除自己的文件,而不能删除它人的文件。

clipboard[5]

facl

通过facl普通用户可以透过文件的扩展属性,单独向其它用户或组设定额外的访问机制,而不需要改other权限来实现。启用facl之后的权限应用优先级,属主-用户级别的facl-属组-组级别的facl-其它用户

getfacl 显示 facl

            getfacl filename

clipboard[6]

setfacl 修改 facl

使用格式:setfacl {-m|-x} [用户或组]:MODE FILE

  -m 添加权限

setfacl -m u:wukui:rwx wukui.txt
getfacl wukui.txt
clipboard[7]

  -x  删除权限

  setfacl -x u:wukui wukui.txt

  getfacl wukui.txt

clipboard[8]

  -x u:USERNAME

  -R 递归修改。仅对已有的文件生效。

setfacl -m u:wukui:rwx a.txt 添加用户可以访问格式

setfacl -m g:wukui:rw a.txt 添加组可以访问格式

chattr

lsattr

+ :在原有参数设定基础上,追加参数。
- :在原有参数设定基础上,移除参数。
= :更新为指定参数设定。
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处理能力(标识)的进程能够施加该选项。

chattr +i /etc/passwd