`
quxiaozuzhou
  • 浏览: 15609 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
阅读更多
(本文于2010.10.01发表在《草根》杂志第四期,LAMP交流超级群(500人):106382633)
Linux的权限管理与Windows差异较大,很多Linux使用者难以系统的理解,而权限的重要性不言而喻,本文通过案例式循序渐进的讲解,来为读者朋友们庖丁解牛。在《草根》第二期“从ls命令开始”和第三期“深入理解SetUID”的文章中,笔者已经分别讲解了rwx权限和特殊权限SetUID ,本文查缺补漏把剩下的权限一一剖析,期望读者能够看完这三篇文章后对Linux权限有一个整体的把握。

一、 权限之粘着位

Linux中有一个存放临时文件的目录/tmp(类似于Windows中的temp目录),每个用户产生的临时文件都存放在此目录下,也就是说每个用户对/tmp目录都应该有写权限(否则无法拷贝生成文件),这样造成一个问题,比如,高洛峰在/tmp目录下创建了一个文件,张沫看着不爽就可以删掉,这如何控制?
其实,这种情况永远都不会发生,因为/tmp目录有一个特殊的权限标记:
ls -ld /tmp
drwxrwxrwt 5 root root 4096 May 24 13:55 /tmp
瞧见那个rwx权限最后的“t”了没,那个神奇的“t”就是粘着位t(有的资料中文也称为粘滞位),是Linux特殊权限中的第三个(另外两个是SetUID和SetGID),定义为:权限为777的目录设置粘着位t以后,具有写权限每个用户都可以在目录下创建文件,不同的是每个用户只能删除自己是所有者的文件,也就是说只能删除自己创建的文件。
读者可以做一下试验,重复一下《草根》第二期“从ls命令开始”中的案例一操作(给目录/test授予777权限用一个普通用户登录删除另一个普通用户创建的文件),不过这次创建的目录/test多授予它一个粘着位权限:
chmod o+t /test # 或 chmod 1777 /test
此时普通用户尝试删除其他用户的文件时,会给出提示“Operation not permitted”(中文翻译:你丫没事吧,瞎得瑟啥,哥的文件你删不了)。

二、 文件系统权限

每个操作系统都要有一种组织管理数据的方式,我们可以理解为就是文件系统,比如Windows的NTFS、FAT ,Linux的EXT ,而在Linux加载分区时可以针对文件系统进行权限设定。
配置文件/etc/fstab保存了Linux启动时自动加载的分区信息,/etc/fstab文件中第四项定义了加载时的设置,默认为defaults ,包括rw、suid、dev、exec、auto、nouser、async ,如果想改变整个分区的限定,可以利用这些选项。本文举两例说明,证明基于文件系统的权限那是相当霸道。

案例一:只读分区

默认加载分区是可读写rw的,但是如果特殊应用希望分区加载后是只读的,可以做一下设置:
vi /etc/fstab # 编辑/etc/fstab文件在defaults后加入ro选项(逗号分隔)
LABEL=/soft /soft ext3 defaults,ro 1 2
mount -o remount /soft # 重新加载/soft分区,使设置生效
如果你不嫌麻烦也可以重启系统,设置同样会生效。
此时整个/soft分区都是只读的,用root登录后执行:
touch /soft/testfile
touch: cannot touch `testfile': Read-only file system
会提示/soft分区是只读的,即便牛X到是root也不可以创建文件,这是凌驾于rwx权限之上的文件系统权限,相当的牛A与牛C之间。像本例是笔者公司的软件共享目录,一般半个月才更新一次软件,平时不想任何人增加或删除(包括不希望root用户误删除),所以设置为ro ,更新软件时,可以临时更改会rw来设置:
mount -o remount,rw /soft
在命令行上也可以设置分区权限,但是只是当前会话有效,而写入/etc/fstab文件后则会一直有效。

案例二:安全分区

数据存储的分区,如用做备份的分区,我们可以增加下安全设置选项:
vi /etc/fstab # 编辑/etc/fstab文件在defaults后加入noexec选项
LABEL=/backup /backup ext3 defaults,noexec 1 2
mount -o remount /backup # 重新加载/backup分区,使设置生效
此时做个试验,我们使用普通用户拷贝一个命令文件pwd在/backup目录下
cp /bin/pwd /backup
/backup/pwd
-bash: pwd: Permission denied
ls -l pwd
-rwxr-xr-x 1 liming liming 93560 Sep 25 10:13 pwd
命令拷贝到/backup下虽然具有可执行权限,但是也无法执行,在/backup分区下,任何可执行文件都将不能执行,这么做的意义在哪里?如果攻击程序、木马、病毒不能够执行,那么就相当于没有意义。
其他选项不做更多演示,这里只抛砖引玉,其他选项设置读者可man mount查看,查看-o选项中的详细介绍,更多设置读者可自行尝试,所谓授之以鱼不如授之以渔读万卷书不如行万里路万恶淫为首窗前明月光啊。

