ACL权限: linux 基本操作权限有 rwx ,另加一个默认权限umask权限
umask权限可以理解为最高权限,只针对用户初始组和附加组权限有效
umask 权限决定了用户初始组权限与附加组权限,就算初始组权限或附加组权限再高,可用权限为umask权限: 初始组或者附加组权限为777 但是umask权限为755 即可使用权限为755 用户组和其它用户 为r-x.

ACL 权限就是让单独用户获得对此文件的单独权限!!!

1 设置acl前先检查用户所在此块硬盘区域是否支持acl 权限
	# df -h 
		查看有哪些挂载点
	# dumpe2fs -h /dev/sda2
		有一句: Default mount options:    user_xattr acl
		后面有acl 说明支持
	1-1: 如果没有显示acl 则
		# vim /etc/fstab
			显示: UUID=963b2c43-9252-4cfd-8f03-b8ecc091c678 /                       ext4    defaults       1 1
				 UUID=963b2c43-9252-4cfd-8f03-b8ecc091c678 /etc                ext4    defaults        1 1
				 在需要的挂载点的defaults后面加上acl 就行
				 例如: UUID=963b2c43-9252-4cfd-8f03-b8ecc091c678 /                       ext4    defaults,acl        1 1
				重启服务器让配置文件生效
				后者 mount -o remount / 重新挂载根目录
		或者 mount -o remount,acl / 一步到位
2 为用户设置acl 权限
	例子: 
		# useradd user
		# useradd user1
		# passwd user   # 密码123
		# passwd user1  
		# mkdir /testacl #这里可以是文件 touch testacl
		# ll -d /testacl # 755  root:root
		# groupadd testacl # 创建testacl组
		# chown root:testacl /testacl # 将testacl 目录拥有者改为root组改为testacl
		# chmod 750 /testacl 
		# su - user    # 切换 user用户
		# cd /testacl  # 权限不足
		# exit 返回root 
		# usermod -G testacl(附加组组名) user 或者 gpasswd -a user testacl 都是将user加入到testacl  user的附加组
		# su - user 
		# cd /testacl  # 成功进入 因为testacl 目录组的权限5 r-x 不能修改
		# exit 返回root
		# 现在/testacl 目录权限为750 代表其它用户没有任何操作权限
			如果想让单独的某个用户拥有对/testacl 的某些权限
			就要用acl 权限了
		# setfacl -m u:user1:rwx [/testacl 或者文件名] 
		# ll -d /testacl   # 权限还是750 rwxr-x--+出现了个+号
		# su - user1   # user1 不在组testacl中 并且属于其它用户 他应该没有操作/testacl 的任何权限
		# cd /testacl # 进来了 怎么回事
		# acl 权限要用 getfacl 查看
		# exit 返回root 只用root可以使用setfacl getfacl
		# getfacl /testacl
		出现:# file: project/  操作的文件名称   Linux 全部都可以称作文件
			# owner: root     所属用户   所属主
			# group: project   所属组
			user::rwx          所属主   7
			user:user1:rwx		这就是acl 权限  意思是 user1 对/testacl  7权限
			group::rwx      所属组权限  7 
			mask::rwx		umask权限 7 除所属主外的有效 与计算
			other::---      其他人   0

3 setfacl 
	3-1: -m 添加   setfacl -m u:user:rwx /testacl
		 -x 删除   setfacl -x u:user /testacl
	3-2: umask 控制组的最大权限怎么改
		# setfacl -m m:rw /testacl
	3-3: u:user:rwx
		3-3-1: u 修改用户  setfacl -m u:user:rwx /testacl
			   g 修改组	  setfacl -m g:组名:rwx /testacl 此组对此文件的操作权限 , 将用户加入到此组用户就有了对此目录相应的操作权限
			   m 修改umask  setfacl -m m:rw /testacl 

4 如果组对此文件的操作权限为777 而umask 权限为755 
	# getfacl /testacl
	在超过umask权限的组后面会提示
	#    #effective:r-x
	此是组的实际获得权限还是 r-x
5 acl 操作组 和 用户 相差不大 就在 
	# setfacl -m g:组名:rwx /文件名

文件特殊权限setUID , setGID ,sticky BIT

