赞
踩
命令ls,用于列出(list)各文件。
默认仅显示非隐藏文件文件名。
各选项:
对于目录文件
w:表示更改目录结构列表的权限,即:
综上,“w”权限对目录来讲可理解为,变动该目录下的文件名列表的权限。
x:表示能否切换到该目录作为当前工作目录,即:
注:
1、目录开放“x”权限时,一般也要开放“r”权限。否则虽然可以“cd”至该目录,但不能“ls”(所以更不能“ls -l”)。
2、用户在某目录下创建、删除、剪切文件(这些操作属于该目录的“w”权限),或对该目录下的文件进行复制等操作时,若仅有“w”权限而无“x”权限,则仍会提示无权限操作,需同时对该目录有“x”权限才可5。
从上图也可看出,若开放目录的“w”权限给“其他用户(others)”,系统会为目录名着背景色。
命令chmod,用于修改文件权限。仅root和文件属主可修改文件权限,两种方式:
使用8进制数修改
文件的读、写、执行权限共9位(每位取值0或1),每3位一组分别代表属主(u)、属组用户(g)、其他用户(o)的读、写、执行权限,共3组。每组取值范围是0到7(- - - 到rwx),可视作3个8进制数。所以修改的权限可用3个8进制数表示:
如上,可使用3位8进制数来修改属主、属组用户、其他用户(上图显示的是4位8进制数,第1位是用来修改特殊权限的,如无需修改特殊权限,可省略此位)。使用“-R”选项可一次修改目录及其下所有文件的权限。
使用符号修改
修改谁的权限 | 添加、减去、指定 | 权限 | ||
---|---|---|---|---|
chmod | u、g、o、a | +、-、= | r、w、x | 文件 |
如上所示,可修改属主(u)、属组用户(g)、其他用户(o)或全部(a,包含ugo)用户的“rwx”权限,修改方式包括添加、删除、指定。
例如使某文件的属主权限添加“x”权限,其他用户去掉“r”权限:
没有指定改变属组用户的权限,故属组用户权限不会变化。
又如,不改变其他权限,使所有人都有文件的“x”权限:
默认权限计算
命令umask,用于显示、设置遮罩码(仅在当前shell生效,)
SUID权限
Set UID,简称SUID。该权限仅对二进制文件有效6,且仅在该文件执行过程中生效。当文件具有SUID权限时,文件属主的“x”权限位置变为“s”。
效果:若文件具有SUID权限,且执行者对于该文件有“x”权限,当文件被其执行时,执行者将具有该文件属主的权限。
以命令“passwd”为例,它具有SUID权限,可以看到具有SUID的文件会被系统着背景色。
命令“passwd”可以修改用户的密码,即改变了文件“/etc/shadow”中的内容,该文件权限如下:
显然只有root可以读取和强制写入7该文件。
那么普通用户在使用命令“passwd”修改密码时,为何可修改文件“/etc/shadow”中的内容?
因为文件“/usr/bin/passwd”有SUID权限,普通用户又对其有执行权限。所以普通用户在执行“passwd”的过程中(SUID仅在执行过程中生效),会具有文件“/usr/bin/passwd”属主(即root)的权限,所以可修改文件“/etc/shadow”的内容。
SGID权限
Set GID,简称SGID。文件具有此权限时,属组用户的“x”权限位置变为“s”。SGID仅对于二进制文件和目录有效,二者具有不同的意义:
对于目录
当一目录具有SGID权限时,若用户对该目录有“r、x”权限(可“cd”至该目录),则用户“cd”至该目录后,用户的有效用户组不会变化,但在这个目录中创建的文件的属组,则不是用户的当前有效用户组,而是该目录的属组。如下所示:
可以看到用户user1在家目录下创建的文件的属组是user1,而在目录ant下创建的文件test1的属组是目录ant的属组test_group。
该功能常用于共同编辑文件。比如用户user1、user2均属于用户组test_group,目录bag的属组应为test_group,且属组用户权限开放为“rwx”。用户user1、user2在同一目录bag下共同开发项目8。
如上,若目录“bag”没有SGID权限,则user1、user2虽然都可以在其下创建文件,但属组用户仍然是各自的当前有效用户组,所以用户user2对于user1创建的文件“test1_bag”为其他用户。普通用户的遮罩码为0002,所以文件“test_bag”对user2仅开放“r”权限。
因为普通用户的遮罩码为0002,所以user1创建的文件的属组权限是有“w”权限的。所以如果目录“bag”开放SGID权限,则文件“test1_bag”的属组就会是“test_group”,从而使user2对其有“w”权限。二者就可互相修改对方创建的文件了9。
SBIT权限
Sticky Bit,简称SBIT。仅对目录有效。若目录有此权限,目录的其他用户的“x”权限位置变为“t”。
效果:具有SBIT权限的目录A,其中有文件B,则仅目录A的属主、文件B的属主和root可以对其重命名、剪切、删除等。
如上,目录有SBIT权限时也会着背景色。目录car具有SBIT权限。用户user2在该目录创建了文件“by_user2”,但user1不能删除、重命名,即使目录car对所有用户都开放了“w”权限。
修改文件的特殊权限
仍使用命令“chmod”,同样有8进制数和符号两种方式:
使用符号修改
修改谁的权限 | 添加、减去、指定 | 权限 | ||
---|---|---|---|---|
chmod | u、g、o、a | +、-、= | s、t | 文件 |
如下所示,使用符号修改文件的特殊权限
特殊情况:
如上,文件开放SUID、SGID权限,其属主、属组成员的“x”权限位置会变为“s”,但若其本就没开放属主或属组成员的“x”权限,则SUID、SGID会用“S”表示。
如上,目录开放SBIT权限,其他用户的“x”权限位置变为“t”,但若其他用户的“x”权限本就未开放,则使用“T”表示SBIT。SBIT的效果不受影响。
文件隐藏权限有多个,对于数据安全较为重要。
命令chattr,用于修改文件隐藏权限。
两个常用权限
facl:file access control list,文件访问控制列表。
对于普通用户来说,他所创建的文件,默认其他用户都是没有w和x权限的。如果想开放某个其他用户对其创建的文件有相关权限,就必须开放所有其他用户的权限。
facl机制作为文件的额外的赋权机制(即除了u、g、o方式的权限),可解决这个问题。
命令setfacl可设置某用户或组对指定文件有何权限,选项“-m”用于赋予权限,选项“-x”用于收回权限。
命令getfacl可查看指定文件对哪些用户和组开放了权限。
- [root@localhost tmp]# setfacl -m u:hadoop:w by_root
- [root@localhost tmp]# getfacl by_root
- # file: by_root
- # owner: root
- # group: root
- user::rw-
- user:hadoop:-w-
- group::r--
- mask::rw-
- other::r--
-
- # 显示文件权限的结果中,显示用户hadoop对该文件有w权限。
-
- [root@localhost tmp]# ll by_root
- -rw-rw-r--+ 1 root root 0 Aug 27 06:59 by_root
-
- # 文件的详细信息中,权限位的右侧也会出现符号“+”,表示该文件有额外开放的权限。
也可对指定用户组开放权限,比如仍对文件by_root,令用户组user1对其有rw权限:
- [root@localhost tmp]# setfacl -m g:user1:rw by_root
- [root@localhost tmp]# getfacl by_root
- # file: by_root
- # owner: root
- # group: root
- user::rw-
- user:hadoop:-w-
- group::r--
- group:user1:rw-
- mask::rw-
- other::r--
撤销上述赋予的权限:
- [root@localhost tmp]# setfacl -x u:hadoop by_root
- [root@localhost tmp]# setfacl -x g:user1 by_root
- [root@localhost tmp]# getfacl by_root
- # file: by_root
- # owner: root
- # group: root
- user::rw-
- group::r--
- mask::r-- # mask指什么,哪位高手给解释下
- other::r--
一个用户发起的进程访问(或写、执行)某文件,系统检查其权限过程如下:
比如,在文件by_root的访问控制列表中,设置用户gentoo无任何权限。可验证上述的文件权限检查次序:
- [root@localhost tmp]$ls -l by_root
- -rw-r--r--. 1 root root 0 Aug 27 10:06 by_root # 用户gentoo作为该文件的其他用户是有r权限的。
- [root@localhost tmp]$setfacl -m u:gentoo:--- by_root # 访问控制列表中设置用户gentoo对该文件无任何权限
- [root@localhost tmp]$su - gentoo
- [gentoo@localhost ~]$cat /tmp/by_root
- cat: /tmp/by_root: Permission denied #读取该文件提示无权限,可以看出是文件访问控制列表生效,而没有使用文件的其他用户权限。
管理员命令chgrp
用于修改文件属组,修改的属组必须是“/etc/group”中已存在的。
管理员命令chown
用于修改用户属主、属组。修改的属主、属组必须是“/etc/passwd、/etc/group”中已存在的。
默认修改属主,使用格式:“chown user:group file”13可同时修改属主属组,该格式若不写用户,则仅修改属组。如下所示:
文件时间戳包括:modification time(mtime)、status time(ctime)、access time(atime)。
命令“touch”,用于更新文件的时间戳为现在的时刻(若文件不存在,则用于创建文件)。
选项“-d”:同“–date=”,表示更改为指定日期,而非当前日期。
由上述操作也可看出,ctime是无法被指定的14,它被更新成了当前时间。
日期格式也可为“YYYY/MM/DD、YYYYMMDD”。
“-d”选项也可将atime、mtime更新为当前时间的某段时间前,不论文件原来的时间是多少:
注意上述操作是把atime、mtime更新为当前时间的十年前,而非文件原atime、mtime的十年前(虽然这好像更合逻辑)。
(完)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。