三、 权限之chattr
chatrr只有超人root用户可以使用,用来修改文件的权限属性,建立凌驾于rwx基础权限之上的授权。
在此介绍两个常用选项:
a 只允许在文件后追加数据,如果目录具有此属性,系统将只允许在目录下建立和修
改文件,而不允许删除任何文件。
i 不允许对文件进行任何修改,如果目录具有此属性,那么只能修改目录下的文件,
不允许建立和删除文件。

案例一:无法删除和更改的文件
如果要建立一个公共访问的目录,大家都可以删除和创建、拷贝文件,但是有一个基本的使用此目录的规则,要建立一个说明文件README ,这个文件不允许大家删除和修改,则可以如下设置:
chattr +i README
这时,README文件所在目录所有用户都有读写权限,但是任何用户都无法删除README文件(包括root),尝试删除会提示:
rm README
rm: remove write-protected regular empty file `README'? y
rm: cannot remove `README': Operation not permitted
同样也不可以改变文件的内容,可以查看到README文件被增加了一个不可更改的属性:
lsattr README
----i-------- README
此时,README变成了一个非常牛XX的文件,即便你是SuperUser也无法删除和修改它,想对它干嘛都不成。
若要更改或删除文件也必须先去掉i属性才可以:
chattr -i README

案例二:备份目录应用
假设有这样一种应用,我们每天自动化实现把上海服务器的日志通过scp和rsync远程备份到北京的备份服务器上,备份服务器的存储目录可设置为只可创建文件而不可删除。
chattr +a /backup/log
设置后,可在本机测试:
cp /var/log/messages /backup/log # 可以拷贝文件
rm /backup/log/messages # 删除文件则被禁止
rm: remove regular file `messages'? y
rm: cannot remove `messages': Operation not permitted
chattr命令不宜对目录/、/dev、/tmp、/var等设置,严重者甚至容易导致系统无法启动,比如根目录如果设置了i属性,谨慎设置,看过此文试验后造成系统问题者,笔者概不负责……

四 权限之ACL
Linux中默认的权限管理比较菜,难以实现复杂的权限控制,如针对一个文件设置几个用户或用户组具有不同权限,这就需要依靠ACL(Access Control List)访问控制列表实现,可以针对任意指定的用户/用户组分配权限。
开启分区的ACL功能 ,需要在/etc/fstab文件中加入acl选项,如:
LABEL=/backup        /backup        ext3        defaults,acl        1 2
然后重新加载分区即可生效:
mount -o remount /backup
如果想临时生效可不修改/etc/fstab文件,直接执行命令“mount -o remount,acl /backup”即可。

案例:设定复杂权限控制目录
设定目录/backup/log用户zhangsan有读写执行权限,用户lisi有读权限,用户wangwu有读写权限,而用户组bakgroup有读和执行权限,则可做如下设置:
setfacl -m u:zhangsan:rwx,u:lisi:r,u:wangwu:rw,g:bakgroup:rx /backup/log
setfacl -m可以设置文件/目录的访问权限,至于权限设定的写法包括三个组成部分,第一部分列出设定对象是用户u或用户组g ;第二部分指定用户名或用户组名;第三部分指定访问权限rwx ,设定多组权限中间用逗号分隔。如“u:lisi:r”表示设定用户lisi为只读权限。
查看目录属性:
ls -ld /backup/log
drwxrwxr-x+ 2 root root 4096 May 25 07:16 /backup/log
会发现文件权限位后增加了一个加号,这说明/backup/log设置了ACL ,同时可以查看其详细的权限设置:
getfacl /backup/log
# file: backup/log
# owner: root
# group: root
user::rwx
user:zhangsan:rwx
user:lisi:r--
user:wangwu:rw-
group::r-x
group:bakgroup:r-x
mask::rwx
other::r-x
这样即可实现Linux中文件/目录的复杂权限控制,要注意的是ACL优先于基本权限设置,也就是说如果默认所属组为rx权限,但是ACL若指定了所属组中某个成员为rwx权限,则此成员拥有rwx权限。

