Windows系统其实和Linux系统有相似的地方,Windows系统文件、目录的属性有只读、隐藏,而Linux也一样。. q0 x D4 o' J9 g. h- I- a, l
1 }% z; x' }: o6 F2 r
Linux中,每一个文件都具有特定的属性。主要包括文件类型和文件权限两个方面。可以分为5种不同的类型:普通文件、目录文件、链接文件、设备文件和管道文件。
7 P/ R5 A1 G* j' g$ G5 K5 P" ^, Y" ~" g$ ?# K) _; F
所谓的文件权限,是指对文件的访问权限,包括对文件的读、写、删除、执行。Linux是一个多用户
操作系统,它允许多个用户同时登录和工作。因此Linux将一个文件或目录与一个用户或组联系起来。访问控制列表(ACL:AccessControlList)为
计算机提供更好的访问控制,它的作用是限制包括root用户在内的所有用户对文件、资源或者套接字的访问。下面就来教大家简单的设置方法。
* x" ?+ W4 ^8 D
6 a& V% J0 ]; j$ g 步骤1检查系统核心
7 E) R& A( @( d" C L( ~9 d7 E4 f
. y! U3 E, r, }5 ^9 T 首先检查你的Linux系统的核心是否有支持ACL的
功能。因为Linux系统并不是每一个版本的核心都有支持ACL的
功能,而最简单的方法就是检查系统目前的核心能否支持:
+ U" p+ q7 y G/ a3 E( s, n L
( y- {8 r F1 [9 D/ M [root@mail/]#cat/boot/config-kernel-version│grep-iext3
. Y) ]0 e. P; S0 d7 g! C2 t8 T% H; P
& N% e6 p; b6 ^3 x/ c* f& Q0 u! z
CONFIG_EXT3_FS=m
4 {* l' C+ K9 V4 |3 h1 W/ o
' k4 z3 N8 A6 W4 V; l& H: g CONFIG_EXT3_IDEX=y
; C; r. D; z1 A9 u( [ S& J" S; H& Q# K! W3 U9 w z; b
[color=#FFFFFF']
& f1 C1 S) {; z8 A' u$ G
* l4 g" R4 B$ ?1 l, v CONFIG_EXT3_FS_XATTR_SHARING=y
& C/ a5 ? E) g$ l: d, C: @5 f; r7 z {; y
CONFIG_EXT3_FS_XATTR_USER=y
$ K* k$ Z) \9 m5 _
7 d# a) |: U1 H CONFIG_EXT3_FS_XATTR_TRUSTED=y
' v8 H0 m: `1 M# d+ J+ G& S" h
1 g* H: b1 f7 x% H$ @0 k
CONFIG_EXT3_FS_ACL=y
9 V* v* I! W3 X4 ?
; \( J* f7 ^7 T% b, X4 x 此时如果能看到上面的几项则表示已经编译到核心中,ext3文件系统已支持ACL功能,这些功能在编译核心选项中都可以找到。如果编译时找不到,可以到ACL的官方
网站来安装Kernel(acl.bestbits.at/)。
3 T/ s8 I5 ~- N- |- P7 D4 M# v3 i& Z8 D& M( d! Q$ k4 ^
步骤2挂载分区% {. o3 R" d, ?2 U# h0 D% m* D8 E+ ~. `
# A! x: q# Y, ~ G8 k) s- r6 o+ D- R
你可以用下列的方式挂载分区并启用ACL:
$ Z8 i4 p! Q+ n! o# C
0 @+ J! T% J- I% _ #mount-text3-oacl/dev/sda1/fs1
. Q( Q- K2 t2 @* \" t: i7 L/ Q& [+ k8 s! L4 r N7 _
你也可以直接写在/etc/fstab文件中,这样就可以在开机后支持ACL功能:
2 ^- a9 Y+ O5 _) \% \
$ x* H; O2 Y+ m' S, J+ C5 ` #vi/etc/fstab
% g) f- `! V$ a, N7 P" z, b; D8 t3 H. F" p* r" }
步骤3设置ACL权限% L5 B# Z& q! ]- O
$ S3 r" \! b4 _: V! J7 [
/ N& _4 K$ K) X2 d ACL常常针对个别用户来进行设置,下面是多个不同的例子:
, ^$ z( s1 \3 r$ F6 D L, d
9 R! r( h5 c, D7 [6 H; e 例如需要创建test1、test2、test3三个用户,可以先用root身份登录系统,然后执行以下命令分别创建三个用户名和密码:
- y% U& H" L% p( S
& [1 F; n( E+ E( K! G
[root@mailroot]#addusertest1
) z1 N7 W) I* J8 x' | [root@mailroot]#addusertest2
' [) B c" u" `) `/ u6 n [root@mailroot]#addusertest3
0 w3 u2 u {5 t9 ?2 b) n2 {. v [root@mailroot]#passwdtest1
. `0 A+ M2 A0 c4 r# _ X [root@mailroot]#passwdtest2
1 |9 R; X' e( S( ]8 z# ^1 _
[root@mailroot]#passwdtest3
) a+ U3 i0 W5 p4 N2 P
' N i" A) C* `- y9 |' x6 \ 然后mount一个ext3文件到目录/fs1:
$ h; u3 ~. W% d3 y5 Y9 d; L W
[root@mailroot]#mount-text3-oacl/dev/sda1/fs1
" I; I1 ]( T" C+ N# ?$ O9 [2 f7 g0 W1 m& t
再将test1建立的文件设置读写的权限给test2:
5 ?- V: \3 ~* g ^
[root@mailroot]#chmod-R777/fs1
1 t/ e) V8 Z' [8 t+ w* K8 y
让所有的用户都能增加文件到目录的权限:
( I% E1 P: c' J. f8 t# u
7 D! e$ T5 L' V* B' N
先用test1登录系统,执行命令:
; E ^* `6 t2 j; F0 x [test1@mailtest1]#cd/fs1
4 x* Y' W) \) ], L- H8 \2 v
[test1@mailfs1]#echo"Createbytest1"%26gt;test1.txt
. K8 u7 y& X" b# O: W/ h/ J% Z [test1@mailfs1]#chmodgo-rtest1.txt
- m2 m" t, Y2 X. }/ J [test1@mailfs1]#lltest1.txt
( k, G6 a( [7 a8 D -rw-------1test1test117Jul1422:11test1.txt
4 x; B! [, V8 t; p0 @: T6 e
! b' r% e" A# g7 E# t1 A4 f! {" K! G 而如下操作则可以让除了test1有读写的权限外其他人没有读写test1.txt的权限(root除外),先用test2登录系统后执行以下命令:
" k3 n. K) G0 G [test2@mailtest2]#cd/fs1
r# N! F+ G- {" i( L" z
[test2@mailfs1]#cattest1.txt
" Z$ J4 D6 ? ?" ? cat:test1.txtPermissiondenied
4 p0 M9 c6 q; e) R0 S9 F
8 g3 }1 K/ v, M! S0 I: X 接着用test1登录系统,执行如下命令:
' ~, s5 `. z- t& [
[test1@mailfs1]#setfacl-mu:test2:rwtest1.txt
' N4 P: H5 |* m4 p. ^+ j9 \1 x+ a4 L7 K n2 b1 ~) g5 j( \
这样就修改权限允许test2有这个文件的读写权限。再看一下它的文件属性的变化:
( K* V2 B) B- k, G5 v [test1@mailfs1]#ll
. A; y. C, m; Y- l -rw-rw-r--1test1test110Feb1613:52test1.txt
$ y, K# _$ b% j' O. F$ Y( m) F" Z# L6 T2 k: }( K$ r
会看到后面多了一个“”,表示这个文件使用ACL的属性设置,再用命令getfacl来看ACL的文件属性设置:
9 B; B4 X1 p. i' i* d5 D3 I* x
[test1@mailfs1]#getfacltest1.txt
, {$ P6 b4 N6 h$ a; s6 ~4 k) t
#file:test1.txt
) o5 h( x5 e w1 M% A #owner:test1
# @3 {$ L( x$ }$ a* i
#group:test1
1 ~0 E0 |5 p. \- p# Y user::rw-
% i# ]& `& w, p1 q user:test2:rw-
/ Z, E% ?" _6 o7 B2 I group::rw-
$ n$ Y) x$ N& a: t mask::rw-
5 }2 e/ ?& V% ^% R, n: B other::r--
6 E8 S ~* g" y9 o0 K
5 G0 R3 E. T6 m) }: T; |7 v 可以看到test2有权限读写这个文件。
. Z) j- t- j% A: X; X9 R
* x4 v! g1 D! v5 {" ^4 d5 c 我们再用test2登录系统执行以下命令,看看发生了什么?
/ p2 u/ g' U4 @& Q6 U) ^5 P
[test2@mailtest2]#cd/fs1
( p6 ~- O: C4 N) c7 t: h
[test2@mailfs1]#cattest1.txt
) _! [# a% u/ m& ~. I) K" V Createbytest1
' L% Z! _" b9 n3 D. K
( G: V6 f4 O1 B 原来test2可以读取test1.txt文件了。
7 i4 S! @, f( _8 n) U9 j, I [test2@mailfs1]#echo"Modifybytest2"%26gt;%26gt;test1.txt
- h3 s& x3 S) a2 D" i$ A [test2@mailfs1]#cattest1.txt
p" B- d/ J9 s- {6 K
Createbytest1
3 E$ l: A+ k8 E6 p: a
Modifybytest2
* J0 s1 n6 N* r4 f/ _5 X3 ?- w2 F! E% }8 U- O [8 ^5 e
现在test2也可以修改test1.txt文件了。
& y) O0 w$ ?! R$ A* i! p
0 L9 \9 f; Q8 p8 s( ]( d* V 接着用test3登录系统:
2 }) h$ ~1 y: w4 H1 p# m6 @8 ~
[test3@mailtest3]#cd/fs1
: l( X4 C" K* E% b7 y% t' ~
[test3@mailfs1]#cattest1.txt
0 K+ f/ x0 G2 Z( }( i; H& {# f
cat:test1.txtPermissiondenied
) E c' C- d* Z% C) @
9 ?( V) m0 T+ _
嘿嘿,除了test1、test2外没有其他用户有读写test1.txt的权限(root除外)。
; m! f [! O7 o) Y& @7 o% U1 n) W; E# o* |$ o+ F8 H6 i$ ^
看着虽然有点晕,其实命令就是这么一两条,主要是把各种情况给大家讲清楚,这样,大家在使用Linux中才会
发现,比起脆弱的Windows的权限防护,Linux实在是做得相当不错!