Linux文件权限概要
linux是多用户操作系统,自然会涉及到文件权限的管理和操作;在linux的世界里,一切皆文件;为了便于说明此文中文件的含义局限在普通的单个文件,如文本文件、可执行文件等。
Linux下用户与文件或文件夹的关系
要确定一个用户对某个文件或文件夹是否具有相应的操作权限,先要明确该用户与文件或文件夹之间的关系。在 linux系统中,定义了如下三种关系:
-
文件或文件夹的所有者 (
owner
):文件或文件夹的拥有者,开始创建文件或文件夹时为创建者。 -
组 (
group
):文件或文件夹所属的组, 开始创建文件或文件夹时为创建者的所属的组。 -
其他人 (
other
):除了文件或文件夹的所有者和文件或文件夹所属的组的其他成员,剩下的 linux 的用户。
在linux下的文件和文件夹都有读取(r)
、写入(w)
、执行(x)
的操作,上面描述的每种关系的用户分别都可以赋予这些操作权限。
Linux的文件操作权限
权限 | 简写 | 对普通文件的作用 | 对文件夹的作用 |
---|---|---|---|
读取 | r | 查看文件内容 | 列出文件夹中的文件(ls) |
写入 | w | 修改文件内容 | 在文件夹中删除、添加或重命名文件(夹) |
执行 | x | 文件可以作为程序执行 | cd 到文件夹 |
在linux使用ls -la
命令可以查看文件夹内文件的属性,见下图中的命令执行后的结果:
上述命令执行的结果中,我已使用方框和淡色线条将要分析的目标分成了一个12行9列的表格,此表格的12行具有相似性,仅分析一行,9列当中每一列都有不同的含义,逐一分析。
-
第一列表示了该文件或文件夹与
owner
、group
、other
之间的关系; -
第二列表示文件夹内文件和文件夹的总数量(包括文件夹本身);
- 第三列表示文件夹或文件的拥有者;
- 第四列表示文件或文件夹的所属的组;
-
第五列表示文件或文件夹的大小;
-
第六、七、八列表示文件或文件夹最后被修改的时间,分别对应月、日、时;
-
第九列文件或文件夹的名字。
以倒数第2行为例进行说明,该行第1列值为drwxr-xr-x
,总共10个字符,除去第一个字符外,后面9个字符每3个组分别表示所有者权限、组权限、其他用户权限;本例owner权限为rwx
,group权限为r-x
,other权限为r-x
;而第一个字符依据字符的不同具有不同的含义,具体为:-
(常规文件)、d
(目录)、l
(符号链接)、c
(字符特殊设备)、b
(模块特殊设备)、p
(FIFO)、s
(套接字)。
特殊权限
在 linux 系统中还有三种与用户身份无关的三个文件权限属性,即SUID
、SGID
、Sticky
SUID
SUID是Set User ID
的简写。该属性只对有执行权限的文件有效,对目录无效。执行具有SUID权限的程序时,引发的进程的所有者是程序文件的所有者,而不是启动程序的用户(除非二者是同一个人)。比如,如果一个程序的所有者是root且具有SUID属性,一个普通用户执行此程序时,如同root执行此程序一样。(请注意该属性对Shell脚本程序无效)该属性为一些特殊程序(如lpr)的启动带来了方便。但有时也带来了安全隐患:比如一个具有SUID属性的程序如果在执行时运行了一个shell,那么用户可以籍此得到系统的最高权限。SUID可用s表示。
SGID
SGID是Set Group ID
的简写。对于可执行文件,SGID与SUID类似,引发的进程的所有组是程序文件所属的组。对于目录,SGID属性会使目录中新建文件的所属组与该目录相同。SGID也可以用s表示。
Sticky
仅对目录有效。带sticky属性的目录下的文件或目录可以被其拥有者删除或改名。常利用sticky属性创建这样的目录:组用户可以在此目录中创建新文件、修改文件内容,但只有文件所有者才能对自己的文件进行删除或改名。如系统中的/tmp文件夹。在属性字符串中,通常用t表示。
Linux文件权限管理
chmod命令
命令原型:chmod [-cfvR] [--help] [--version] mode file...
-c
: 若该档案权限确实已经更改,才显示其更改动作
-f
: 若该档案权限无法被更改也不要显示错误讯息
-v
: 显示权限变更的详细资料
-R
: 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help
: 显示辅助说明
--version
: 显示版本
在linux系统中,可以使用chmod
命令来修改文件或文件夹对应用户的操作权限,chmod
命令也有两种方式修改,一种是使用代表相应操作权限的字母简写表示,另一种是使用代表相应操作权限的数字表示,这两种权限表示方式也就是上述命令原型中的mode
部分。
chmod ugoa[rwxst]
使用字符表示权限法
第一个字符是u
、g
、 o
或a
中的一个(分别表示用户、组、其他人和所有人)。其后还可以更随添加(+)、删除(-)或设置(=)各种不同的权限:r
可读、w
可写、x
可执行、s
SUID或SGID特殊权限、t
Sticky特殊权限。
使用八进制数表示权限法
chmod命令中权限的描述和表示方法也可以用一个四位八进制数来表示,其中最高位表示特殊权限,随后的三位依次是所有者权限、组权限和其他人权限。每一个八进制位的权限数值是文件具有的相应权限所对应的数值之后。
数值权限的算法存在一个二进制转八进制的过程,比如rw-其实就是110的二进制,也就是:0*2^0 + 1*2^1 + 1*2^2 = 6。有相应的权限就用1表示,没有相应的权限就用0表示。数值权限表示法不能用于表示特殊权限。
例如:0755=rwxr-xr-x=0(4+2+1)(4+0+1)(4+0+1)
chmod 0755 /var/www
将文件夹的属主设置成具有读写可执行权限,组用户以及其他用户设置成可读可执行不可写。
- r=4,w=2,x=1;即r---只读则属性为4+0+0=4;若-w-只写则属性为0+2+0=2;若--x只执行则属性为0+0+1=1;
- 若要rwx属性则4+2+1=7;
- 若要rw-属性则4+2=6;
- 若要r-x属性则4+1=5
chown命令
命令原型:chown [-cfhvR] [--help] [--version] user[:group] file...
user
: 新的档案拥有者的使用者ID
group
: 新的档案拥有者的使用者群体(group)
-c
或-change
:作用与-v相似,但只传回修改的部分
-f
或–quiet
或–silent
:不显示错误信息
-h
或–no-dereference
:只对符号链接的文件做修改,而不更改其他任何相关文件
-R
或-recursive
:递归处理,将指定目录下的所有文件及子目录一并处理
-v
或–verbose
:显示指令执行过程
–dereference
:作用和-h刚好相反
–help
:显示在线说明
–reference=<参考文件或目录>
:把指定文件或目录的所有者与所属组,统统设置成和参考文件或目录的所有者与所属组相同
–version
:显示版本信息
使用chown
可以修改文件或文件夹的拥有者和所属的组。
###修改文件的属主和组 chown nginx:nginx /var/www/index.php ##修改文件夹下的所有文件的属主和组 chown -R nginx:nginx /var/www/
adduser命令和useradd命令
adduser命令用来建立用户帐号和创建用户的起始目录;在RedHat和CentOS系列中,adduser和useradd没有区别;而在某些别的Linux发行版中又有区别,两个命令的细致区别就不区分了。参考groupadd命令的格式,最好忘掉adduser命令,而记忆useradd命令。
命令原型:useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name
-c
:加上备注文字,备注文字保存在passwd的备注栏中;
-d
:指定用户登入时的家目录;
-D
:变更预设值;
-e
:指定账号的有效期限,缺省表示永久有效,格式为YYYY-MM-DD;
-f
:指定在密码过期后多少天即关闭该账号;
-g
:指定用户所属的群组;
-G
:指定用户所属的附加群组;
-m
:自动建立用户的登入目录;
-M
:不要自动建立用户的登入目录;
-n
:取消建立以用户名称为名的群组;
-r
:建立系统账号;
-s
:指定用户登入后所使用的shell;
-u
:指定用户ID号。
groupadd命令
命令原型:groupadd [-g gid [-o]] [-r] [-f] group
-f
或--force
:加入此参数后若新建的组已存在不会出现任何错误提示--外表看起来就是创建成功,如果加入了-g选项且指定的GID已存在的话,此命令将不会执行。
-g
或--gid GID
:指定新建组的GID值;
-h
或--help
:显示命令的帮助文档;
-o
或--non-unique
:创建组时允许组id重复;
-p
或--password PASSWORD
:设定该组的密码;
-r
或--system
:指定创建的是一个系统组。
userdel命令
命令原型:userdel [fhrZ] username
:删除用户;
-f
, --force
:删除掉该用户目录下的所有文件,及时这些文件的宿主不是这个用户;
-h
, --help
:显示帮助文档;
-r
, --remove
:删除该用户的家目录和脱机邮件;
-Z
, --selinux-user
:从SELINUX的安全用户表中删除该用户,与SELINUX有关;
##userdel最常用的也就-r参数 userdel -r nginx
groupdel命令
命令原型:groupdel groupname
:删除用户组;
这个命令似乎没参数,连-h的帮助参数都木有。
倘若需删除的群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
woc,你也叫静静←_←