6.权限管理
6.1.ACL权限
6.1.1.查看分区ACL权限是否开启
dumpe2fs命令是查询指定分区详细文件系统信息的命令
-h 权显示超级块中信息,而不显示磁盘块组的详细信息
查看是否支持ACL时报错了
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 1.2G 16G 7% /
devtmpfs 446M 0 446M 0% /dev
tmpfs 456M 0 456M 0% /dev/shm
tmpfs 456M 6.0M 450M 2% /run
tmpfs 456M 0 456M 0% /sys/fs/cgroup
/dev/sda1 1014M 125M 890M 13% /boot
tmpfs 92M 0 92M 0% /run/user/0
[root@localhost ~]# dumpe2fs -h /dev/mapper/centos-root
dumpe2fs 1.42.9 (28-Dec-2013)
dumpe2fs: Bad magic number in super-block while trying to open /dev/mapper/centos-root
Couldn't find valid filesystem superblock.
网上查找的答案:
你/dev/sda3,/dev/sda5是ext3或ext4的文件系统吗?dumpe2fs只能查看ext的文件系统。可以用blkid或mount命令确认一下这两个分区的文件系统,说不定是xfs文件系统。
追问
[root@localhost ~]# blkid /dev/sda5
/dev/sda5: UUID="414e3ade-0f81-4978-9508-bee19bb4f48a" TYPE="xfs"
xfs文件系统与ext什么区别吗。
他支持acl权限吗
追答
xfs 文件系统也支持acl,一般默认是开启的。
文件系统确实是xfs的:
[root@localhost ~]# blkid /dev/mapper/centos-root
/dev/mapper/centos-root: UUID="742f070e-35c4-47c4-86bd-af1c99e51c69" TYPE="xfs"
[root@localhost ~]#
1.查看acl权限是否支持(文件系统是否支持ACL权限):
a.ext4文件系统:使用 dumpe2fs -h /dev/sda3 来查看超级块中的信息,里面有 Default mount options: user_xattr acl 或者使用 mount 查询
b.xfs文件系统 :xfs系统貌似已经强制开启了ACL权限了
6.1.2.开启分区ACL权限
这个方法教程演示的是ext文件系统
xfs貌似已经开启,网上说如果再加配置,会报错的。
临时开启分区ACL权限
mount –o remount,acl /
重新挂载根分区,并挂载加入ACL权限
永久开启分区ACL权限
在文件/etc/fstab中加入acl,然后重新挂载文件系统或者重启系统,使用修改生效。
重新挂载文件系统,根分区
mount –o remount /
[root@localhost ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Apr 22 15:57:33 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults,acl 0 0
UUID=78f0ef83-074f-45dd-a750-b53ad773ead1 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
[root@localhost ~]#
增加红色部分,acl即可开启。
6.1.3.查看与设定
语法:
getfacl 文件名
查看ACL权限
setfacl 选项 文件名
-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认的ACL权限
-k 删除默认的ACL权限
-R 递归设定ACL权限
包括目录的子目录与文件
创建project目录
[root@localhost tmp]# mkdir project
[root@localhost tmp]# ll
total 4
drwxr-xr-x. 2 root root 6 May 1 11:55 project
-rw-r--r--. 1 root root 3 Apr 29 18:44 test.txt
创建组group1,并且将test用户加入该组
[root@localhost tmp]# groupadd group1
[root@localhost tmp]# gpasswd -a test group1
Adding user test to group group1
将project的所属组修改为group1,并且修改权限为770
[root@localhost tmp]# chgrp group1 project/
[root@localhost tmp]# ll
total 4
drwxr-xr-x. 2 root group1 6 May 1 11:55 project
-rw-r--r--. 1 root root 3 Apr 29 18:44 test.txt
[root@localhost tmp]# chmod 770 project/
[root@localhost tmp]# ll
total 4
drwxrwx---. 2 root group1 6 May 1 11:55 project
-rw-r--r--. 1 root root 3 Apr 29 18:44 test.txt
[root@localhost tmp]#
现在有个新的用户test2,他对project权限是r-x,也就是只读和执行,即5,这个时候该如何设置?
如下所示,报权限不足,因为test2不是group1这个组。如果test2加入group1这个组,组的权限是7,那么test2就多了个写权限,不符合我们的要求。这个时候就要用到ACL了。
[test2@localhost tmp]$ cd project/
-bash: cd: project/: Permission denied
设定ACL权限
给用户test2赋予r-x权限,使用格式:u:用户名:权限
[root@localhost tmp]# setfacl -m u:test2:rx project/
再次查看project目录时,权限后面多了一位加号:+,这个代码还有ACL权限
[root@localhost tmp]# ll -d project/
drwxrwx---+ 2 root group1 6 May 1 11:55 project/
具体详细权限需要使用getfacl命令来查看
有user一行,多了test2的权限
[root@localhost tmp]# getfacl project/
# file: project/
# owner: root
# group: group1
user::rwx
user:test2:r-x
group::rwx
mask::rwx
other::---
这个时候test2就可以进行project目录,但是没有写权限,所有不能创建目录
[test2@localhost tmp]$ cd project/
[test2@localhost project]$ touch newfile.txt
touch: cannot touch ‘newfile.txt’: Permission denied
给组设定ACL权限
setfacl –m g:group2:rwx project
为组group2分配ACL权限,使用格式:g:组名:权限
有group一行,多了group2的权限
[root@localhost tmp]# groupadd group2
[root@localhost tmp]# setfacl -m g:group2:rwx project/
[root@localhost tmp]# getfacl project/
# file: project/
# owner: root
# group: group1
user::rwx
user:test2:r-x
group::rwx
group:group2:rwx
mask::rwx
other::---
6.1.4.最大有效权限与删除ACL权限
如下,查看ACL权限里面有一行mask,这个就是最大有效权限
[root@localhost tmp]# getfacl project/
# file: project/
# owner: root
# group: group1
user::rwx
user:test2:r-x
group::rwx
group:group2:rwx
mask::rwx
other::---
1、最大有效权限mask
mask胆用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限 “相与” 才能得到用户的真正权限。
逻辑与在读权限中运算场景如下:
ACL |
User |
AND |
r |
r |
r |
r |
- |
- |
- |
r |
- |
- |
- |
- |
默认mask给的是最大的权限rwx,通过调整mask权限,可以设定用户的权限的大小。
修改mask权限,去掉写权限,格式相对组和用户的语法有所变化
setfacl –m m:rx project
这个修改只影响所属组长,和ACL权限,不影响所有者的权限
看effective,因为mask的权限有变化,组和用户权限即使设置的比较大,最终还是 逻辑与 的结果。
[root@localhost tmp]# setfacl -m m:rx project/
[root@localhost tmp]# getfacl project/
# file: project/
# owner: root
# group: group1
user::rwx
user:test2:r-x
group::rwx #effective:r-x
group:group2:rwx #effective:r-x
mask::r-x
other::---
2、删除ACL权限
删除指定用户的ACL权限
setfacl –x u:用户名 文件名
删除指定用户组的ACL权限
setfacl –x g:组名 文件名
-b 删除所有的ACL权限,包手User和Group
setfacl –b 目录名
6.1.5.默认与递归ACL权限
1、递归ACL权限
递归是父目录在设置ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。
针对现在的文件或目录递归设定的ACL权限:
setfacl –m u:用户名:权限 –R 文件名
-R 选项只能放在-m选项后面
递归ACL权限设定以后,新创建的文件和目录不一定是递归设置的权限,如果新的文件和目录也要保持一样,怎么办?
在命令中增加d选项即可,相当于默认权限
针对未来出现的文件或目录递归设定的ACL权限:
setfacl –m d:u:用户名:权限 文件名
6.2.文件特殊权限
6.2.1.SetUID
1、 SetUID的功能
a) 只有可以执行二进制程序才能设定SUID权限,如果非可执行文件,即使设定了也没有用。
b) 命令执行者要对该程序拥有执行(x)权限。
c) 普通用户命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)。
d) SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。
例如:passwd命令的权限里面多了个s,这个s表示的是SetUID权限
[root@localhost tmp]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz
[root@localhost tmp]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
密码文件的权限是000,除了root都没有权限
[root@localhost tmp]# ll /etc/shadow
----------. 1 root root 810 May 1 12:08 /etc/shadow
普通用户修改密码时,如果将自己的密码存储在shadow文件中的呢?
这个是因为passwd命令拥有SUID权限,在设置权限时,普通用户的passwd命令暂时获得属主root的权限
2、设置SetUID的方法
4代表SUID,用户的S权限
2代表SGID,组的S权限
1代表SBID
7
语法:
chmod 4755 文件名
chmod u+s 文件名
3、删除SUID权限的语法
chmod 755 文件名,不指定S权限即可
chmod u-s 文件名
在命令行中可以看到file1为红底,一般是危险警告,权限过高等等。
示例:
增加S权限
[root@localhost project]# chmod +4755 file1
[root@localhost project]# ll file1
-rwsr-xr-x+ 1 root root 0 May 1 12:43 file1
删除S权限,直接重新指定权限即可,去掉了执行权限
[root@localhost project]# chmod 644 file1
[root@localhost project]# ll file1
-rw-r--r--+ 1 root root 0 May 1 12:43 file1
再加上S权限,在查看权限时,可以看到S权限相比之前变成大写了,这个代表是错误的S权限,因为他不满足上面说的4个条件。file1没有拥有执行权限。
[root@localhost project]# chmod u+s file1
[root@localhost project]# ll file1
-rwSr--r--+ 1 root root 0 May 1 12:43 file1
4、危险的SetUID权限
关键目录应严格控制写权限。例如根目录/,/usr等。
用户的密码设置要严格遵守密码三原则
对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限。
如果设置错了,容易导致严重错误,灾难性后果。
例如:
给vim命令增加SUID权限
如下所示,passwd文件,普通用户是没有写权限的,如果vim有了SUID权限,在普通用户保存passwd文件内容时,vim会临时拥有了root的身份权限,就可以直接写入文件内容了,相当于权限放大了。相当不安全。
[root@localhost project]# ll /etc/passwd
-rw-r--r--. 1 root root 897 May 1 12:07 /etc/passwd
6.2.2.SetGID
1、SetGID针对文件的作用
a) 只有可执行的二进制程序才能设置SGID权限
b) 命令执行者要对该程序拥有x执行权限
c) 命令执行在执行程序的时候,组身份升级为该程序文件的属组。
d) SetGID权限同样只在该程序执行过程当中有效,也就是说组身份改变只在程序执行过程当中有效。
非常类似SUID的使用
SGID替换的是组权限的位置
看一下localte数据库的权限,普通用户对该数据库没有权限,只有root和slocate组才有权限
[root@localhost project]# ll /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 653338 May 1 12:29 /var/lib/mlocate/mlocate.db
看一下locate命令的权限
组的权限位置上多了个s,类似于SUID的方式,当普通用户执行locate命令时,暂时切换身份为slocate组,这时就有了读mlocate.db的权限,命令执行完成后,临时slocate组身份失效。
[root@localhost project]# ll /usr/bin/locate
-rwx--s--x. 1 root slocate 40512 Nov 5 2016 /usr/bin/locate
2、SetGID针对目录的作用
a) 普通用户必须对此目录拥有r和x权限,才能进入此目录
b) 普通用户在此目录中的有效组会变成此目录的属组
c) 若普通用户对此目拥有w权限时,新建的文件的默认属组是这个目录的属组。
3、设定SetGID
2代码SGID
语法:
chmod 2755 文件名
chmod g+s 文件名
创建目录
[root@localhost tmp]# mkdir dir1
[root@localhost tmp]# chmod 2777 dir1/
目录权限,所属组是root
[root@localhost tmp]# ll -d dir1
drwxrwsrwx. 2 root root 6 May 1 17:08 dir1
切换到test用户
[root@localhost tmp]# su - test
Last login: Tue May 1 12:08:25 CST 2018 from 192.168.1.101 on pts/1
[test@localhost ~]$ pwd
/home/test
[test@localhost ~]$ cd /tmp/dir1
在test用户下的/tmp/dir1目录下创建新文件
[test@localhost dir1]$ touch file1
新文件的所属组默认为目录的所属组
[test@localhost dir1]$ ll
total 0
-rw-rw-r--. 1 test root 0 May 1 17:10 file1
[test@localhost dir1]$
6.2.3.Sticky BIT
1、SBIT粘着位作用
a) 粘着位只对目录有效
b) 普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
c) 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
/tmp/目录,所有用户都拥有写权限,在Other权限位上多了个t,这个就是粘着位的权限
[test@localhost dir1]$ ll -d /tmp/
drwxrwxrwt. 9 root root 136 May 1 17:08 /tmp/
然而test用户并不能删除test.txt,因为test.txt不是test用户创建的。
[test@localhost tmp]$ rm -rf test.txt
rm: cannot remove ‘test.txt’: Operation not permitted
[test@localhost tmp]$ ll test.txt
-rw-r--r--. 1 root root 3 Apr 29 18:44 test.txt
2、设置与取消粘着位
a) 设置粘着位
chmod 1755 目录名
chmod o+t 目录名
b) 取消粘着位
chmod 777 目录名
chmod o-t 目录名
6.3.chattr权限
英文描述:
chattr - change file attributes on a Linux file system
这具设置对root用户也有效,也可 以限制到root用户的操作。也这个修改主要是为了防止误操作的。
1、设置文件系统属性
命令格式
chattr [+-=] [选项] 文件或目录名
+ 增加权限
- 删除权限
= 等于某权限
选项:
i:如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下 文件的数据,但是不允许建立和删除文件。
a:如果对文件设置a属性,那么只在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录建立和修改文件 ,但是不允许删除。
2、查看文件系统属性
llsattr 选项 文件名
-a 显示所有文件和目录
-d 若目标是目录,仅列出目录本身的属性,而不是子文件的。
写文件内容
[root@localhost tmp]# echo 123 >> test.txt
[root@localhost tmp]# cat test.txt
aa
123
对文件增加i属性
[root@localhost tmp]# chattr +i test.txt
[root@localhost tmp]# ll test.txt
-rw-r--r--. 1 root root 7 May 1 17:42 test.txt
[root@localhost tmp]#
查看文件系统属性,只有一个i属性权限
[root@localhost tmp]# lsattr -a test.txt
----i----------- test.txt
增加了i属性后的文件,相当于锁定了,仅能查看,不能删除和修改。
[root@localhost tmp]# echo 234 >> test.txt
-bash: test.txt: Permission denied
[root@localhost tmp]# rm -rf test.txt
rm: cannot remove ‘test.txt’: Operation not permitted
[root@localhost tmp]# cat test.txt
aa
123
6.4.sudo权限
1、sudo权限的作用:
root把本来只能超级用户执行的命令赋予普通用户执行。
sudo的操作对象是系统命令
2、sudo使用
由管理员使用命令visudo给普通用户赋予权限,这个命令实际上修改的是/etc/sudoers文件
root ALL=(ALL) ALL
用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
%wheel ALL=(ALL) ALL
%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
普通用户不能赋予vim命令,容易导致权限放大,普通用户本来的vim是限制在普通用户权限范围内的,sudo vim的命令,运行的是root用户的命令,属于超级权限了。
3、授权test用户可以重启服务器
visudo
test ALL=/sbin/shutdown –r now
把权限限制到最小,指定上-r参数
ALL是指本机和本网段的任何IP,这个IP是指的服务器的IP或网段,不是客户端的。
4、普通用户使用sudo权限
查看可用的sudo命令
sudo –l
看红色部分,test用户已经用了sudo赋予的重启命令
[test@localhost ~]$ sudo -l
[sudo] password for test:
Sorry, try again.
[sudo] password for test:
Matching Defaults entries for test on localhost:
!visiblepw, always_set_home, match_group_by_gid, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR
LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User test may run the following commands on localhost:
(root) /sbin/shutdown -r now
普通用户执行shutdown –r now时,已经执行不了。
[test@localhost ~]$ shutdown -r now
User root is logged in on sshd.
Please retry operation after closing inhibitors and logging out other users.
Alternatively, ignore inhibitors and users with 'systemctl reboot -i'.
[test@localhost ~]$
要想使用sudo权限,需要加sudo命令前缀,普通用户test执行sudo赋予的重启命令
sudo /sbin/shutdown –r now
如下所示shutdown –h命令已经被限制了,不能执行,只能执行-r选项。
[test@localhost ~]$ sudo /sbin/shutdown -h now
Sorry, user test is not allowed to execute '/sbin/shutdown -h now' as root on localhost.localdomain.
[test@localhost ~]$ sudo /sbin/shutdown -r now
相关推荐
Anaconda3-Linux-x86-64.zip是一个针对Linux平台的64位版本Anaconda的压缩包,用于在Linux系统上便捷地安装和管理Python环境及依赖库。 **一、Anaconda的核心功能** 1. **环境管理**:Anaconda提供conda命令行工具...
1. **文档**:可能包括PDF格式的教程、笔记或手册,详细解释Linux的基础知识,如命令行操作、文件系统管理、权限控制等。 2. **脚本**:可能会有Bash脚本示例,用于演示如何编写简单的自动化任务,例如系统维护、...
"apache-tomcat-7.0.47.tar.gz"是压缩包内的另一个文件,它是一个tar归档文件,通常用于Linux或Unix系统,使用gzip算法进行压缩。这个文件可能是为非Windows用户提供的,因为这些用户可能更习惯于使用tar命令来解压...
《韩顺平linux视频全部资料》其中jdk 6.0.iso 68, 68.5MB、eclipse-SDK-3.7-linux-gtk-x86_64.tar.gz 174MB、MyEclipseEnterpriseWorkbench.5.1.0GA.linux.tar.gz 118MB资源太大,无法上传,主要是由于上传权限被...
Linux 2.6.11内核源码,结合中文笔记注释,为开发者提供了一个极好的学习平台,帮助我们深入理解内核的工作原理。 首先,让我们了解一下Linux内核的主要组件和功能。内核是操作系统的核心,负责管理系统的硬件资源...
Linux学习笔记PDF文档.pdf是一个详尽的资源,旨在帮助初学者和有经验的用户深入理解Linux操作系统。Linux作为开源的类Unix系统,以其稳定、安全和可定制性在全球范围内广泛应用于服务器、桌面环境以及嵌入式设备。这...
总的来说,这份“Linux学习笔记-很不错适合linux入门者”涵盖了Linux基础的方方面面,无论是对操作系统有兴趣的个人,还是准备从事系统管理员、运维工程师、开发人员等职业的学习者,都能从中受益匪浅。通过系统学习...
本教程将通过韩顺平老师的PPT和课堂笔记,为初学者提供一个全面且深入的Oracle 10g学习路径。 一、Oracle 10g基础 Oracle 10g的基础部分涵盖了数据库安装、配置和管理。首先,你需要了解如何在不同的操作系统上...
"LinuxAPI-master.zip" 提供的是一份详尽的Linux API学习笔记,它旨在为开发者提供一个简洁易懂的替代传统man手册的学习资源。这份笔记以Markdown(md)格式编写,这意味着它们可以使用任何支持Markdown的编辑器或者...
《兄弟连Linux教程1-16章学习笔记》是一份全面涵盖Linux基础知识的学习资料,特别适合初学者和希望快速提升Linux技能的人群。这个压缩包包含了一系列文本文件和辅助图片,旨在帮助用户深入理解Linux系统的基本操作和...
这是个人10年前的Linux Ubuntu学习笔记,之后查笔记时,都会补充新知识,也有纠错,涵盖了10个PDF文件,由有道笔记导出,非常适合初学者。这些PDF文件包含了丰富的知识和实用技巧,能够帮助您更好地掌握Linux Ubuntu...
本篇“Linux学习笔记”详细介绍了Linux的基本目录结构及其各自的功能,这对于初学者理解Linux系统的核心概念非常重要。 #### 二、Linux目录结构解析 1. **/(根目录)** - 根目录是Linux文件系统的起点,所有的...
在学习或工作中,人们常会将相关材料分段整理并压缩,便于管理和分享。 标签为空,意味着没有额外的分类信息。 "day3-part"是压缩包内的唯一文件,可能是一个单一的文档、图片、代码文件,或者是包含多个子文件的...
Tiddlers类似于笔记或任务,可以用于个人知识管理、项目协作或者构建信息丰富的网站。而TiddlySpace插件则是TiddlyWeb的一个扩展,专为创建和管理用户空间和社交交互而设计。 描述中的“资源全名”进一步确认了这个...
`Rhel6 dns配置-mosquito.docx`文档可能包含了作者在学习DNS配置过程中的笔记和经验,对于深入理解和实践RHEL6 DNS配置非常有帮助。建议仔细阅读和参考这份文档,结合实际操作,以掌握这一关键的系统管理技能。
6. `LICENSE`: 许可证文件,规定了库的使用权限和限制。 标签中提到了"后端",这意味着`notedrive`可能主要用于服务器端编程,处理数据存储或接口通信。它可能提供了与Google Drive API的接口,帮助开发者轻松地在...
Termux 是一个强大的 Android 应用程序,它提供了一个 Linux 环境,可以在不Root设备的情况下在Android手机和平板上运行。...无论是学习 Linux 命令、开发软件还是进行系统调试,Termux 都是一个非常实用的工具。
Linux学习笔记涵盖了许多核心主题,帮助初学者逐步掌握这一开源操作系统。笔记的详细内容如下: ### 第一章:Linux简介及安装 1. **Linux介绍**:Linux是一种自由和开放源代码的操作系统,基于Unix,由全球各地的...
这种加密技术可能采用了数字版权管理(DRM)系统,用于保护教育内容的知识产权,防止未经授权的复制或分发。加密可能涉及到对媒体文件进行加密封装,只有通过特定的解密钥匙才能播放。 2. **平台兼容性**:既然标明...