五 权限之管理员授权
管理员做为特权用户,很容易误操作造成不必要的损失,再者都是root管理也怪累的,管理员也是人,也需要留点时间去约约会看看电影装装傻发发呆啥的不是……所以健康的管理方法是Linux服务架构好后,可授权普通用户协助完成日常管理,现在最流行的工具是Sudo ,几乎所有Linux都已缺省安装。
Sudo使用简单,管理员root使用visudo命令即可编辑其配置文件/etc/sudoers进行授权,具体格式为:
用户名/用户组名        主机地址=授权命令(绝对路径)
如,授权用户zhaoliu可以关机和重启,则添加如下行:
zhaoliu        Helen=/sbin/shutdown,/sbin/reboot
指定组名用百分号标记,如%admgroup ,多个授权命令之间用逗号分隔。
用户zhaoliu可以使用sudo查看授权的命令列表:
sudo -l
Password:
User zhaoliu may run the following commands on this host:
    (root) /sbin/shutdown
    (root) /sbin/reboot
提示输入密码为zhaoliu的密码,验证其是否为管理员通过sudo授权的用户,执行命令:
sudo /sbin/shutdown -h now
zhaoliu即可关机,注意命令写绝对路径,或者把/sbin路径导入到用户缺省路径中,否则无法执行。

案例:授权用户管理Apache
授权一个用户管理你的Web服务器,不用自己插手是不是很爽,以后修改设置更新网页什么都不用管,一定Happy死了,LOOK——
首先要分析授权用户管理Apache至少要实现哪些基本授权:
1、可以使用Apache管理脚本
2、可以修改Apache配置文件
3、可以更新网页内容
假设Aapche管理脚本为/etc/rc.d/init.d/httpd ,满足条件一,用visudo进行授权:
zhaoliu        Helen=/etc/rc.d/init.d/httpd reload,/etc/rc.d/init.d/httpd configtest
授权用户zhaoliu可以通过Apache管理脚本重新读取配置文件让更改的设置生效(reload)和可以检测Apache配置文件语法错误(configtest),但不允许其执行关闭(stop)、重启(restart)等操作。
满足条件二,同样使用visudo授权:
zhaoliu        Helen=/bin/vi /etc/httpd/conf/httpd.conf
授权用户可以root身份使用vi编辑Apache配置文件。
以上两种sudo的设置,要特别注意,很多朋友使用sudo会犯两个错误:第一,授权命令没有细化到选项和参数;第二,认为只能授权管理员执行的命令。
条件三则比较简单,假设网页存放目录为/var/www/html ,则只需要授权zhaoliu对此目录具有写权限或者索性更改目录所有者为zhaoliu即可,如果需要还可以设置zhaoliu可以通过FTP等文件共享服务更新网页。
本文所有操作在Red Hat Enterprise Linux 5.4下完成,其他Linux基本无差异,本文基本涵盖Linux的所有权限管理方式,虽不细致但足以让读者对其有一个整体的了解。
最后请切记系统安全的基本原则:授权用户最小的权限。
蜘蛛侠说“能力越大责任越大”,Linux管理员说“能力越大出错几率越大”,阿门。
分享到:
评论

