
Linux权限360度赤裸裸华丽丽大曝光连载之三:查缺补漏
文章来源:.php?uid=20168535&do=blog&id=334318
一、
权限之粘着位
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/f 授权用户可以
root 身份使用
vi 编辑
Apache 配置文件。 以上两种
sudo 的设置,要特别注意,很多朋友使用
sudo 会犯两个错误:第一,授权命令没有细化到选项和参数;第二,认为只能授权管理员执行的命令。 条件三则比较简单,假设网页存放目录为
/var/www/html ,则只需要授权
zhaoliu 对此目录具有写权限或者索性更改目录所有者为
zhaoliu 即可,如果需要还可以设置
zhaoliu 可以通过
FTP 等文件共享服务更新网页。
至此,本系列权限管理文章基本涵盖
Linux 的所有权限管理方式,虽不细致但足以让读者对其有一个整体的了解。最后请切记系统安全的基本原则:授权用户最小的权限。 蜘蛛侠说“能力越大责任越大”,
Linux 管理员说“能力越大出错几率越大”,阿门。
转载于: