当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪RHCE学习笔记-RHEL5.4内核服务      本文介绍 linux 内核服务的相关知识,供大家学习参考。 Linux内核 内核是linux操作系统的核心部分, 内核的职责: 1 系统初始化     检测硬件资源并引导系统 2 进程的调度      决定进.........
    ▪RHCE学习笔记-RHEL5.4配置磁盘配额      本文介绍linux下关于磁盘配额的相关内容,供大家学习参考。 磁盘配额介绍 目前的磁盘配额只可以针对单一的文件系统来进行操作,也就是每一个分区来做磁盘配额。在linux下面可以针对ext2.........
    ▪RHCE学习笔记-RHEL5.4文件ACL权限      本文介绍linux下文件ACL权限的相关内容,供大家学习参考。 我们知道,在linux系统中,我们将访问文件的用户分为三类,user,group,other。 如果系统中某个用户想对某个文件有写入的权限,但.........

[1]RHCE学习笔记-RHEL5.4内核服务
    来源: 互联网  发布时间: 2013-12-24

本文介绍 linux 内核服务的相关知识,供大家学习参考。

Linux内核
内核是linux操作系统的核心部分,

内核的职责:
1 系统初始化     检测硬件资源并引导系统
2 进程的调度      决定进程的启动和允许时间
3 内存的管理     为允许的进程分配内存
4 安全                 经常校验文件系统的权限,selinux环境和防火墙规则
还可以提高缓冲和缓存以提高硬件的访问速度
采用标准网络协议和文件系统格式

linux内核在系统中的位置
[root@localhost ~]#
[root@localhost ~]# cd /boot/
[root@localhost boot]#
[root@localhost boot]# ll -h | grep vm
-rw-r--r-- 1 root root 1.8M Aug 19  2009 vmlinuz-2.6.18-164.el5
[root@localhost boot]#
这个文件就是linux系统的内核文件,这个文件的大小为1.8M。我们可以看到,linux内核很小,主要是为了系统运行的更快,保证安全。内核越庞大,其漏洞也就会越多,内核怎么小,怎么能够提供那么强大的功能呢,因为linux很多功能都是由模块来提供的,linux也叫模块化的操作系统。

内核的映像和版本
支持的平台: x86(32位)   x86_64(64位)   IA64/Itanium  PowerPC64  s390x
32位最多支持4G的内存。
可用于X86的三种内核版本
常规的 :  一个或多个处理器,最多可以支持4G内存。
PAE   :   多处理器,可以支持64G的内存。
Xen   :    虚拟化所需。

关于linux内核的版本
RHEL5.1     2.6.18-53.el5
RHEL5.4     2.6.18-164.el5
2.6   主版本
18   次版本
53   修正版
El5  红帽封装的
2.4   2.6   2.8  这些偶数位的内核版本代表正式版,
2.3   2.5   2.7  这些奇数位的内核版本代表测试版。

内核模块
模块是小型的,可根据需要装载或者卸载的内核扩展。
那么内核模块在系统中哪里呢
[root@localhost ~]#
[root@localhost ~]# cd /lib/modules/
[root@localhost modules]# ls
2.6.18-164.el5  2.6.18-164.el5PAE
[root@localhost modules]#
可以看到,这里有两个文件夹,现在看下来我们使用的是那个内核。

[root@localhost modules]#
[root@localhost modules]# uname -r
2.6.18-164.el5
[root@localhost modules]#
我们使用的是常规内核,进入2.6.18-164.el5这个目录

[root@localhost modules]#
[root@localhost modules]# cd 2.6.18-164.el5
[root@localhost 2.6.18-164.el5]# ls
build   modules.alias      modules.inputmap   modules.seriomap  updates
extra   modules.ccwmap  modules.isapnpmap  modules.symbols   weak-updates
kernel  modules.dep          modules.ofmap      modules.usbmap
misc    modules.ieee1394map  modules.pcimap     source
[root@localhost 2.6.18-164.el5]# cd kernel/
[root@localhost kernel]# ls
arch  crypto  drivers  fs  lib  net  sound
[root@localhost kernel]# cd fs/
[root@localhost fs]# ls
autofs4    cramfs    ext3      fscache  hfsplus  lockd       nfsd      vfat
cachefiles  dlm      ext4     fuse    jbd    msdos       nls
cifs        ecryptfs  fat      gfs2     jbd2    nfs         squashfs
configfs    exportfs  freevxfs  hfs      jffs2    nfs_common  udf
[root@localhost fs]#

