Windows系统其实和Linux系统有相似的地方,Windows系统文件、目录的属性有只读、隐藏,而Linux也一样。
& c5 d8 V" A2 |# v) s: a+ \; V
5 v1 W) }0 f, e* ^. b) { Linux中,每一个文件都具有特定的属性。主要包括文件类型和文件权限两个方面。可以分为5种不同的类型:普通文件、目录文件、链接文件、设备文件和管道文件。
- x! ~ T2 @8 ]6 A9 ~7 ~9 L( r3 m: x' Z" f
所谓的文件权限,是指对文件的访问权限,包括对文件的读、写、删除、执行。Linux是一个多用户
操作系统,它允许多个用户同时登录和工作。因此Linux将一个文件或目录与一个用户或组联系起来。访问控制列表(ACL:AccessControlList)为
计算机提供更好的访问控制,它的作用是限制包括root用户在内的所有用户对文件、资源或者套接字的访问。下面就来教大家简单的设置方法。
9 s; L% ^( x4 r$ _' ]2 u2 d
% f8 f- |, q$ f3 i2 ]
步骤1检查系统核心
( G. p! Z8 E$ Y- |* v0 r" N0 J! {9 _( L. e
首先检查你的Linux系统的核心是否有支持ACL的
功能。因为Linux系统并不是每一个版本的核心都有支持ACL的
功能,而最简单的方法就是检查系统目前的核心能否支持:
' z3 `% f" b5 X: W* P
5 c Y& J3 f1 A [root@mail/]#cat/boot/config-kernel-version│grep-iext3
8 r; t% r' h9 D2 m1 x) y8 F) O' @7 i
CONFIG_EXT3_FS=m
1 i+ e6 p& ]1 }- x
; V# `; a& ?# `$ t% ]# n( G CONFIG_EXT3_IDEX=y
, F( S/ k9 I- s" g
6 F" I" }, e! J' ]' x; s- }) u
CONFIG_EXT3_FS_XATTR_SHARING=y
' k# Y6 r0 N" B+ S# w
. Y7 @( k7 O5 ?- M CONFIG_EXT3_FS_XATTR_USER=y
3 S K. U& W) } I9 _: X5 D3 E& A9 @+ \' a$ b) t. `7 w
CONFIG_EXT3_FS_XATTR_TRUSTED=y
7 @. @# E4 ]9 a! q5 T+ ?
% K1 c% V# x, \& N; _+ I CONFIG_EXT3_FS_ACL=y
# u, a+ J; n& k$ `4 k
" W0 C& v% D, I% a 此时如果能看到上面的几项则表示已经编译到核心中,ext3文件系统已支持ACL功能,这些功能在编译核心选项中都可以找到。如果编译时找不到,可以到ACL的官方网站来安装Kernel(acl.bestbits.at/)。
: V+ r5 ]- h4 h% K1 @" J
; I8 d1 t. N; h 步骤2挂载分区
0 A7 H; p& r/ U. I N- {7 f/ L& V
% {7 G5 Z3 U# x# E: |; u1 y 你可以用下列的方式挂载分区并启用ACL:
5 w3 y( ^! N% L _- }
# A& }/ ]2 L |4 b
#mount-text3-oacl/dev/sda1/fs1
" f$ ]) ~; W# z1 {; D6 S6 N- w. y6 Y. E. o Y, m) f/ g* a3 j$ X
你也可以直接写在/etc/fstab文件中,这样就可以在开机后支持ACL功能:
& b0 E8 ~% t1 D5 H+ Z X; ?$ H* {0 y$ o1 V# y# r# v
#vi/etc/fstab
& M6 `+ o7 y$ \6 I' e. D, _
! _2 N3 @% s5 t, t( }
步骤3设置ACL权限1 p$ F/ V2 p( O o% R8 z. d K3 D9 z
; o! m* [7 R4 J$ z* ]1 W! f; c
ACL常常针对个别用户来进行设置,下面是多个不同的例子:
& c# \6 O: U' G. V! b% _
m1 w( r( d, E4 @/ ] S 例如需要创建test1、test2、test3三个用户,可以先用root身份登录系统,然后执行以下命令分别创建三个用户名和密码:
5 o3 x+ |3 @% O+ L9 c% s7 u
# |+ X+ j! n" A- k! w2 O+ r2 E) F [root@mailroot]#addusertest1
/ D6 R. }) J9 e [root@mailroot]#addusertest2
% c7 ]1 P% ]( n: P, v; m
[root@mailroot]#addusertest3
% W7 P1 \& r7 a( c
[root@mailroot]#passwdtest1
0 [7 j q6 J1 |1 L, h
[root@mailroot]#passwdtest2
% X; P+ v! z$ y' g- d1 Q* b
[root@mailroot]#passwdtest3
+ I- S1 T, Y7 V( {# W3 g
9 l8 i; O7 _+ H ^ ^. ] 然后mount一个ext3文件到目录/fs1:
2 T3 X' d2 n; C7 n [root@mailroot]#mount-text3-oacl/dev/sda1/fs1
6 N O) E. N8 k/ f6 j# Y
- Y# X; _9 M$ B, {# P0 W 再将test1建立的文件设置读写的权限给test2:
4 V \& i9 @4 y! ~& c
[root@mailroot]#chmod-R777/fs1让所有的用户都能增加文件到目录的权限:
' V V; ~2 x/ N: d/ ]
W. [( I/ c, B. ]+ D. A2 y5 B4 E" i 先用test1登录系统,执行命令:
6 _8 p4 `7 S: O3 c3 o: o: j
[test1@mailtest1]#cd/fs1
4 {8 y- t. `6 _& q0 l$ p/ J |2 q$ l [test1@mailfs1]#echo"Createbytest1"%26gt;test1.txt
. X: a c# ]8 n
[test1@mailfs1]#chmodgo-rtest1.txt
% G. W$ ?1 I! _( _0 H9 G; w
[test1@mailfs1]#lltest1.txt
) ~9 ?3 x, M& H$ {7 m, a, i2 G. s5 W
-rw-------1test1test117Jul1422:11test1.txt
( r$ ~: t5 H8 p5 B Q" \2 T9 t: ?* A( X% O( @+ k) J
而如下操作则可以让除了test1有读写的权限外其他人没有读写test1.txt的权限(root除外),先用test2登录系统后执行以下命令:
7 }5 F7 m. Z' U [test2@mailtest2]#cd/fs1
1 A* `8 J* j; Z: N
[test2@mailfs1]#cattest1.txt
7 A4 U+ l6 [. T. `
cat:test1.txtPermissiondenied
. N5 U/ D) K% x5 H5 d P& U& o" h( t3 D+ |6 I& h2 k4 f8 Q
接着用test1登录系统,执行如下命令:
3 x# \/ C/ z1 T4 h: v3 {0 d [test1@mailfs1]#setfacl-mu:test2:rwtest1.txt
+ r0 F [6 l- c: `- b- W) s8 o4 O8 c/ s
这样就修改权限允许test2有这个文件的读写权限。再看一下它的文件属性的变化:
6 \ J6 f: A* A0 Y( }3 X
[test1@mailfs1]#ll
% Q- V/ h% G% k# C0 V3 n -rw-rw-r--1test1test110Feb1613:52test1.txt
# r5 H& L6 k- P2 Q, h
8 Z j9 y& }9 ~) R" { 会看到后面多了一个“”,表示这个文件使用ACL的属性设置,再用命令getfacl来看ACL的文件属性设置:
4 G5 R" v; Q5 C! b
[test1@mailfs1]#getfacltest1.txt
6 l0 B7 x% v& O7 M1 P! y! s8 V
#file:test1.txt
3 h6 j$ _+ J0 x- V8 Q #owner:test1
9 @. |& Q1 v& _8 a0 ]- v w! w #group:test1
% z- k2 s: d" n9 Y r" h9 K2 S
user::rw-
5 ]9 A" S0 I7 |4 D. Y8 w4 ~ user:test2:rw-
7 Z s3 S; i, i group::rw-
5 L) S1 q& Z% m- [# @ mask::rw-
- L: S/ H/ v5 g7 ~9 ~
other::r--
* y$ c. K+ V8 r" f9 u7 o4 }5 h% w) b
可以看到test2有权限读写这个文件。
. F' v, L( z7 _, @/ ^
# i0 `( I+ Y% J% p: g1 J- J- ^' @2 T 我们再用test2登录系统执行以下命令,看看发生了什么?
# J2 g# K( F* U. y' U+ H& K2 [
[test2@mailtest2]#cd/fs1
( V/ k! S: C& Z1 m9 F
[test2@mailfs1]#cattest1.txt
5 J; l# \& s ? A( t+ X, K Createbytest1
5 t" Q% k7 K0 E& ~- H) d
3 A* C/ f1 J9 G; T 原来test2可以读取test1.txt文件了。
/ Z4 `; i- O4 T# v% [( A) y: x
[test2@mailfs1]#echo"Modifybytest2"%26gt;%26gt;test1.txt
! H" Q$ E: u1 \ [test2@mailfs1]#cattest1.txt
) N% P1 Q* b8 b# c Createbytest1
5 B! F+ t0 d7 h2 C ?7 p0 ^# f
Modifybytest2
& h* d; w: c4 p) W9 G$ Y% _
$ \% d1 x5 R! f) m- s- M 现在test2也可以修改test1.txt文件了。
+ `1 R! R: t ^+ k# G, [
9 W' h0 L) {7 Q
接着用test3登录系统:
: u8 H, |4 Y* J9 U: E7 d g" a+ u
[test3@mailtest3]#cd/fs1
. `; j* r; e U* g' a% ^' }
[test3@mailfs1]#cattest1.txt
0 _7 I/ D S# r, P: r6 {* d cat:test1.txtPermissiondenied
r, p" p$ R- N4 @! q2 T( e
* n) N# h' y; C7 b- m @ 嘿嘿,除了test1、test2外没有其他用户有读写test1.txt的权限(root除外)。
; {5 b$ K4 E M4 H$ H
) O$ X' w6 X& g" W( ]8 ` C/ S 看着虽然有点晕,其实命令就是这么一两条,主要是把各种情况给大家讲清楚,这样,大家在使用Linux中才会发现,比起脆弱的Windows的权限防护,Linux实在是做得相当不错!