Windows系统其实和Linux系统有相似的地方,Windows系统文件、目录的属性有只读、隐藏,而Linux也一样。
% W) a# @2 g# A! C
/ Q' j) g8 U+ W7 f7 T Linux中,每一个文件都具有特定的属性。主要包括文件类型和文件权限两个方面。可以分为5种不同的类型:普通文件、目录文件、链接文件、设备文件和管道文件。
* h3 w+ J0 ]+ p- a3 P
: ?- M& e4 b }0 U% ~ 所谓的文件权限,是指对文件的访问权限,包括对文件的读、写、删除、执行。Linux是一个多用户
操作系统,它允许多个用户同时登录和工作。因此Linux将一个文件或目录与一个用户或组联系起来。访问控制列表(ACL:AccessControlList)为
计算机提供更好的访问控制,它的作用是限制包括root用户在内的所有用户对文件、资源或者套接字的访问。下面就来教大家简单的设置方法。
) C: g' q( L! c# B
7 R4 G) f4 C7 J2 G9 \/ P. A 步骤1检查系统核心
- k) [: o. D& u1 [6 {% U/ ^9 W# T7 D
首先检查你的Linux系统的核心是否有支持ACL的
功能。因为Linux系统并不是每一个版本的核心都有支持ACL的
功能,而最简单的方法就是检查系统目前的核心能否支持:
" t+ K* I! X/ z1 b6 `
9 k& f$ R% s0 S. c
[root@mail/]#cat/boot/config-kernel-version│grep-iext3
/ f1 Z9 {7 t+ U
8 z- h# ` {* `% }+ M, A `$ R( E v$ l! o CONFIG_EXT3_FS=m
j) [& x$ i- z! c2 g
! Y$ ^8 z& Y6 W! S8 s
CONFIG_EXT3_IDEX=y
0 a+ N, p9 G. u3 \' o
# O9 Z# f6 S- {$ d S, E; q
CONFIG_EXT3_FS_XATTR_SHARING=y
! f: r) T S) C) Y/ B' U3 U |% B6 f2 ?
CONFIG_EXT3_FS_XATTR_USER=y
/ H& l6 I$ \2 n) B8 p+ m
" }0 f, M4 d3 G8 q+ H4 t' @" @% u CONFIG_EXT3_FS_XATTR_TRUSTED=y
% Q0 i" E. t% E
1 M# j0 m5 r. z( }2 r
CONFIG_EXT3_FS_ACL=y
" r- Z2 O: D2 c. C8 I3 ~
2 l) ~& g0 L2 W8 Y+ ~- D 此时如果能看到上面的几项则表示已经编译到核心中,ext3文件系统已支持ACL功能,这些功能在编译核心选项中都可以找到。如果编译时找不到,可以到ACL的官方网站来安装Kernel(acl.bestbits.at/)。
6 Y* ]7 \: W7 ^* @7 u9 @8 R
+ S3 m5 x( I9 W( B% O 步骤2挂载分区
) e" @6 k8 h8 {6 x# R! e" X* A5 Z: h9 V
你可以用下列的方式挂载分区并启用ACL:
" ^- @- a4 b, {/ ?
! Q7 X K1 ~7 H# ?* H, O# N #mount-text3-oacl/dev/sda1/fs1
( k- X; b; c1 |" v" ~! l
' x. Y+ [9 R( ` 你也可以直接写在/etc/fstab文件中,这样就可以在开机后支持ACL功能:
! T1 l% \1 W h' L8 z2 {+ J
; P; _9 r: Y% ^. E #vi/etc/fstab
2 w6 B0 q' e! a. Y% n
' K5 Z, }1 z( q( O0 ]( c, n; L 步骤3设置ACL权限" n* O. ?1 \# ~
* l7 q: f' Z* ^. P0 F' } E
# Z$ ]- c/ v. H1 U9 c( m# V9 r ACL常常针对个别用户来进行设置,下面是多个不同的例子:
3 M* L8 {1 x2 _% L( m' V% Y
' y# U3 L' \& i5 ]0 A2 S$ T3 X% T 例如需要创建test1、test2、test3三个用户,可以先用root身份登录系统,然后执行以下命令分别创建三个用户名和密码:
\) B: o' y, _7 q! [
% E$ ~$ Y: k* _ [root@mailroot]#addusertest1
% }3 @/ {# R |7 j( T/ _5 m3 Q# e7 \
[root@mailroot]#addusertest2
, j3 R4 W, z1 B7 e [root@mailroot]#addusertest3
# J! v: f$ X3 F" z: ? [root@mailroot]#passwdtest1
7 Q) ?" q( V5 U r# F" Z, D" } [root@mailroot]#passwdtest2
3 e- Y7 w3 p( j5 [& N
[root@mailroot]#passwdtest3
# M& _5 y8 ^4 c' `# G$ c: v( [
' q8 n( r4 r" ^# D) K 然后mount一个ext3文件到目录/fs1:
% E$ s6 u8 n2 a6 o [root@mailroot]#mount-text3-oacl/dev/sda1/fs1
) }" K) w2 H+ v/ U) U0 Y
; _9 l8 c" R5 c6 r; \
再将test1建立的文件设置读写的权限给test2:
' B& L3 |5 Z6 c; S [root@mailroot]#chmod-R777/fs1
7 P7 |0 l0 J/ U" s
让所有的用户都能增加文件到目录的权限:
2 b. D- |* ]) Y# B* Z: s( n1 S' o
; R! ]" Y- y0 T7 J: J! X
先用test1登录系统,执行命令:
3 c) K( [+ e |2 J0 [$ [ [test1@mailtest1]#cd/fs1
& s; q' J9 a' a* R$ g* B
[test1@mailfs1]#echo"Createbytest1"%26gt;test1.txt
# n7 h( H# l' m [test1@mailfs1]#chmodgo-rtest1.txt
/ d# }* u! e7 \, s% }! ]; P+ I. G& ]
[test1@mailfs1]#lltest1.txt
3 }& I, ]6 O u7 i% W/ ~/ b -rw-------1test1test117Jul1422:11test1.txt
, |: a3 V) t6 G, e% q7 k
! C7 `! J {/ w
而如下操作则可以让除了test1有读写的权限外其他人没有读写test1.txt的权限(root除外),先用test2登录系统后执行以下命令:
: w% d$ _2 Y" s- M! i2 U1 ^
[test2@mailtest2]#cd/fs1
. ?2 k% {$ @) X, J. z q1 E
[test2@mailfs1]#cattest1.txt
$ y* O1 s' Z6 H/ M
cat:test1.txtPermissiondenied
/ p2 N3 x- C1 z
, C5 D7 P1 t1 Y+ ]7 ]
接着用test1登录系统,执行如下命令:
9 w, Y8 J0 [* H; g2 C [test1@mailfs1]#setfacl-mu:test2:rwtest1.txt
, x z. ~, E4 a- M
2 O2 c$ \$ d5 w% P( {: y
这样就修改权限允许test2有这个文件的读写权限。再看一下它的文件属性的变化:
! Q3 {. V1 M# ^- g [test1@mailfs1]#ll
$ M2 R* o# p+ X6 e8 {7 N: m -rw-rw-r--1test1test110Feb1613:52test1.txt
! f( t9 O, p: p! f, S4 n" d
- d5 x+ n+ V! J3 B% j3 A5 }! S$ o
会看到后面多了一个“”,表示这个文件使用ACL的属性设置,再用命令getfacl来看ACL的文件属性设置:
/ t8 ^8 P# x6 M+ c* q [test1@mailfs1]#getfacltest1.txt
' V* y( a: ?" ] #file:test1.txt
7 n/ Z% X& h! V; D& F# [1 S #owner:test1
+ u( {8 F D% e9 F. |8 |0 c
#group:test1
& O7 g; U' _' P( O0 B/ W c% X
user::rw-
3 i6 W) {" m0 O( p user:test2:rw-
5 p6 v, k; d2 I3 V group::rw-
4 q0 Z5 m" @. U4 c5 @0 P+ }" d% Z5 g mask::rw-
+ o3 Q$ g9 U9 B other::r--
' t- n z$ p3 M/ S7 j( A9 T+ R7 Y2 C+ p. |7 y! G
可以看到test2有权限读写这个文件。
0 }3 T$ c' z/ r4 F5 O! Y/ B0 I, O
. O0 L, n; r1 y2 R5 F) v% A! D u% M 我们再用test2登录系统执行以下命令,看看发生了什么?
0 {! j- L7 m) H* \2 ^5 O [test2@mailtest2]#cd/fs1
; ]/ ?- i! i* ?( }0 ~ [test2@mailfs1]#cattest1.txt
) p9 L. q6 p" R+ Z4 ?, ? Createbytest1
& d8 c% j# y1 e- c# w
! L* ~2 @ T7 B% R) P$ w 原来test2可以读取test1.txt文件了。
9 B+ c( S- f1 H [" r' f
[test2@mailfs1]#echo"Modifybytest2"%26gt;%26gt;test1.txt
0 ]/ h' l2 l: q. K
[test2@mailfs1]#cattest1.txt
5 ?+ a5 O r7 ^5 B8 Q. S Createbytest1
2 j( `, b6 I/ j6 F Modifybytest2
5 c9 @5 y0 r s0 W- ~1 x2 i1 p" z; D" r: f& E z6 F$ v
现在test2也可以修改test1.txt文件了。
$ W% m: M- u: i6 s& V( n7 `0 n6 q( V$ I5 p
接着用test3登录系统:
) J, _4 d6 j9 r6 A [test3@mailtest3]#cd/fs1
+ M$ T m- r1 d2 _7 a3 w$ u
[test3@mailfs1]#cattest1.txt
" K. ?/ }) |! L5 o) E( P5 Y
cat:test1.txtPermissiondenied
& }7 [; s/ i& @" O$ f
6 a1 A6 H- a# G5 l; C# ~' { 嘿嘿,除了test1、test2外没有其他用户有读写test1.txt的权限(root除外)。
% Z2 C5 F# c( E* N( ^+ U/ o9 C/ T( k
. S+ i V. u! [. `
看着虽然有点晕,其实命令就是这么一两条,主要是把各种情况给大家讲清楚,这样,大家在使用Linux中才会发现,比起脆弱的Windows的权限防护,Linux实在是做得相当不错!