相关推荐

    Linux那些事儿之我是USB

    本文将深入探讨“Linux那些事儿之我是USB”这一主题,主要围绕Linux系统下对USB设备的管理和操作进行讲解。 首先,USB(Universal Serial Bus)是一种通用串行总线标准,它允许不同类型的设备连接到计算机上,如...

    电子-Linux那些事儿之我是PCI.rar

    这个名为“电子-Linux那些事儿之我是PCI.rar”的压缩包文件,显然包含了关于Linux系统如何识别、配置和管理PCI设备的详细资料。 在Linux环境下,PCI设备的管理和操作涉及到多个层次的知识点: 1. **PCI总线架构**...

    Linux那些事儿 之 我是Sysfs下.pdf

    - **inode**: inode 结构包含了文件的元数据,如权限、大小等,但不包括文件名。 - **super_block**: super_block 结构描述了一个文件系统的实例,包含了该文件系统的基本信息。 - **vfsmount**: vfsmount 结构用于...

    linux那些事儿.rar

    这个名为“linux那些事儿.rar”的压缩包可能包含了关于Linux系统的一些文章或教程,帮助我们深入理解和掌握这个开源操作系统。下面,我们将从多个方面来探讨Linux的相关知识点。 首先,我们要知道Linux是一个基于...

    linux程序员学习必看 linux那些事儿之我是USB

    《Linux程序员学习必看:Linux那些事儿之我是USB》是一本深入浅出介绍Linux系统以及其与USB设备交互的专业书籍,对于想要在Linux领域深化学习的程序员来说,是一份不可多得的参考资料。本书全面覆盖了Linux操作系统...

    linux内核编程和linux那些事儿

    总的来说,Linux内核编程和Linux那些事儿涵盖了从底层硬件到上层应用的广泛知识,是成为一名熟练的Linux系统管理员或开发者所必须掌握的基础。通过深入学习和实践,你可以更好地理解和利用这个强大的开源操作系统。

    Linux那些事儿系列

    在“Linux那些事儿系列”这个主题中,我们深入探讨的是Linux操作系统的核心——内核源码。这是一套由复旦大学的学者fudan_abc撰写的教程,它以其独特的风趣风格,使得复杂的内核概念变得易于理解,非常适合对Linux...

    Linux哪些事(全集)

    "Linux那些事儿"这一资源很可能涵盖了以上所有内容,包括详细的解释、实例演示和实践指南。通过学习这份全集,无论是新手还是经验丰富的用户,都能进一步提升自己的Linux技能,更好地应对各种IT挑战。

    linux那些事儿之我是U盘

    在Linux世界中,U盘(USB闪存驱动器)是一种常用的便携式存储设备,用于在不同计算机之间传输数据或启动系统。...通过阅读《linux那些事儿之我是U盘.pdf》这份文档,相信你能获取更深入的实践指导。

    LINUX那些事儿之USB

    在Linux中,USB设备的访问权限受到控制。默认情况下,只有root用户才能读写USB设备。要让用户无需sudo权限即可操作,可以修改udev规则。创建一个新的udev规则文件(如/etc/udev/rules.d/10-usb-permissions.rules)...

    Linux那些事儿

    《Linux那些事儿》这篇文章或许揭示了作者在面对技术深度与简洁表述之间矛盾时的无奈,同时也反映出Linux系统及其相关技术的复杂性和深度。Linux是一种开源操作系统,它的内核由林纳斯·托瓦兹于1991年创建,如今已...

    Linux那些事儿之我是Sysfs

    ### Linux那些事儿之我是Sysfs #### Sysfs简介与初探 Sysfs是一个特殊的文件系统,主要用于导出内核的数据结构、属性以及它们之间的连接到用户空间。它类似于`proc`文件系统,提供了查看和控制内核内部状态的方法...

    linux那些事儿

    本文档“Linux那些事儿”深入探讨了Linux环境下的USB开发,这是一门涉及硬件交互、驱动程序编写及系统集成的复杂技术。 首先,Linux中的USB(通用串行总线)开发主要涉及USB驱动程序的编写。USB驱动是操作系统与USB...

    Linux那些事儿之我是U盘

    Linux的权限模型对U盘操作也有影响。若遇到无法读写U盘的问题,检查用户是否具有相应的权限,或者使用`chmod`和`chown`命令调整权限和所有权。 六、安全移除U盘 Linux提供了一种安全移除U盘的方法,避免数据损坏。...

    linux那些事儿 ...

    通过创建udev规则,用户可以自定义设备的命名、权限和挂载行为,例如为特定的USB设备分配固定的设备名,避免每次插入设备时名称发生变化。 总的来说,Linux对USB的支持十分全面,无论是日常使用还是开发调试,都有...

    LINUX哪些事儿.rar

    "LINUX哪些事儿.rar"这个压缩包文件显然包含了与Linux相关的知识资源,旨在帮助管理者和开发者提升技能。让我们深入探讨一下Linux在管理和开发中的核心知识点。 一、Linux基础 1. 文件系统:Linux采用的是类Unix的...

    linux 那些事

    Linux那些事儿,这是一个涵盖Linux操作系统方方面面的学习资源,旨在帮助用户深入了解和掌握这个强大的开源操作系统。Linux,由林纳斯·托瓦兹在1991年创建,已经发展成为全球最广泛使用的服务器操作系统之一,它的...

    Linux那些事儿(包括Hub, Sysfs, UHCI, USB, U盘5个部分)

    接下来,Sysfs是一个虚拟文件系统,它在Linux内核和用户空间之间提供了一个接口,使得用户可以无需root权限就能查看和修改系统状态。Sysfs中的文件代表了内核对象,如设备、总线和其他系统资源。通过读写Sysfs中的...

Global site tag (gtag.js) - Google Analytics