在这里可以看到,我们的系统支持所有的文件系统都在这里拉。
[root@localhost fs]#
[root@localhost fs]# cd ext3/
[root@localhost ext3]# ls
ext3.ko
[root@localhost ext3]#
每个目录里面都有一个模块,并且都是以.ko结尾的。
在linux系统中,以.ko结尾的都是模块。

内核模块的管理工具
查询系统中有多少模块被加载了
#lsmod
[root@localhost ~]#
[root@localhost ~]# lsmod | grep ext3
ext3                  125001  4
jbd                    57065  1 ext3
[root@localhost ~]#

手动加载和卸载模块
#modprobe  vfat
#modprobe  -r   vfat
[root@localhost ~]#
[root@localhost ~]# modprobe vfat
[root@localhost ~]#
[root@localhost ~]# lsmod | grep vfat
vfat                   15937    0
fat                    51165     1   vfat
[root@localhost ~]#
[root@localhost ~]# modprobe -r vfat
[root@localhost ~]#
[root@localhost ~]# lsmod | grep vfat
[root@localhost ~]#

查询模块的详细信息
#modinfo  ext3
[root@localhost ~]#
[root@localhost ~]# modinfo ext3
filename:        /lib/modules/2.6.18-164.el5/kernel/fs/ext3/ext3.ko
license:          GPL
description:    Second Extended Filesystem with journaling extensions
author:          Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others
srcversion:      51D84081C475FE078B1D891
depends:        jbd
vermagic:       2.6.18-164.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
module_sig:     883f3504a8b7a0d18758d6145e112f4300a08dae31fac7f50d1e7b6d5b862d010384fbc1ea609f47bb1fe9f093d11a96a74986f486c45bf3ea246
[root@localhost ~]#

关于/etc/modprobe.conf文件
这个文件是模块的配置文件,在这个模块配置文件里面可以定义模块的别名,在加载模块的时候,系统会自动读取模块的配置文件。

管理initrd映像

这个文件通常叫做RAM DISK文件,

我们知道在系统启动的过程中,计算机会先加载根文件系统,根文件系统又是一个ext3的文件系统,所以计算机必须先加载ext的模块,但是ext3的模块又是在根文件系统下面。这样就会有个矛盾。所以我们RAM DISK文件中就有系统在启动的时候需要加载的模块文件。
[root@localhost ~]#
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# ls
[root@localhost tmp]# cp /boot/initrd-2.6.18-164.el5.img .
[root@localhost tmp]# ls
initrd-2.6.18-164.el5.img
[root@localhost tmp]# zcat initrd-2.6.18-164.el5.img |cpio -imd
11798 blocks
[root@localhost tmp]# ls
bin  dev  etc  init  initrd-2.6.18-164.el5.img  lib  proc  sbin  sys  sysroot
[root@localhost tmp]# cd lib/
[root@localhost lib]# ls
ata_piix.ko   dm-region_hash.ko  mptbase.ko   scsi_transport_spi.ko
dm-log.ko     ehci-hcd.ko       mptscsih.ko  sd_mod.ko
dm-mem-cache.ko  ext3.ko            mptspi.ko    uhci-hcd.ko
dm-message.ko    firmware           ohci-hcd.ko  vmxnet3.ko
dm-mod.ko        jbd.ko             pvscsi.ko    vmxnet.ko
dm-raid45.ko     libata.ko          scsi_mod.ko
[root@localhost lib]#
这个里面就有我们系统在启动的时候需要加载的模块。