查看一下ll /usr/bin/passwd
rwsr-wr-w权限
发现x 的位置出现了一个s
passwd 命令能够操作shadow文件
shadow 文件权限为000
然而每个用户都能使用passwd 命令修改自己的密码
也就是说每个用户都能通过passwd 命令操作shadow 文件
这。。。。。。
怎么可能! 没错这完全违背了Linux系统设计理念
其实,问题就出在那个s 身上
有没有发现s 占用的是 所属主位置上的x 的位置
passwd 就是拥有sUID(必须是可执行文件,执行者要对此文件拥有x权限) 权限的文件
拥有suid 权限的文件(程序)普通用户调用时将会在调用命令期间使用root用户权限调用(也就是说,调用此命令时普通用户变身为阉割版的root)

一 setUID

1 给可执行文件(程序)加上s 权限 让普通用户也能通过此命令完成普通用户本身无法完成的任务
	# chmod 4755 文件名 or chmod u+s 文件名
		ll 文件名   如果用户对此文件没有可执行权限 则会出现S 大S 这是错误提示
	1-1: 去掉权限 
	# chmod 755 文件名 or chmod u-s 文件名    直接755 文件名指回来即可

2 切记不可乱用
	# chmod u+s /usr/bin/vim 
	正常情况下普通用户无法打开shadow 但是此时vim 不仅可以看shadow 而且可以修改

二 setGID(可以可执行文件也可以目录)
命令执行者要对该程序拥有x 权限
把组的x替换成s

ll /var/lib/mlocate/mlocate.db
 -rw-r-----. 1 root slocate 991636 7月 29 14:29 /var/lib/mlocate/mlocate.db
 权限640 普通用户没有操作他的权限
 ll /usr/bin/locate
 -rwx–s--x. 1 root slocate 40520 4月 11 2018 /usr/bin/locate
 权限711


locate 组用户处有s权限 可以让普通用户调用locate是变身为root
普通用户在s组标识的目录中如果创建文件, 文件所属主为用户 而所属组为创建创建文件者的所属组

suid sgid 都是给用户无权执行而又不得不执行的程序,操作权限

1 添加
	# chmod g+s 文件名 or chmod 2755 文件名
2 删除
	# chmod g-s 文件名 or chmod 755 文件名

三 sticky BIT (操作对象是目录)
普通用户可以在目录中创建修改
但是只能修改跟自己相关的,其它用户的没有操作权限
不包括root用户

1 添加
	# chmod 1755 文件名 or chmod o+s 文件名
2 删处
	# chmod 755 文件名 or chmod o-s 文件名

文件系统属性chattr 权限

chattr 对root也有效
用于锁定某个文件或者目录
有两个参数
-i 目录: 目录中的文件不能增加修改删除,文件内容可以修改
文件:文件内容被锁死 只能看
-a 目录: 只能增加 查看
文件: 只能增加 查看 只能 echo “sss” > aaa 或 echo “ss” >> aaa形式

1 为文件添加属性(锁定)
	# chattr +i 文件名 
	# chattr +a 文件名
2 从文件上删除属性(解锁)
	# chattr -i 文件名
	# chattr -a 文件名
3 ll 无法查看chattr属性
	查看用:
	# lsattr 文件名
	------i/a-------e--  i/a 属性 e 硬盘格式

sudo 权限

使用visudo 命令修改 /etc/sudoers
# visudo 
打开/etc/sudoers文件
里面有一行 
1 root	ALL=(ALL) 	ALL
用户名   被管理主机的地址(ALL默认局域网段)=(可使用的身份 不写默认root) 授权命令(/sbin/shutdow -r now 越简单权限越大比如 /sbin/shutdown 就比前面的权限大)[绝对路径]

例子: 
test	ALL/(192.168.1.123)=/sbin/shutdown -r now
2 %wheel	ALL=(ALL)	ALL
%组名        被管理主机地址=(可使用的身份 不屑默认root) 授权命令[绝对路径]

3 切换到test 用户
	# sudo -l  查看授权命令
	匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, 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

用户 st 可以在 localhost 上运行以下命令:
    (root) /sbin/shutdown -r now  这里是授权命令 上方是环境变量不用管