文章来源: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
管理员说“能力越大出错概率越大”,阿门。