linux权限管理

############linux 权限管理 ###################
#修改所有者和所属组
chgrp -R groupname file/dir
chown -R user:group file/dir
dhown -R user file/dir
chown -R :group file/dir

#文件权限
r #读
w #写
x #执行
s #针对可执行文件或目录,使文件在执行阶段,临时拥有文件所有者的权限(会占用x的位置,例如:rws)
t #针对目录,任何用户都可以在此目录中创建文件,但只能删除自己的文件(会占用x的位置,例如:rws)

#s权限:当s位位于拥有者的x位,此种权限通常称为 SetUID,简称 SUID 特殊权限
用户要对该文件拥有 x(执行)权限。
用户在执行该文件时,会以文件所有者的身份执行。
SetUID 权限只在文件执行过程中有效,一旦执行完毕,身份的切换也随之消失。

例子:passwd命令,/usr/bin/passwd
普通用户可以修改自己的密码,但是/etc/shadow文件时没有权限访问的,更别说修改了
因为passwd有s权限,运行的时候时root的灵魂附体,就可以修改/etc/shadow文件,成功修改密码

当 s 权限位于所属组的 x 权限位时,就被称为 SetGID,简称 SGID 特殊权限
[root@lgh2 ~]# ll /usr/bin/ | grep -w locate
-rwx--s--x 1 root slocate 40520 Apr 10 2018 locate
SGID 只针对可执行文件有效,换句话说,只有可执行文件才可以被赋予 SGID 权限,普通文件赋予 SGID 没有意义。
用户需要对此可执行文件有 x 权限;
用户在执行具有 SGID 权限的可执行文件时,用户的群组身份会变为文件所属群组;
SGID 权限赋予用户改变组身份的效果,只在可执行文件运行过程中有效;

以locate 命令为例,可以看到,/usr/bin/locate 文件被赋予了 SGID 的特殊权限,这就意味着,当普通用户使用
locate 命令时,该用户的所属组会直接变为 locate 命令的所属组,也就是 slocate

#t权限
Sticky BIT,简称 SBIT 特殊权限,可意为粘着位、粘滞位、防删除位等
SBIT 权限仅对目录有效,一旦目录设定了SBIT权限,则用户在此目录下创建的文件或目录,就只有自己和root才有权利修改或删除该文件。
drwxrwxrwt. 4 root root 4096 Apr 19 06:17 /tmp

#修改文件权限
chmod -R file/dir
chmod u/g/o/a +-= r/w/x/s/t file/dir #多个设定用逗号隔开
chmod 777 file/dir
chmod 7777 file/dir #rwsrwsrwt 最前一位用来设定s和t权限


#新建文件和文件夹的默认权限
umask #默认0022(root用户) 0002(非root) 四位八进制
文件(或目录)的初始权限 = 文件(或目录)的最大默认权限 - umask权限
文件的最大默认权限:666
文件夹的最大默认权限:777

umask 002 #临时修改umask值
vim /etc/profile #可以永久修改

#ACL权限管理
#1、使用df -h查看磁盘
#2、dumpe2fs -h /dev/.. 查看磁盘的具体信息,是否有acl
mount -o remount,acl / #临时新增acl权限
vim /etc/fstab #永久修改
UUID=490ed737-f8cf-46a6-ac4b-b7735b79fc63 / ext4 defaults,acl 1 1

#setfacl
-m #设置ACL权限
-x #删除指定ACL权限
-b #删除所有ACL权限
-k #删除默认ACL权限
-d #设定默认ACL权限 (只对文件夹生效)
-R #递归设定ACL权限
给用户设定ACL 权限: setfacl -m u:用户名:权限 指定文件名
给用户组设定ACL 权限:setfacl -m g:组名:权限 指定文件名
设定mask的ACL 权限: setfacl -m m:权限 指定文件名 (mask默认为rwx)
删除指定ACL权限: setfacl -x u:用户名 文件名
删除指定用户组的ACL权限:setfacl -x g:组名 文件名
删除文件的所有 ACL 权限:setfacl -b 文件名
递归设置ACL权限: setfacl -m u:用户名:权限 -R 文件名
设定默认的ACL权限,子目录会继承:setfacl -m d:u:用户名:权限 文件名

#查看权限
getfacl dir
[pt@lgh2 project]$ getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: qq
user::rwx
user:pt:r-x
group::rwx
mask::rwx
other::---

#chattr
chattr [+-=] [属性] 文件或目录名
+ 表示给文件或目录添加属性,- 表示移除文件或目录拥有的某些属性,= 表示给文件或目录设定一些属性
i :
如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;
如果对目录设置 i 属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件;
a :
如果对文件设置 a 属性,那么只能在文件中増加数据,但是不能删除和修改数据;
如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删除文件;
u :
设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够恢复,常用来防止意外删除文件或目录
s :
和 u 相反,删除文件或目录时,会被彻底删除(直接从硬盘上删除,然后用 0 填充所占用的区域),不可恢复。


#lsattr
lsattr [选项] 文件或目录名
-a:后面不带文件或目录名,表示显示所有文件和目录(包括隐藏文件和目录)
-d:如果目标是目录,只会列出目录本身的隐藏属性,而不会列出所含文件或子目录的隐藏属性信息;
-R:和 -d 恰好相反,作用于目录时,会连同子目录的隐藏信息数据也一并显示出来。

#sudo
sudo 命令默认只有 root 用户可以运行,该命令的基本格式为
sudo [-b] [-u 新使用者账号] 要执行的命令
-b :将后续的命令放到背景中让系统自行运行,不对当前的 shell 环境产生影响。
-u :后面可以接欲切换的用户名,若无此项则代表切换身份为 root 。
-l:此选项的用法为 sudo -l,用于显示当前用户可以用 sudo 执行那些命令。

#sudo执行过程
当用户运行 sudo 命令时,系统会先通过 /etc/sudoers 文件,验证该用户是否有运行 sudo 的权限;
确定用户具有使用 sudo 命令的权限后,还要让用户输入自己的密码进行确认。出于对系统安全性的考虑,
如果用户在默认时间内(默认是 5 分钟)不使用 sudo 命令,此后使用时需要再次输入密码;
密码输入成功后,才会执行 sudo 命令后接的命令

#配置/etc/sudoers 文件
修改 /etc/sudoers,不建议直接使用 vim,而是使用 visudo。因为修改 /etc/sudoers 文件需遵循一定的语法规则,
使用 visudo 的好处就在于,当修改完毕 /etc/sudoers 文件,离开修改页面时,系统会自行检验 /etc/sudoers 文件的语法

修改参考模板
root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
%wheel ALL=(ALL) ALL
#%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)

用户名和用户组:可以使用 sudo 这个命令的用户或者用户组
被管理主机的地址:用户可以管理指定 IP 地址的服务器。这里如果写 ALL,则代表用户可以管理任何主机;如果写固定 IP,
则代表用户可以管理指定的服务器。如果我们在这里写本机的 IP 地址,不代表只允许本机的用户使用指定命令,
而是代表指定的用户可以从任何 IP 地址来管理当前服务器。
可使用的身份:就是把来源用户切换成什么身份使用,(ALL)代表可以切换成任意身份。这个字段可以省略。
授权命令:表示 root 把什么命令命令授权给用户,使用绝对路径写。默认值是 ALL,表示可以执行任何命令。个授权命令,之间用逗号分隔

posted @ 2019-06-27 16:50  一寸HUI  阅读(376)  评论(0编辑  收藏  举报