Linux权限360度赤裸裸华丽丽大曝光连载之三:查缺补漏

文章来源:http://blog.chinaunix.net/space.php?uid=20168535&do=blog&id=334318

1、 权限之粘着位
 
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 ”(中文翻译:你丫没事吧,瞎得瑟啥,哥的文件你删不了)。
 
2、 文件系统权限
 
每一个操做系统都要有一种组织管理数据的方式,咱们能够理解为就是文件系统,好比 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 选项中的详细介绍,更多设置读者可自行尝试,所谓授之以鱼不如授之以渔读万卷书不如行×××路万恶淫为首窗前明月光啊。
 
3、 权限之 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 等文件共享服务更新网页。
 
至此,本系列权限管理文章基本涵盖 Linux 的全部权限管理方式,虽不细致但足以让读者对其有一个总体的了解。最后请切记系统安全的基本原则:受权用户最小的权限。
蜘蛛侠说“能力越大责任越大”, Linux 管理员说“能力越大出错概率越大”,阿门。
相关文章
相关标签/搜索