如何重新生成这个RAM DISK文件呢
[root@localhost ~]# cd /boot/
[root@localhost boot]#
[root@localhost boot]# ls | grep initrd-2.6.18-164.el5
initrd-2.6.18-164.el5.img
initrd-2.6.18-164.el5kdump.img
initrd-2.6.18-164.el5PAE.img
[root@localhost boot]# rm -rf initrd-2.6.18-164.el5.img
[root@localhost boot]# ls | grep initrd-2.6.18-164.el5.img
[root@localhost boot]#
我们已经删除了RAM DISK文件,那么我们系统在下次启动的时候是肯定不能够正常启动的。

现在我们重新生成一下这个文件,
[root@localhost ~]#
[root@localhost ~]# mkinitrd /boot/initrd-$(uname -r).img $(uname -r)
[root@localhost ~]# cd /boot/
[root@localhost boot]# ls | grep initrd-2.6.18-164.el5.img
initrd-2.6.18-164.el5.img
[root@localhost boot]#
这个RAM DISK文件又重新回来了。

我们也可以在生成这个文件的时候指定要加载的模块,
[root@localhost ~]#
[root@localhost ~]# mkinitrd --with=raid5 /boot/initrd-$(uname -r).img $(uname -r)
[root@localhost ~]#
使用- - with参数来添加指定的模块。

使用/proc进行内核的配置

