基本权限
基本权限的类别
访问方式(权限)
用户在访问一个目录或文件时,由设置的访问权限+归属关系共同决定最终权限访问权限
Ø 读取(r):允许查看内容read(4) 能够通过ls、cat、less、head、tail浏览此目录内容
Ø 写入(w):允许修改内容write(2) 执行rm/mv/cp/mkdir/touch/vim…等更改目录内容的操作
Ø 可执行(x):允许运行和切换execute(1) 能够cd切换到此目录 文本文件./ (相当于双击)可以运行
文档权限适用对象(归属)
所有者u:拥有此文件/目录的用户user
所属组g:拥有此文件/目录的组group
其他用户o:除所有者、所属组以外的用户other
查看权限:使用ls -l 命令
ls -ld 文件或目录
[root@server0 ~]# ls -ld /etc/resolv.conf /usr/src
-rw-r--r--. 1 root root 94 8月 18 08:32 /etc/resolv.conf
drwxr-xr-x. 4 root root 32 5月 7 2014 /usr/src
-:文本文件 d:目录 l:快捷方式
文档的类别 权限位 硬连接数 属主 属组 大小 最后修改时间 文件/目录名称
ls -l输出结果中的第1个字符,表示文档的类别:
-:普通文件 d:目录 l:软连接
b:块设备(磁盘、分区...) c:字符设备(键盘、终端...)
权限位前3位数——user属主
权限位中3位数——group属组
权限位后3位数——other其他
#######################################
Linux判别用户的权限思路
1.判别用户的角色 所有者>所属组>其他人 匹配即停止
2.查看相应权限位的权限
#########################################
目录和文件的默认权限
1)新建目录时手动指定:mkdir -m 755 文件夹路径 :rwxr-xr-x 755
2)根据umask值自动设置:
查看权限掩码值(自动去除的权限):umask
查看权限值(默认权限):umask -S
新目录的权限 = 777 - umask掩码
新文件的权限 = 666 - umask掩码 【安全起见,文件默认不给x权限】
例:新建文件:rw-r--r-- 644
无任何权限:--------- 000 有任何权限:rwxrwxrwx 777
x与r是一般是成对出现的,一般不会有只有x权限而无r权限的用户。
#########################################
设置基本权限
格式:chmod [-R] 归属关系+-=权限类别 文档… ugoa+-=rwxst
[-R] 递归修改权限
以root用户新建/nsddir/目录,在此目录下新建readme.txt文件,并进一步完成下列操作
1)使用户zhangsan能够在此目录下创建子目录 : chmod o+w /nsddir/
2)使用户zhangsan不能够在此目录下创建子目录: chmod o-w /nsddir/
3)使用户zhangsan能够修改readme.txt文件: chmod o+w /nsddir/readme.txt
4)调整此目录的权限,使所有用户都不能进入此目录: chmod u-x,g-x,o-x /nsddir/
5)为此目录及其下所有文档设置权限 rwxr-x---: chmod -R u=rwx,g=rx,o=--- /nsddir/
设置文档归属
格式:chown [-R] 属主 文档…
chown [-R] :属组 文档…
chown [-R] 属主:属组 文档… 或属主.属组 二者作用相同
[-R] 递归修改权限
[root@server0 /]# mkdir /nsd02
[root@server0 /]# ls -ld /nsd02/
[root@server0 /]# groupadd stugrp #创建stugrp组
[root@server0 /]# chown zhangsan:stugrp /nsd02 #修改所有者和所属组
[root@server0 /]# ls -ld /nsd02 #每一次修改,均看一下权限变化
[root@server0 /]# chown root /nsd02 #修改所有者
[root@server0 /]# chown :users /nsd02 #修改所属组
案例:以root身份新建/tarena目录,并进一步完成下列操作
1)将属主设为gelin01,属组设为tarena组:
useradd gelin01 groupadd tarena chown gelin01:tarena /tarena
2)使用户gelin01对此目录具有rwx权限,其他人对此目录无任何权限: chmod o=--- /tarena
3)使用户gelin02能进入、查看此目录(将gelin02加入tarena组):
useradd gelin02 gpasswd -a gelin02 tarena
4)将tarena目录的权限设为r--r-x---,再测试gelin01用户能否进入此目录:
chmod u=r--,g=r-x,o=--- /tarena
若对目录有w权限,表示可在该目录下新建/删除/移动文件或子目录,对目录本身不具备改名权限。
###############################################################################
附加权限
除了 r、w、x之外的其他标识 s、t
Set UID(s) 4 —— 程序文件,使程序的执行者拥有程序的拥有者的权限/身份
Set GID(s) 2—— 程序文件/目录,使目录的属组自动设置给目录下的新文档
Sticky Bit(t) 1 —— 公共目录,禁止普通用户滥用w权限
##########################################
如何设置SUID:chmod 4755 ...
如何设置SGID:chmod 2755 ...
同时设置SUID、SGID:chmod 6755 ...
如何设置粘滞位:chmod 1777 ...
##########################################
Set UID ——附加在属主的x位上
Ø属主的权限标识会变为s s代表具有附加权限s和执行权限x; S代表仅具有附加权限s
Ø适用于可执行文件,可以让使用者具有文件属主的身份及部分权限
Ø传递所有者身份 尚方宝剑
例:/usr/bin/passwd
Set GID ——附加在属组的x位上
Ø属组的权限标识会变为s s代表具有附加权限s和执行权限x; S代表仅具有附加权限s
Ø适用于可执行文件,功能与Set UID类似
Ø适用于目录,可以使目录下新增的文档自动设置为和父目录相同的属组,即传递程序所属组的权限、使属组身份向下继承 (工作中经常会使用到)
例:/run/log/journal/
[root@server0 ~]# mkdir /nsd05
[root@server0 ~]# ls -ld /nsd05
[root@server0 ~]# chown :stugrp /nsd05
[root@server0 ~]# ls -ld /nsd05
[root@server0 ~]# mkdir /nsd05/test01
[root@server0 ~]# ls -ld /nsd05/test01 #默认父子目录是没有继承的
[root@server0 ~]# chmod g+s /nsd05/ #附加Set GID权限
[root@server0 ~]# ls -ld /nsd05/
[root@server0 ~]# mkdir /nsd05/test02
[root@server0 ~]# ls -ld /nsd05/test02 #新增的子目录继承父目录权限
Sticky Bit粘滞位 ——附加在其中人的x位上
Ø其他人的权限标识会变为t
Ø适用于开放w权限的目录,可以阻止用户滥用w权限(禁止操作别人的文档)(工作常用)
例:/tmp、/var/tmp
测试粘滞位:
1)新建一个目录 /public ,权限设为 rwxrwxrwx
mkdir /public chmod u=rwx,g=rwx,o=rwx /public
2)新建一个文件 /public/root.txt,查看属性 【-rw-r--r-- root、root组】
3)切换到一个普通用户 natasha,尝试删除 /public/root.txt 【能】
4)由用户 natasha 新建一个文件 /public/natasha.txt 【能】
5)由root用户为 /public 设置粘滞位( chmod o+t /public)
6)切换到另一个普通用户 harry,查看文件/public/natasha.txt 属性
7)用户 harry 尝试删除 文件/public/natasha.txt 【不能】
8)用户 harry 尝试新建文件/public/harry.txt 【能】
设置附加权限
Øchmod u+s[,g+s] 文档…
Øchmod o+t 目录…
###############################################################################
用户新建文档的默认归属:
谁创建,谁拥有(用户名、基本组)
设置Set GID权限以后:谁创建,文档都属于此目录的属组
关于目录权限的继承
强制继承:
chmod -R ... /parent/
chown -R ... /parent/
自动继承:
方法1:调控umask值,适用于当前用户的整个Shell环境
方法2:针对文件夹的归属关系,setuid、setgid
方法3:setfacl -d -m u:用户名:权限列表 文件或目录...
setfacl -d -m g:组名:权限列表 文件或目录...
###############################################################################
案例1:配置附加权限
创建一个某个组的用户共享使用的目录 /home/admins,满足以下要求:
此目录的组所有权是 adminuser
adminuser 组的成员对此目录有读写和执行的权限,除此以外的其他所有用户没有任何权限(root用户能够访问系统中的所有文件和目录)
在此目录中创建的文件,其组的所有权会自动设置为属于 adminuser 组
步骤一:创建目录并调整权限
1)新建文件夹# mkdir /home/admins
2)调整并确认权限# chown :adminuser /home/admins
# chmod ug=rwx,o-rwx /home/admins
[root@server0 ~]# chmod g+s /home/admins
[root@server0 ~]# ls -ld /home/admins/
drwxrws---. 2 root adminuser 6 12月 23 23:13 /home/admins/
步骤二:验证目录的特性
1)在此目录下新建一个文件# touch /home/admins/a.txt
2)查看新建文件的归属,其属组应该与父目录相同
[root@server0 ~]# ls -lh /home/admins/a.txt
-rw-r--r--. 1 root adminuser 0 12月 23 23:17 /home/admins/a.txt
###############################################################################
ACL访问控制列表 ——能够对个别用户、个别组设置独立的权限(量身订做权限)
ACL策略的作用
文档归属的局限性
Ø 任何人只属于三个角色:属主、属组、其他人
Ø 无法实现更精细的控制
ACL访问策略
Ø 能够对个别用户、个别组设置独立的权限
Ø 大多数挂载的EXT3/4、XFS文件系统默认已支持
设置acl访问控制策略
getfacl 文档… //查看acl访问控制列表
设置可继承的ACL策略(对新建的子文档有效,不影响已有文档的权限):
setfacl [-R] -m u:用户名:权限类别 文档或目录… //添加策略
setfacl [-R] -m g:组名:权限类别 文档或目录…
setfacl [-R] -b 文档或目录… //清除所有ACL策略
setfacl [-R] -x u:用户 文档或目录... //删除指定用户的ACL策略
[-R]可递归修改目标文件夹及其下的所有文档
[root@server0 ~]# mkdir /nsd06
[root@server0 ~]# chmod o=--- /nsd06
[root@server0 ~]# ls -ld /nsd06
drwxr-x---. 2 root root 6 8月 21 15:29 /nsd06
[root@server0 ~]# su - dc
[dc@server0 ~]$ cd /nsd06 #切换失败
[dc@server0 ~]$ exit
[root@server0 ~]# setfacl -m u:dc:rx /nsd06 #设置ACL权限
drwxr-x---+ 2 root root 6 8月 21 15:30 /nsd06 #点.变成了+号
[root@server0 ~]# ls -ld /nsd06
[root@server0 ~]# su - dc
[dc@server0 ~]$ cd /nsd06 #切换成功
[dc@server0 ~]$ exit
[root@server0 ~]# getfacl /nsd06
[root@server0 ~]# setfacl -b /nsd06/ #删除所有的ACL策略
[root@server0 ~]# getfacl /nsd06 #查看ACL策略
[root@server0 ~]# setfacl -x u:lisi /nsd06 #//删除指定的ACL策略(lisi)
###############################################################################
案例1:配置文档的访问权限
将文件 /etc/fstab 拷贝为 /var/tmp/fstab,并调整文件 /var/tmp/fstab的权限,满足以下要求:此文件的拥有者是 root,此文件属于 root 组
此文件对任何人都不可执行
用户 natasha 能够对此文件执行读和写操作
用户 harry 对此文件既不能读,也不能写
所有其他用户(当前的和将来的)能够对此文件进行读操作
步骤一:复制文件
1)使用cp命令进行复制# cp /etc/fstab /var/tmp/fstab
2)确认复制后的权限# ls -l /var/tmp/fstab
-rw-r--r--. 1 root root 313 12月 23 23:01 /var/tmp/fstab
说明已经满足案例要求的前三条和最后一条。
步骤二:调整权限
1)增加额外的访问控制策略
用户 natasha 能够对此文件执行读和写操作# setfacl -m u:natasha:rw /var/tmp/fstab
用户 harry 对此文件既不能读,也不能写# setfacl -m u:harry:- /var/tmp/fstab
2)确认结果
[root@server0 ~]# getfacl /var/tmp/fstab
请思考:临时目录 /tmp,所有人都有rwx权限,面临的问题(w权限滥用)?
用户的密码存在 /etc/shadow,面临的问题(普通用户怎么改自己的密码)?
###############################################################################