大家好,我是砖家小胖。由于最近搭建集群路上遇到了些未知问题,经过问题一步一步排查,发现和权限有关。所以今天我们来梳理复习一下Linux系统权限部分的相关知识。
因为今天咱们这篇文章主要是根权限部分有关,为了安全,我们就不在集群上进行测试了,搞坏了整个集群很麻烦。于是我新建了个虚拟机Ubuntu,建了zhn账号密码为,root账号密码为。
1.由来:
这个事情要从上世纪80年代说起了,在那个年代,电脑还属于昂贵的奢侈品,一般人是买不起的,只有某些大学和科研院所才存在,所以很多人共用一台电脑是很正常的现象,所以Unix/Linux系统支持了多用户同时在线的情况,又为了保证每个人的隐私权,故而设计出来的这套权限系统。
2.文件和目录权限
首先,在Linux系统中,万物皆文件,并且文件是否可执行与后缀无关,只要拥有x权限就可执行,所以我们要彻底抛弃Windows中的所谓.exe .bat等后缀为可执行文件的思想。我们在test目录下新建一个zhn文件来看下它的权限配置(ls -al)
我们从数据中可以看到zhn文件的描述为
- rwxrw-r-- 1 zhn zhn 4 May 14 05:20 zhn
前半部分-rwxrw-r-- 一共十位
第1位’-‘代表该文件类型是常规文件,如果为‘d’则代表类型为目录(directory),'l'则表示为连接文件,‘b’表示为区块设备文件,‘c’表示为字符设备文件's'设备接口文件...
第2-4位rwx为该文件拥有者权限,可读可写可执行
第5-7位rw-为此用户组权限,可读可写不可执行
第8-10位r--为其他人账户权限,只可读
后半部分1 zhn zhn 4 May 14 05:20 zhn 一共五个参数
1表示该文件连接数为1
zhn表示文件拥有者
zhn表示文件所属用户组
4表示文件大小Bytes
May 14 05:20 表示文件最后被修改的时间
zhn表示文件名
rwx权限介绍:
r:可读权限,数字4代表
w:可写权限 ,数字2代表
x:可执行权限 ,数字1代表
-无权限,数字0代表
关于文件的描述:
r:文件可读取内容
w:文件可修改内容,但不能删除
r:文件可执行
-:无权限
关于目录的描述:
r:目录可浏览,如ls
w:目录内可新建新的文件和目录,可更名目录内的文件和目录,可移动目录内文件和目录,可删除目录内的文件和目录
x:目录可以进入
-:无权限
关于文件权限修改:
chmod -R XXX 三个X分别代表文件拥有者、文件所属用户组、其他用户
r=4
w=2
x=1
则rwx权限X位为4+2+1=7
rw为6
rx为5
-为0
如:chmod -R 777 file
关于文件拥有者和文件所属用户组修改:
chown zhn file
chown -R :zhn folder
chown -R zhn:zhn folder
测试一:test目录zhn账号权限为rwx,以root账户 touch test1文件,此时zhn账号test1文件权限为r--,虽然zhn账号对test1文件仅有可读权限,但 zhn账户依然可以删除root账户创建的test1文件。
原因:满足目录w:可删除目录内的文件和目录
测试二:将test目录zhn账号权限改为r-x,zhn账户新建test2文件,权限为rwx,此时zhn账户无法删除test2文件.
原因:满足文件w:文件可修改内容,但不能删除
测试三:将test目录zhn账号权限改为rw-,zhn将无法进入该目录
原因:满足目录x:目录可以进入
测试四:zhn账户新建test3文件,里面写入数据test3权限为-w-,此时zhn账户无法读取test3文件里面的数据,vim也无法修改数据.
原因:只有w写权限,无r读取权限,因为我们操作vim去修改文件,是要先读后写数据的,由于读不到数据,故而失败。
重点总结:
v1.如果我们想让某个账号拥有读取某个目录数据的权限时,只赋予r读权限是不行的,因为没有x执行权限,该账号根本进不去目录,这种权限错误,经常出现在配置服务器端程序时出现。故开放目录权限要rx权限配合。
v2.赋予权限w写权限要慎重,尤其是目录w权限,测试账户没有该文件的w写权限,但是因为他有该级文件目录的w写权限,虽然不能修改数据,但是人家能直接删除掉该文件,这是十分恐怖的。
v3.想要修改文件数据,要赋予rw权限,只赋予r读权限或w写权限都不行。
3.用户
概念:指账号用户,如本次测试的账户zhn,对应的UID为1000,UID1000以内为系统账户。
新建用户:
useradd -m user
useradd -m -u uid 指定UID
useradd -m -u uid -g group -G group user 指定UID和初始用户组和次要用户组
设置密码:passwd user
修改用户数据:usermod -u uid -g group -G group
删除用户同时删除home目录:userdel -r user
用户管理文件 /etc/passwd详解
zhn账号这一行,有7个参数,分别以冒号隔开
zhn:x:1000:1000:ubuntu,,,:/home/zhn:/bin/bash
参数1:账号名称为zhn
参数2:密码,早期linux版本存放密码的字段,由于以前为明文不安全,现版本以X代替,实际密码保存在shadow文件中
参数3:用户UID码1000,系统是以UID来区分用户的
参数4:用户GID码1000,用户初始用户组ID
参数5:账号描述的相关信息ubuntu
参数6:家目录位置/home/zhn
参数7:shell所使用的bash种类位置
用户密码存放文件 /etc/shadow详解
zhn账号这一行,有9个参数,分别以冒号隔开
zhn:$1$ZldHvZD4$zZ6XdcOJGwTmZAVZ3vsHL/:18394:0:99999:7:::
参数1:账号名称为zhn
参数2:密码,账号密码的实际保存位置(加密)
参数3:最近修改密码日期,1970年1月1日开始累加
参数4:密码不可被修改的天数,0代表随时可修改
参数5:密码需要重新修改天数(强制),99999代表无限期。
参数6:密码提示警告天数,7代表密码到期前的7天之内提醒用户密码到期
参数7:密码到期后宽限天数,到期后登陆系统强制更改密码
参数8:账号失效日期,账号无法登陆
参数9:保留字段
4.用户组
概念:账号用户所属的分组,如zhn账户对应的组GID为1000,也就是zhn组,GID1000以内为系统账户。
一个用户可以加入多个用户组,例如zhn账号加入了 zhn adm cdrom sudo dip plugdev lpadmin sambashare组
初始用户组:/etc/passwd 第四个参数为初始用户组GID,例如zhn账号对应的初始用户组为zhn,GID为1000,用户账号登陆时获得初始用户组权限(默认有效用户组)。
有效用户组:一个用户可以加入多个用户组,用户可以切换任意一个用户组为有效用户组,同时获得该用户组的权限。
将zhn账户加入到zhn2组:gpasswd -a zhn zhn2
将zhn账户有效用户组切换到zhn2组: newgrp zhn2
以zhn2组权限,创建文件hello
将zhn账户从zhn2组中删除 gpasswd -d zhn zhn2
组管理文件/etc/group详解
zhn账号这一行,有4个参数,分别以冒号隔开
zhn:x:1000:
参数1:用户组名称为zhn
参数2:组密码,早期linux版本存放密码的字段,由于以前为明文不安全,现版本以X代替,实际密码保存在gshadow文件中
参数3:用户组GID码
参数4:此用户组账号成员,多个账号以逗号隔开。
例如adm:x:4:syslog,zhn
组密码存放文件 /etc/gshadow详解
zhn账号这一行,有4个参数,分别以冒号隔开
zhn:!::
参数1:组名称
参数2:组密码实际保存位置,!表示无组管理员
参数3:组管理员账号
参数4:此用户组账号成员,多个账号以逗号隔开。
例如adm:x:4:syslog,zhn
用户组相关命令:
新增用户组:groupadd -g gid groupname
修改用户组gid和名字 groupmod -g gid -n groupname
删除用户组:groupdel groupname
好了,通过以上相关解析,我们对Linux权限部分知识已经了解的很详细了,接下来我们玩个高端点的,不通过命令,直接修改Linux系统文件来创建一个名称为diy账户。(以下操作请在虚拟机上谨慎操作)
1.在/etc/passwd中写入 diy:x:1003:1003:diy:/home/diy:/bin/bash
2.在/etc/group中写入 diy:x:1003:diy
3.在/etc/shadow中写入
diy:$6$FdfJBvjn$anlrkpUBUhQ54ctB5otYw69xYdiHNcm0KxLYw.S/NHj.GVNwCAwdY8xFHTXZWe.ZI9GPXYs.8kvPPeJSvfdcJ0:18435::::::
4.在/etc/gshadow中写入 diy:!::
5.切换root账户,创建/home/diy 目录
6.将/home/diy目录权限改为diy chown -R diy:diy diy
7.将diy账户加入到sudo分组,赋予sudo权限 sudo:x:27:zhn,diy
以下为结果
5.su、su - 和sudo
su: 使用su切换账户时,为非登陆shell的方式切换,环境变量不会改变,同时不会切换home目录。
su - :树用su -切换账户时,为登陆shell的方式切换,环境变量会切换成新用户的环境变量(例如Path变量),同时切换home目录。(推荐以su - root 的方式切换)
sudo: 普通用户可以以sudo命令,临时执行root身份才能执行的命令,但要拥有使用sudo的权限。
su - root 和sudo的区别:前者需要输入root账户的密码,后者只需要输入当前账号密码。
/etc/sudoers文件详解 visudo
%sudo ALL=(ALL:ALL) ALL
参数1%sudo:sudo用户组的账户。
参数2ALL:所有登陆主机的身份,包括远程。
参数3(ALL:ALL): (用户:用户组)什么用户组什么用户可以执行sudo命令。
参数4:ALL:可以执行的命令(绝对路径限制),ALL代表所有。
由于sudo用户组存在于/etc/sudoers文件中,所以我们将zhn2账户加入到sudo组,就赋予了zhn2账户的sudo命令使用权限。
gpasswd -a zhn2 sudo
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/82862.html