/proc用来进行对内核的设置,反应当时计算机的状态。文件没有保存在硬盘上面。用来显示进程信息,内存资源,硬件设备,内核内存,等等。下次启动这些文件就都没有了。
/proc的示例
只读文件
/proc/cpuinfo
/proc/1/*
/proc/partitions
/proc/meminfo
这些信息修改并没有意义。
[root@localhost ~]#
[root@localhost ~]# more /proc/partitions
major minor  #blocks  name
   8     0     15728640    sda
   8     1     104391        sda1
   8     2     4192965     sda2
   8     3    4192965      sda3
   8     4          1            sda4
   8     5    1052226      sda5
   8     6    522081        sda6
[root@localhost ~]#
这是用来显示系统中的分区,修改它并没有意义。

但是有些信息也是可以被修改的。
/proc/sys/kernel/hostname
/proc/sys/net/ipv4/ip_forward
/proc/sys/vm/drop_caches
/proc/sys/vm/swappiness
这些信息是可以修改的。

Sysctl工具
可以使/proc/sys设置具有永久性。
在/etc/sysctl.conf这个文件中去修改,在这个里面修改的会永久生效,因为在这个配置文件在/etc/rc.d/rc.sysinit这脚本里面被激活了。
列出当前设置
#sysctl  -a

从sysctl.conf中重新加载
#sysctl  -p

通过/dev/访问驱动程序
/dev目录下面的文件可用来访问驱动程序。
[root@localhost ~]#
[root@localhost ~]# cd /dev/
[root@localhost dev]#
[root@localhost dev]# ls -l sda1
brw-r----- 1 root disk 8, 1 Mar  3 13:08 sda1
[root@localhost dev]#
前面的b代表是个块设备文件,后面的8代表设备的主版本号,1代表次版本号。
系统识别一个设备,其实是通过设备的设备类型,主版本号,次版本号来识别的。

我们知道cdrom是用来挂载光驱里面的光盘的。
[root@localhost dev]#
[root@localhost dev]# ll -l cdrom
lrwxrwxrwx 1 root root 3 Mar  3 13:08 cdrom -> hdc
[root@localhost dev]# ll -l hdc
brw-rw---- 1 root disk 22, 0 Mar  3 13:08 hdc
[root@localhost dev]#
可以看到我们cdrom的主版本号是22,次版本号是0。

默认情况下,系统中的第一块硬盘的第一个分区/dev/sda1,应该就是b,8,1。
硬盘识别成b,第一块硬盘从8开始,1代表第一个分区。依次类推。
如果是第二块硬盘从17开始,因为一块scsi硬盘最多可以分15个分区。
应该就识别成了b,8,17。

创建块设备文件
#mknod  abc   b  8  1
[root@localhost ~]#
[root@localhost ~]# mknod abc b 8 1
[root@localhost ~]# ll abc
brw-r--r-- 1 root root 8, 1 Mar  3 17:23 abc
[root@localhost ~]#

设备节点示例
块设备
/dev/hda    /dev/hdc   IDE硬盘,光驱
/dev/sda    /dev/sdb   SCSI,SATA或者是USB的存储设备
/dev/md0   /dev/md1  软件RAID

字符设备
/dev/tty(0-6)          虚拟控制台
/dev/null    /dev/zero  软件设备
/dev/random /dev/urandom随即数字

Udev机制
Udev可管理保存在/dev/目录下的文件,
文件只有在接入相应的设备后才会生成。
文件在设备拔出后自动删除。
可以在/etc/udev/rules.d/下面去定义策略。
在这个目录下面去创建一个文件,以.rules结尾。
在这个文件中定义U盘的唯一性。
[root@localhost rules.d]#
[root@localhost rules.d]# cat 99-myusb.rules
BUS="usb",SYSFS{serial}=="21185601958E7211",NAME="myusb"
[root@localhost rules.d]#
这个就是我定义的,当一个USB的设备,并且对应这个序列号,系统就识别这个USB设备的名字叫做myusb。
可以使用下面这条命令来查看U盘的信息
# udevinfo -a -p /block/sdb

我们可以使用hal-device-manager这个图像化界面来查看计算机的状态。

至此,linux内核服务的相关内容就介绍完了,希望对大家有所帮助。


    
[2]RHCE学习笔记-RHEL5.4配置磁盘配额
    来源: 互联网  发布时间: 2013-12-24

本文介绍linux下关于磁盘配额的相关内容,供大家学习参考。

磁盘配额介绍
目前的磁盘配额只可以针对单一的文件系统来进行操作,也就是每一个分区来做磁盘配额。在linux下面可以针对ext2和ext3的文件系统来做磁盘配额,磁盘配额可以对用户和组来做,可以针对文件的大小和数量做磁盘配置,还可以对用户进行软限制和硬限制。

配置磁盘配额
第一步,在分区挂载选项上添加参数。
在磁盘配额的开始,我们要对需要做磁盘配额的分区在挂载选项上面添加两个参数,usrquota和grpquota这个两个参数,
Usrquota     代表可以对用户做磁盘配额
Grpquota    代表可以对组来做磁盘配额
下面开始编辑/etc/fstab这个文件添加参数。
/dev/sda8       /mnt          ext3    defaults,usrquota,grpquota    0  0
 
已经在/etc/fstab这个文件里面添加了参数,但是并不可以立即生效,敲入一条命令让其立即生效。
[root@localhost ~]#
[root@localhost ~]# mount -o remount /dev/sda8
[root@localhost ~]#
[root@localhost ~]# mount |grep /dev/sda8
/dev/sda8 on /mnt type ext3 (rw,usrquota,grpquota)
[root@localhost ~]#

通过mount命令我们也可以看到,usrquota和grpqouta这两个磁盘配额参数也已经添加成功了。

第二步,生成磁盘配额数据库。
[root@localhost ~]#
[root@localhost ~]# df -h
Filesystem            Size       Used       Avail     Use%     Mounted on
/dev/sda3             3.9G       2.6G     1.2G      70%          /
/dev/sda6             494M    11M    458M     3%           /home
/dev/sda2             9.5G       2.9G     6.2G     32%         /var
/dev/sda1             99M      14M      81M       15%         /boot
tmpfs                   188M     0           188M    0%           /dev/shm
/dev/hdc               2.8G     2.8G     0            100%       /media/RHEL_5.4 i386 DVD
/dev/sda8             471M    11M     437M    3%          /mnt
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
lost+found
[root@localhost mnt]#
通过df –h命令可以查看到我们的/dev/sda8这个分区是被挂载到/mnt下面的,我们进入了/mnt,现在里面什么东西也没有。

现在开始生成磁盘配额数据库
#quotacheck  -cumg  /dev/sda7
[root@localhost ~]# quotacheck -cumg  /dev/sda8
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ll
total 24
-rw------- 1 root root  6144 Feb 25 21:52 aquota.group
-rw------- 1 root root  6144 Feb 25 21:52 aquota.user
drwx------ 2 root root 12288 Feb 25 21:39 lost+found
现在可以看到,生成磁盘配额数据库后,在/mnt下面就自动的产生了两个文件,aquota.user和aquota.group这个两个文件。这两个文件就是用来存放所有磁盘配额的信息。

第三步,启用磁盘配额。
#quotaon  /dev/sda8

启动磁盘配额功能,
[root@localhost ~]# quotaon /dev/sda8
[root@localhost ~]#

当然我们也可以关闭磁盘配额的功能。
[root@localhost ~]#
[root@localhost ~]# quotaoff /dev/sda8

第四步,编辑磁盘配额。
# edquota user1
现在我们系统中有个用户user1,我们就针对这个用户来做磁盘配额。
[root@localhost ~]#
[root@localhost ~]# edquota user1
Disk quotas for user user1 (uid 500):
  Filesystem    blocks      soft       hard     inodes     soft     hard
  /dev/sda8        0             0            0           0            0         0

参数意义
Filesystem     代表为那个分区在做磁盘配额
Blocks          文件的大小
Soft              软限制文件大小
Hard             硬限制文件大小
Inodes          文件的数量
Soft              软限制文件数量
Hard            硬限制文件数量

有一点需要注意的是,如果在blocks这项里面已经默认就有了文件大小,那么我们在做文件大小磁盘配额限制的时候,一定要加上这个默认的文件大小,比如说在blocks这项里面已经有了20K大小的文件,那么我们在做磁盘配额限制用户只可以写如50K的数据,那么就必须加上那个默认的文件大小,也就是70K。inodes的选项也一样,在做限制的时候也需要加上默认的inodes的文件数量。

关于软限制和硬限制

软限制代表当用户写入的数据达到软限制的规定,就进行警告,但是还是可以写入数据的。
硬限制代表当用户写入的数据达到硬限制的规定,那么用户就不可以在磁盘写入数据了,强制性的。
现在我们来做一个试验,允许user1在/dev/sda8里面只可以写入100K的数据,当user1在/dev/sda8中写入的数据到达80K就进行警告。
[root@localhost ~]#
[root@localhost ~]# edquota user1
Disk quotas for user user1 (uid 500):
  Filesystem    blocks    soft       hard     inodes     soft     hard
  /dev/sda8        0         80         100        0           0          0

我们将user1的软限制设为80K,硬限制设为100K了。
现在我们来测试一下,磁盘配额有没有生效。可以看到idoes这项都是0,如果是0就表示这项不生效。
为了试验效果,首先将/mnt的权限全部开放。
[root@localhost ~]# chmod 777 /mnt/
[root@localhost ~]#

现在我们切换到user1用户,然后使用dd工具创建一个80K的文件。
[root@localhost ~]# su - user1
[user1@localhost ~]$
[user1@localhost ~]$ cd /mnt/
[user1@localhost mnt]$ ls
aquota.group  aquota.user  lost+found
[user1@localhost mnt]$ dd if=/dev/zero of=file bs=1K count=80
sda8: warning, user block quota exceeded.
80+0 records in
80+0 records out
81920 bytes (82 kB) copied, 0.00277285 seconds, 29.5 MB/s
[user1@localhost mnt]$ ls
aquota.group  aquota.user  file  lost+found
[user1@localhost mnt]$
可以看到,我们通过dd工具创建了一个文件名为file的80K文件,但是给了我们一个警告,是因为user1达到了软限制,所以系统给了一个警告。

我们已经往/dev/sda8里面写入了80K的数据,如果我们在写入20K的数据,那么会发生什么事情呢。
[user1@localhost mnt]$
[user1@localhost mnt]$ dd if=/dev/zero of=file1 bs=1k count=20
sda8: write failed, user block limit reached.
dd: writing `file1': Disk quota exceeded
19+0 records in
18+0 records out
18432 bytes (18 kB) copied, 0.00365465 seconds, 5.0 MB/s
[user1@localhost mnt]$ ll -h
total 126K
-rw------- 1 root  root  7.0K Feb 25 22:36 aquota.group
-rw------- 1 root  root  7.0K Feb 25 22:33 aquota.user
-rw-rw-r-- 1 user1 user1  80K Feb 25 22:36 file
-rw-rw-r-- 1 user1 user1  18K Feb 25 22:41 file1
drwx------ 2 root  root   12K Feb 25 21:39 lost+found
[user1@localhost mnt]$
可以看到,当在往/dev/sda8里面写入20K的数据的时候,系统提示我们写入失败,这就表明我们的磁盘配额就做成功了。当然我们的file1这个文件最后还是被创建了。但是这个文件只有18K,是不完整的。

刚才我们只是对用户做了磁盘配额,如果是组呢,组的磁盘配额配置和用户的配置方法一样,如果对组做限制,那么这个组里面的所有成员就都会受到磁盘配额的影响。

对组做磁盘配额

#Edquota  -g  user1
磁盘配额的基本配置到这里就基本完成了。

如果我们需要给多个用户做磁盘配额的话,一个一个指定又太麻烦了,有一个方法可以减轻负担。
# Edquota  -p  user1 user2
这个就是将user1里面的磁盘配额策略复制给user2
[root@localhost ~]#
[root@localhost ~]# edquota user1
Disk quotas for user user1 (uid 500):
  Filesystem  blocks       soft       hard     inodes     soft     hard
  /dev/sda8    100           80        100       2           0        0
 
这个就是user1磁盘配额的策略信息
[root@localhost ~]# edquota -p user1 user2
[root@localhost ~]# edquota user2
Disk quotas for user user2 (uid 501):
  Filesystem     blocks       soft       hard     inodes     soft     hard
  /dev/sda8       0               80        100        0          0        0
可以看到,user1的策略信息就被自动的复制给user2了。

查看磁盘配额的信息
# Edquota  -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
  /dev/sda8                 7days                  7days
这个里面主要强制定义用户磁盘过期的时间
Block grace period    7days
这个是代表当用户达到了磁盘配额文件大小的软限制,还没有达到硬限制,那么在七天后,用户还是没有做修改,还是处于警告范围,那么就算用户没有达到硬限制,那么用户也不可以在往里面写入数据了。
Inode grace period    7days
这个是磁盘配额文件数量的过期时间限制,和Block grace period的一样,也是七天。
当然这些过期时间也是可以修改的。
如果只想修改每个用户的过期时间,可以用这条命令
Edquota  -T  user1(username)

查看磁盘配额的策略设置
Quota  user1(username)
[root@localhost ~]# quota user1
Disk quotas for user user1 (uid 500):
 Filesystem blocks   quota   limit    grace   files   quota   limit   grace
 /dev/sda8  100*    80        100                2          0        0   
[root@localhost ~]#
这个命令只可以查询每一个用户

如果想查询系统中所有用户的磁盘配额策略,使用这条命令
#repquora  -a
[root@localhost ~]# repquota -a
*** Report for user quotas on device /dev/sda8
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --     10544   0       0                 4     0     0     
user1     +-   100      80     100  6days   2     0     0     
user2     --    1          80     100              1     0     0     
user3     --    1          80     100              1     0     0      
[root@localhost ~]#
这条命令可以查看系统中所有用户的磁盘配额的信息。
linux下有关磁盘配额的内容就介绍这里,希望对大家有所帮助。


    
[3]RHCE学习笔记-RHEL5.4文件ACL权限
    来源: 互联网  发布时间: 2013-12-24

本文介绍linux下文件ACL权限的相关内容,供大家学习参考。

我们知道,在linux系统中,我们将访问文件的用户分为三类,user,group,other。

如果系统中某个用户想对某个文件有写入的权限,但是该用户是属于other,如果是这样,就只能够开放other的权限。但是一旦开放other的权限,那么所有人就对该文件有写入的权限了。文件的ACL权限就很好的解决了这个问题,它可以设置一个特定文件的特定权限。

下面来具体的设置文件ACL权限。

如果想拥有文件ACL的权限,就必须为文件系统添加一个ACL属性。
[root@localhost ~]#
[root@localhost ~]# mount -o remount,acl /dev/sda9
[root@localhost ~]#
[root@localhost ~]# mount |  grep /dev/sda9
/dev/sda9 on /mnt type ext3 (rw,acl)
[root@localhost ~]#
[root@localhost ~]#
可以看到,/dev/sda9已经有了ACL属性。

现在我们新建一个redhat目录。
[root@localhost ~]#
[root@localhost ~]# cd /mnt/
[root@localhost mnt]#
[root@localhost mnt]# mkdir redhat
[root@localhost mnt]#
[root@localhost mnt]# ll -ld /redhat/
drwxr-xr-x 2 root root 4096 Feb 26 21:56 /redhat/
[root@localhost mnt]#
可以看到,这个redhat目录的权限为755,这个目录的拥有人和拥有组都是root,也就是说其他人对这个目录是没有写入的权限的。

[root@localhost ~]# su - user1
[user1@localhost ~]$
[user1@localhost ~]$ cd /mnt/
[user1@localhost mnt]$ ls
lost+found  redhat
[user1@localhost mnt]$ cd redhat/
[user1@localhost redhat]$ touch file
touch: cannot touch `file': Permission denied
[user1@localhost redhat]$ ls
[user1@localhost redhat]$
可以看到,user1是other,user1对redhat这个目录果然没有写入的权限。

如果我们想要给user1对这个目录有一个rwx的权限。除了开放other的权限,我们还可以使用文件的ACL功能。
现在我们就给user1对该目录设置ACL权限。
#setfacl   -m   u:user1:rwx  /mnt/redhat/
-m         修改    
u           用户
user1     指定用户
rwx       指定权限
/redhat  指定目录
[root@localhost ~]#
[root@localhost ~]# cd /mnt/
[root@localhost mnt]#
[root@localhost mnt]# setfacl -m u:user1:rwx /mnt/redhat/
[root@localhost mnt]#
[root@localhost mnt]# ll
total 14
drwx------  2 root root 12288 Feb 26 21:53 lost+found
drwxrwxr-x+ 2 root root  1024 Feb 26 22:11 redhat
[root@localhost mnt]#

我们已经给redhat目录设置了ACL权限,通过ll可以看到,redhat目录的权限位后面多了一个加号,这个加号就代表不要看表面的权限,说明还有更深的权限隐藏在里面。

如何去查看这个文件的具体权限呢
#Getfacl  /mnt/redhat
[root@localhost mnt]#
[root@localhost mnt]# getfacl /mnt/redhat
getfacl: Removing leading '/' from absolute path names
# file: mnt/redhat
# owner: root
# group: root
user::rwx
user:user1:rwx
group::r-x
mask::rwx
other::r-x

[root@localhost mnt]#
我们可以看到文件的拥有人和拥有组都是root,user的权限是rwx,group的权限也r-x,other的权限是r-x。而且最重要的是user:user1:rwx,也就是user1这个用户对该目录也有rwx的权限。Mask代表用户的实际权限。

现在我们利用user1到redhat目录里面尝试去写入。
[root@localhost ~]#
[root@localhost ~]# su - user1
[user1@localhost ~]$
[user1@localhost ~]$ cd /mnt/redhat/
[user1@localhost redhat]$
[user1@localhost redhat]$ mkdir file
[user1@localhost redhat]$ ls
file
[user1@localhost redhat]$
可以看到,刚才我们是不可以往里面写入的,但是现在我们就写入成功了。

刚才我们对user1这个用户做了文件的ACL权限。
现在我们对组来做文件的ACL权限。
#setfacl  -m  g:user1:rwx   /mnt/redhat/
[root@localhost ~]#
[root@localhost ~]# setfacl -m g:user1:rwx /mnt/redhat/
[root@localhost ~]#
[root@localhost ~]# getfacl /mnt/redhat/
getfacl: Removing leading '/' from absolute path names
# file: mnt/redhat
# owner: root
# group: root
user::rwx
user:user1:rwx
group::r-x
group:user1:rwx
mask::rwx
other::r-x
[root@localhost ~]#
现在user1这个组里面的成员对/mnt/redhat目录也有rwx权限了。

下面还有个关于文件ACL功能的问题
刚才我们用user1在/mnt/redhat目录下面创建了一个file的文件夹,说明我们对redhat这个目录有rwx的权限,但是如果在redhat目录下面还有一个文件夹,我们是否对它有rwx的权限呢。试下,
[root@localhost ~]#
[root@localhost ~]# cd /mnt/redhat/
[root@localhost redhat]# ls
file
[root@localhost redhat]# mkdir file1
[root@localhost redhat]# cd
[root@localhost ~]#
[root@localhost ~]# su - user1
[user1@localhost ~]$ cd /mnt/redhat/
[user1@localhost redhat]$ cd file1
[user1@localhost file1]$ touch 1.txt
touch: cannot touch `1.txt': Permission denied
[user1@localhost file1]$
很显然,我们对redhat目录下面的子目录是没有rwx的权限的。也就是说文件的ACL功能只对当前目录生效,并不可以对子目录生效。

看下这条命令的作用,
# setfacl -m d:u:user2:rwx /mnt/redhat/
[root@localhost ~]#
[root@localhost ~]# setfacl -m d:u:user2:rwx /mnt/redhat/
[root@localhost ~]#
这个时候,我们同样给user2一个rwx的权限。
[root@localhost ~]#
[root@localhost ~]# su - user2
[user2@localhost ~]$
[user2@localhost ~]$ cd /mnt/redhat/
[user2@localhost redhat]$
[user2@localhost redhat]$ mkdir file100
mkdir: cannot create directory `file100': Permission denied
[user2@localhost redhat]$
但是现在我们不可以往/mnt/redhat目录里面写入数据,就是因为多了一个d,这个d代表default。

我们现在来看看它的用处是什么。
[root@localhost ~]#
[root@localhost ~]# cd /mnt/redhat/
[root@localhost redhat]# mkdir test
[root@localhost redhat]# ll
total 4
drwxrwxr-x  2 user1 user1 1024 Feb 26 22:44  file
drwxr-xr-x   2 root  root  1024 Feb 26 22:46 file1
drwxrwxr-x+ 2 root  root  1024 Feb 26 22:58 test
[root@localhost redhat]#
现在可以看到,test这个目录权限位上面多了一个加号,看下它的具体权限。

[root@localhost redhat]#
[root@localhost redhat]# getfacl test/
# file: test
# owner: root
# group: root
user::rwx
user:user2:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:user2:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@localhost redhat]#
可以看到,user2这个用户对该目录有rwx的权限。尝试往test目录里面写入数据。

[root@localhost ~]#
[root@localhost ~]# su - user2
[user2@localhost ~]$
[user2@localhost ~]$ cd /mnt/redhat/
[user2@localhost redhat]$
[user2@localhost redhat]$ cd test/
[user2@localhost test]$
[user2@localhost test]$ touch 1.txt
[user2@localhost test]$ ls
1.txt
[user2@localhost test]$

写入成功了,刚才我们只是对/redhat目录做了文件的ACL功能,为什么现在user2对其子目录会有rwx的权限呢,这个就是因为刚才d参数的含义,就是递归的含义,对当前目录无效果,对子目录才有效果。

不管是任何用户向/mnt/redhat目录建立的数据,user2都会继承它们的权限。
这条命令只可以针对目录来做ACL权限。不可以对文件做,因为对文件做没有意义。文件不可能有下一级目录的。
如果文件的拥有人和拥有组和文件的ACL权限发生冲突的时候,以拥有人和拥有组为准,其实文件的ACL功能只对other人有意义。

如何移除文件的ACL权限呢
#setfacl -k /mnt/redhat/
移除文件的默认ACL属性

#setfacl –b /mnt/redhat
移除文件的所有ACL权限

#setfacl –x u:user1 /mnt/redhat
移除user1对文件的ACL权限

当我们在复制文件的时候,如果使用-p的参数,也一样可以将文件的ACL权限给复制过去。
 
至此,有关linux下文件ACL权限的内容就介绍完了,希望对大家有所帮助。


    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3