@H_
262_20@
一、前言
@H_
262_20@ Linux下所有资源、设备均被视作
文件来操作,而
文件权限则是决定
用户可各
文件操作的范围,无论是平时使用Linux,还是写程序均涉及这方面。以下为个人学习的整理,供以后查阅。
@H_
262_20@
@H_
262_20@
二、 三种权限
@H_
262_20@
1. 普通权限
权限 |
文件 |
目录 |
r,读权限 |
查看文件内容 |
列出其子目录结构信息(就是可执行ls 目录) |
w,写权限 |
配合r权限,则可对文件进行修改和删除 |
配合x权限就可以添加、删除和移动内部文件,而删除目录和复制目录内文件则需要配合r和x权限。 |
x,执行权限 |
配合r权限,可执行的权限 |
可以进入该目录和对其下文件作操作(就是可执行cd 目录) |
@H_
262_20@
2. 特殊权限
@H_
262_20@
场景1:用户A在
调用程序B时,且程序B需要
修改文件C,而
用户A无权
修改文件C,那么程序B同样将被拒绝
修改文件C。
@H_
262_20@ 原因:程序将使用
调用者(就是
用户A)的
用户标识去对系统作操作,程序的权限与
调用者的权限一致。
@H_
262_20@ 需要:让程序使用与
调用者无关的
用户或
用户组标识,那么任何
调用者执行该程序时均无差异。
@H_
262_20@
解决办法:使用特殊权限SUID和GUID。
权限 |
文件 |
目录 |
SUID |
@H_262_20@注意:仅对二进制可执行文件设置 @H_262_20@二进制可执行文件会以所有者和调用者的用户标识去执行,也就是拥有两者的权限。 |
不对目录设置 |
GUID |
@H_262_20@注意:仅对二进制可执行文件设置 @H_262_20@二进制可执行文件会以所属组和调用者的标识去执行,也就是拥有两者的权限。 |
在目录下创建文件、目录等,其所属组与该目录的所属组相同。而不是所有者的用户组了。 |
@H_
262_20@
场景2:某
用户在执行
rm -rf 目录/*时,把所有者不是它的
文件、目录都误
删除了。
@H_
262_20@ 原因:
默认情况下,只要
用户拥有某目录的wx权限,则可以
删除、剪切该目录下的所有
文件、目录,即使该
用户对该目录下的
文件、目录任何权限都没有。
@H_
262_20@ 需求:只
删除所有者为自己的
文件、目录。
@H_
262_20@
解决办法:使用特殊权限SBIT。
权限 |
文件 |
目录 |
SBIT(stick bit,粘滞位) |
不对文件设置 |
配合wx权限,仅目录的所有者、子目录或文件的所有者和root用户才能删除、移动该目录下的子目录和文件 |
@H_
262_20@
@H_
262_20@
3. 隐藏权限
@H_
262_20@ 共13种,仅在
文件系统格式为Ext2+才有效。
@H_
262_20@
@H_
262_20@
三、通过命令了解权限
@H_
262_20@上一节我们
从概念上了解了linux的
文件权限的种类,下面通过命令来实干一番。
@H_
262_20@1. 查看权限
@H_
262_20@输入
ls -l就可以查看当前目录下所有
文件和子目录的权限信息了。
@H_
262_20@假设回显信息为
①-②rws③r-x④r-x⑤1⑥root⑦root⑧430540⑨Dec 20 18:27⑩/usr/sbin/passwd,现在逐一分析其
内容。
@H_
262_20@ ①. 首字符-,表示该
文件为普通
文件。
@H_
262_20@
-,普通
文件;
@H_
262_20@
d,目录
文件;
@H_
262_20@
l,符号
链接;
@H_
262_20@
c,字符设备
文件;
@H_
262_20@
b,字节设备
文件;
@H_
262_20@
p,先进先出
文件;
@H_
262_20@
s,套接字
文件。
@H_
262_20@ ②. 第2~4个字符,表示所有者(
owner)的权限
@H_
262_20@ ③. 第5~7个字符,表示所属组(group)的权限
@H_
262_20@ ④. 第8~10个字符,表示其他
用户(other)的权限
@H_
262_20@ ⑤. 第1
1个字符,表示硬
链接数
@H_
262_20@ ⑥. 是
文件所有者的
用户名称(
owner)
@H_
262_20@ ⑦. 是
文件所属组的
用户组
名称(group)
@H_
262_20@ ⑧. 是
文件大小,以块为单位,通过
ls -lh则会以KB,MB作单位
@H_
262_20@ ⑨. 是最后
修改日期
@H_
262_20@ ⑩. 是
文件或目录的
绝对路径
@H_
262_20@ 从上述
内容我们可以得知Linux下的权限角色有三种,分别是
所有者(owner)、
所属组(group)和
其他用户(other)。
@H_
262_20@
2. 权限表示形式
@H_
262_20@
[a]. 符号表示法
@H_
262_20@ 普通权限:
@H_
262_20@ r,读权限; w,写权限;x,可执行权限。
@H_
262_20@ 特殊权限:
@H_
262_20@ SUID权限只能设置在②中,s表示二进制可执行
文件同时拥有SUID权限和x可执行权限;S表示二进制可执行
文件拥有SUID权限但没有x可执行权限。
@H_
262_20@ SGID权限只能设置在③中,s表示二进制可执行
文件或目录同时拥有SGID权限和x可执行权限;S表示二进制可执行
文件或目录拥有SGID权限但没有x可执行权限。
@H_
262_20@ SBIT权限只能设置在④中,t表示目录同时拥有SBIT权限和x可执行权限;T表示目录拥有SBIT权限但没有x可执行权限。
@H_
262_20@
@H_
262_20@
[b]. 数字表示法
@H_
262_20@ 数字表示法采用二进制形式计算,八进制形式设置的方式。
@H_
262_20@ 二进制形式计算,1代表有权限,0代表无权限:
|
|
|
所有者 |
所属组 |
其他用户 |
SUID |
SGID |
SBIT |
R |
W |
X |
R |
W |
X |
R |
W |
X |
1/0 |
1/0 |
1/0 |
1/0 |
1/0 |
1/0 |
1/0 |
1/0 |
1/0 |
1/0 |
1/0 |
1/0 |
@H_
262_20@ 然后每三位为一组转为八进制,例如现在二进制形式为100111101101,那么转为八进制则为4755。
@H_
262_20@ 然后通过
chmod4755文件就可以改变
文件的权限,
ls -l回显中权限部分则为rwsr-xr-x。
@H_
262_20@
注意:1. 若不设置特殊权限时,我们可以直接省去八进制的第一位数,例如:chmod 755 文件;
@H_
262_20@
2. 采用数字表示法设置特殊权限,仅能启动特殊权限,却无法关闭。例如,文件A拥有特殊权限SUID和SGID,执行chmod 0755 文件A,但通过ls -l查看权限依然为rwsr-sr-x。
@H_
262_20@
@H_
262_20@
四、通过符号表示法设置权限
@H_
262_20@
通过数组表示法设置权限有时确实不够方便,于是bash为我们提供了符号表示法来设置权限。
@H_
262_20@
设置普通权限
// 为所有者、所属组和其他用户添加执行的权限
chmod +x 文件路径
为所有者、所属组和其他用户删除执行的权限
chmod -x 文件路径
为所有者添加执行的权限
chmod u+x 文件路径
为所属组添加执行的权限
chmod g+x 文件路径
为其他用户添加执行的权限
chmod o+x 文件路径
为所有者、所属组添加执行的权限
chmod ug+x 文件路径
为所有者、所属组和其他用户添加写、执行的权限,取消读权限
chmod =wx 文件路径
为所有者、所属组添加写、执行的权限,取消读权限
chmod ug=wx 文件路径
@H_
262_20@
设置特殊权限
开启、
关闭SUID
chmod u+
s 文件名
chmod u-
s 文件名
开启、关闭SGID
chmod g+
s 文件名
chmod g-
s 文件名
开启、关闭SBIT
chmod o+
t 文件名
chmod o-t
文件名
@H_
262_20@
@H_
262_20@
五、改变所有者、所属组
@H_
262_20@
1. 查看用户信息
查看当前
用户
whoami
查看当前用户所属组
groups
查看其他用户所属组
groups
用户1
用户2
@H_
262_20@
2. 改变所有者、所属组
@H_
262_20@仅root
用户才有权限执行下列命令。
改变所有者
chown 用户名 文件路径
改变所属组
chgrp 用户组 文件路径
改变所有者和所属组
chown 用户名.用户组 文件路径
递归改变所有者和所属组
chown -R
用户名.
用户组
目录路径
@H_
262_20@
@H_
262_20@
六、管理用户
@H_
262_20@
1.添加用户
@H_
262_20@ 命令:
useradd [-u uid] [-g group] [-d home] [-s sHell] 用户名 -u,
用户ID,
用户ID是给系统使用的,而
用户名是给
用户使用的,两者是一一对应的关系
-g,
用户所属的
用户组标识
-d,以已存在的目录作为
用户的家目录
-s,定义s
Hell
@H_
262_20@ 示
例:
添加用户标识 garfield
# useradd garfield
@H_
262_20@ 并通过查看/etc/passwd、/etc/shadow和/etc/group
文件内容,检查
用户是否创建成功。具体
内容如下
@H_
262_20@
@H_
262_20@
注意:在创建用户时,系统会根据/etc/login.defs和/etc/default/useradd文件的内容对新用户做基本设置。
@H_
262_20@
/etc/login.defs文件内容:
@H_
262_20@
@H_
262_20@
/etc/default/useradd
@H_
262_20@
SKEL选项是指定用户家目录内容是从`/etc/skel`复制过来的。
@H_
262_20@
2. 设置密码
@H_
262_20@ 命令:
passwd 用户名 密码
@H_
262_20@
3.启用、禁用帐号
禁用
# usermod -
L 用户名
启用
# usermod -U
用户名
@H_
262_20@启用禁用实质就是在`/etc/shadow`
文件中该
用户名对应的记录上,在
用户密码前
删除、
添加!(感叹号)来实现。
@H_
262_20@
4. 其他
将
用户添加到
用户组
usermod -
G 用户组名 用户
改变用户的用户组
usermod -
g 用户组名 用户
修改用户名
usermod -
l 新用户名 旧用户
删除用户
userdel
用户名
@H_
262_20@
@H_
262_20@
六、管理用户组
添加用户组
groupadd [-g gid [-o]] [-r] [-
f] 用户组名
修改用户组名称
groupmod -
n 新用户组名 旧用户组名
删除用户组
groupdel
用户组名
@H_
262_20@
@H_
262_20@
七、用户、用户组的配置文件
@H_
262_20@
1./etc/passwd,任何
用户都可以读取该
文件的
内容。存放各个
用户的
用户名称、加密后的密码(若操作系统采用了shadow技术,则用加密密码在/etc/shadow
文件中,这里
用X或\*表示)、
用户ID(
一个用户ID可以对应多个
用户名,每个
用户名拥有独立的口令、家目录和s
Hell,但系统会认为这些
用户名是同
一个用户。0是超级
用户,1~99系统保留,100开始是普通
用户,
默认从500建普通
用户。整体取值范围是0~65535)、
用户组ID(对应/etc/group中的一条记录)、注释性描述字符串、家目录、s
Hell程序路径<br/>
@H_
262_20@
伪用户(psuedousers):sHell程序路径为空或为/sbin/nologin,主要用于方便系统管理、满足相应系统进程对文件属性的要求。
@H_
262_20@
伪用户如下:
@H_
262_20@ bin,拥有可执行的
用户命令
文件 sys,拥有系统
文件 adm,拥有账号
文件 uucp,UUCP使用
lp,lp或lpd子系统使用
nobody,NFS使用
@H_
262_20@可通过设置"s
Hell程序路径"为某程序,限制某
用户进入系统后仅能执行该程序,程序执行结束则
退出系统。
@H_
262_20@
2./etc/shadow,仅超级
用户可以查看和
修改,由pwconv命令根据/etc/passwd中的数据
自动生成,记录为一对一关系。记录格式为:
用户名、加密后的密码(固定长度为13个字符,空则表示没有密码,若含\./
0-9A-Za-z的字符则无法
登录)、最后
修改密码的时间(以距离
1970年1月1日的天数来计算)、最小时间间隔(
修改密码的最小天数)、最大时间间隔(密码有效天数)、警告时间(从系统开始警告
用户修改密码到无法
登录的天数)、不活动时间(
用户没有
登录活动,但账号仍保持有效的最大天数)、失效时间(
用户名的有效天数)
@H_
262_20@
3./etc/group,存放
用户组
名称、
用户组加密后的密码(空、\*或x表示没有密码)、
用户组ID、成员
用户名称(成员
用户名称间用,隔开)
@H_
262_20@
@H_
262_20@
八、总结
@H_
262_20@ Linux的
文件权限暂时了解到这里吧,以后继续深入继续补充!
@H_
262_20@ 尊重原创,转载请注明来自:
http://www.cnblogs.com/fsjohnhuang/p/3999224.html^_^肥仔John
@H_
262_20@
@H_
262_20@
九、参考
@H_
262_20@
http://blog.csdn.net/fan_zhen_hua/article/details/2050009
http://blog.csdn.net/xsz0606/article/details/5256719
http://blog.chinaunix.net/uid-20671208-id-3488852.html
http://www.cnblog
s.com/huangzhen/archive/2011/08/22/2149300.html
http://blog.csdn.net/liqfyiyi/article/details/7742775
http://o
s.51cto.com/art/201003/187591.htm
http://o
s.51cto.com/art/201003/187572.htm