章节简述:
详细的为读者讲述了用户、用户组和其余人在系统中的不同身份与能力,以及文件的读(r)写(w)执行(x)权限的作用。
为了让系统更加的安全还需要学习SUID、SGID和SBIT的文件特殊权限,文件隐藏权限以及ACL访问控制列表。
学会su命令和sudo服务后一定能够满足您以非超级用户操作实验或日常工作的需求,同时也保证了系统的安全性。
本章目录结构 [收起]
• 5.1 用户身份与能力
• 5.2 文件权限与归属
• 5.3 文件的特殊权限
• 5.4 文件的隐藏属性
• 5.5 su命令与sudo服务
• 5.6 文件访问控制列表
5.1 用户身份与能力
类Unix系统的设计初衷就是为让多用户同时工作,所以也迫使Linux系统有了极强的安全性,在前面安装红帽RHEL7操作系统时还特别要求“设置root用户密码”,而root用户是存在于所有类UNIX系统中的"超级用户"。
root用户拥有极高的系统所有权,能够管理系统的各项功能,如添加/删除用户,启动/关闭进程,开启/禁用硬件设备等权限。虽然使用root用户工作时不会受到权限的控制,但老话讲“能力越大,责任就越大”,一旦我们使用这个高能的root用户敲出错误的命令就有可能毁掉整个系统,真得好好权衡下啊。
而其实"root"只是个名字,真正让它成为“超级用户”的是UID值:
UID(即User IDentification的缩写):每个用户都有对应的UID值,就像我们的身份证号码。
超级用户UID0:root用户默认为0。
系统用户UID1-999:系统中系统服务由不同用户运行,更加安全,默认被限制登陆系统。
普通用户UID1000~:即管理员创建的用于日常工作而不能管理系统的普通用户。
注意UID一定是不能冲突的,管理员创建的普通用户UID从1000开始(即便前面有闲置的号码)
帐户名称与UID保存在/etc/passwd文件中,而帐户密码则保存在/etc/shadow文件中。
GID(即Group IDentification的缩写):可将多个用户加入某个组中,方便指派任务或工作。
想象公司员工如果想要在同部门内共享资料,就可以加入自己的工作组如技术部、运维部、财务部……
每个用户在被创建时均会创建一个默认组(其GID与UID相同,俗称基本组)而后加入的则叫扩展组,一定要分清楚。
用户组名称与GID保存在/etc/group文件中。
5.2 文件权限与归属
Linux系统中一切都是文件,文件和目录的所属与权限——来分别规定所有者、所有组、其余人的读,写,执行权限。
读(read),写(write),执行e(xecute)简写即为(r,w,x),亦可用数字(4,2,1)表示
举例:如果某文件权限为7则代表可读,可写,可执行(4+2+1)。若权限为6(4+2)则代表可读,可写。
那么权限为5与3时分别代表了什么?想出答案后用鼠标选中下行即出答案(答案模式)
答案:权限为5代表可读(4)和可执行(1)。而权限为3代表可写(2)和可执行(1)。
例如下图中的文件所有者(属主)为root,所有组(属组)为root,文件名为instsall.log,权限位的第一个减号"-"代表的是文件类型:
-:普通文件,d:目录文件,l:链接文件,b:块设备文件,c:字符设备文件,p:管道文件
文件的权限为rw-r--r--也就是分别表示所有者(属主)有读写权限,所有组(属组)有读权限,其余人也仅有读权限。
Nice,那么你来做一题试试吧.若某目录的权限为754则分别表示的权限是什么?代表着什么?(答案模式)
答案:权限应为drwxr-xr--,分别代表该目录所有者可读写、执行,所有组可读,可执行,其余人仅可读取。
这个时候发现问题了吗?对于目录文件的读和写权限我们还可以理解,目录要能执行操作?
普通文件即实际保存数据的地方,其并不具备删除自身的权限:
r:可读取文件的实际内容
w:可编辑/新增/修改该文件的实际内容
x:可被执行
目录文件即保存有目录结构和文件权限:
r:可读取目录结构和权限
w:可更改目录结构列表、新建/删除/重命名/转移子文件/目录。
x:表示用户可进入到该目录中
5.3 文件的特殊权限
单纯对文件位置的rwx权限肯定不能满足我们对安全、便捷工作的需求,所以便有了SUID与SGID的特殊权限机制。
SUID:让执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)
比如所有用户都可以执行用于修改用户密码的passwd命令,但用户密码保存在/etc/shadow文件中,默认权限是000即除了超级用户root外的所有用户都没有查看或编辑该文件的权限,所以对passwd命令加上SUID权限位,则可让普通用户临时获得程序所有者的身份,即以root用户的身份将变更的密码信息写入到shadow文件中。
SGID:
功能一:让执行者临时拥有属组的权限(对拥有执行权限的二进制程序设置)
举例来说,在早期的Linux系统中/dev/kmem是一个字符设备文件,用于存储内核程序要访问的数据,权限为:
cr--r----- 1 root system 2,
1 Feb 11 2015 kmem
读者们看出问题了吗?除了以root身份或system组成员的用户都没有读取该文件的权限,但用户又需要使用系统的ps命令来查看系统进程状态,所以为了让用户能够获取到系统状态信息,ps命令的权限被加了SGID位:
-r-xr-sr-x 1 bin system 59346 Feb 11 2015
ps
这样因为被给予了SGID权限,所以当用户执行了ps命令,实际有效用户组就是system啦,于是便能够顺利的读取设备文件啦~
功能二:在该目录中创建的文件自动继承此目录的用户组(只可以对目录设置)
比如我们将某个部门的工作目录给予了SGID权限,这样所有人创建的文件都归相同的工作组,这样方便以后的管理。
chmod命令用于修改文件或目录的权限,格式为:"chmod [参数] 权限 文件或目录名称"。
chown命令用于修改文件或目录的所属主与所属组,格式为:“chown [参数] 所属主:所属组
文件或目录名称”。
chmod与chown的命令参数很简单记——对于文件不加参数,遇到目录加大写-R(递归,修改目录内所有文件的属性)。
创建工作目录并给予GID权限:
[root@vdevops ~]# cd /tmp
[root@vdevops tmp]# mkdir testdir
[root@vdevops tmp]# ls -ald testdir/
drwxr-xr-x. 2 root root 6 Feb 11 11:50 testdir/
[root@vdevops tmp]# chmod -Rf 777 testdir/
[root@vdevops tmp]# chmod -Rf g+s testdir/
[root@vdevops tmp]# ls -ald testdir/
drwxrwsrwx. 2 root root 6 Feb 11 11:50 testdir/
切换至普通用户vdevops,在该目录创建文件:
[root@vdevops tmp]# su - vdevops
Last login: Wed Feb 11 11:49:16 CST 2015 on pts/0
[vdevops@vdevops ~]$ cd /tmp/testdir/
[vdevops@vdevops testdir]$ echo "vdevops.com" > test
[vdevops@vdevops testdir]$ ls -al
total 8
drwxrwsrwx. 2 root root 17 Feb 11 11:50 .
drwxrwxrwt. 18 root root 4096 Feb 11 11:50 ..
-rw-rw-r--. 1 vdevops root 15 Feb 11 11:50 test
SBIT(Sticky Bit):只可管理自己的数据而不能删除他人文件(仅对目录有效)
一般老师希望学生可以将作业上传到某个特定目录——但为了避免某些小破坏份子,想限制删除其他人文件的话,那就要设置SBIT位了,当然也可以叫做特殊权限位之粘滞位。
切换至普通用户,进入tmp目录:
[root@vdevops tmp]# su - vdevops
Last login: Wed Feb 11 12:41:20 CST 2015 on pts/0
[vdevops@vdevops ~]$ cd /tmp
查看目录权限,最后的t就是代表的粘滞位:
[vdevops@vdevops tmp]$ ls -ald
drwxrwxrwt. 17 root root 4096 Feb 11 13:03 .
创建一个文件吧:
[vdevops@vdevops tmp]$ echo "for test " > test
[vdevops@vdevops tmp]$ chmod 777 test
给予这个文件最大的权限(rwxrwxrwx,777):
[vdevops@vdevops tmp]$ ls -al test
-rwxrwxrwx. 1 vdevops vdevops 10 Feb 11 12:59 test
此时切换到普通用户blackshield尝试删除该文件:
[root@vdevops tmp]# su - blackshield
Last login: Wed Feb 11 12:41:29 CST 2015 on pts/1
[blackshield@vdevops ~]$ cd /tmp
[blackshield@vdevops tmp]$ rm test
rm: remove write-protected regular file ‘test’? y
rm: cannot remove ‘test’: Operation not permitted
删除该文件时会提示错误,所以即便权限很充足,但因为特殊权限SBIT的缘故所以依然无法删除其他人的文件。
5.4 文件的隐藏属性
文件权限除了读写执行与SUID、SGID、SBIT外还有一种隐藏权限,例如明明有权限删除某个文件却报错了,或者仅能为某个文件追加内容而不能减少内容,遇到这种很“奇怪”的文件,就要怀疑是文件被设置隐藏权限了。
chattr命令用于设置文件的隐藏权限,格式为:“chattr [参数] 文件”。
参数 作用
i 将无法对文件进行修改,若对目录设置后则仅能修改子文件而不能新建或删除。
a 仅允许补充(追加)内容.无法覆盖/删除(Append Only)。
S 文件内容变更后立即同步到硬盘(sync)。
s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)。
A 不再修改这个文件的最后访问时间(atime)。
b 不再修改文件或目录的存取时间。
D 检查压缩文件中的错误。
d 当使用dump命令备份时忽略本文件/目录。
c 默认将文件或目录进行压缩。
u 当删除此文件后依然保留其在硬盘中的数据,方便日后恢复。
t 让文件系统支持尾部合并(tail-merging)。
X 可以直接访问压缩文件的内容。
lsattr命令用于显示文件的隐藏权限,格式为:“lsattr [参数] 文件”。
参数 作用
a 显示所有文件和目录。
l 显示隐藏属性的全称(默认简写成一个字母)。
R 递归处理,将指定目录下的所有文件及子目录一并处理。
d 若目标文件为目录,请加此参数。
写入一个名为vdevops,内容为"for Test"的普通文件:
[root@vdevops ~]# echo "for Test" > vdevops
尝试用rm命令删除,结果成功:
[root@vdevops ~]# rm vdevops
rm: remove regular file ‘vdevops’? y
再次写入vdevops文件:
[root@vdevops ~]# echo "for Test" > vdevops
添加仅允许追加的隐藏权限(无法删除与覆盖):
[root@vdevops ~]# chattr +a vdevops
再来尝试删除发现已经报错:
[root@vdevops ~]# rm vdevops
rm: remove regular file ‘vdevops’? y
rm: cannot remove ‘vdevops’: Operation not permitted
而用ls也无法看到不同的地方:
[root@vdevops ~]# ls -al vdevops
-rw-r--r--. 1 root root 9 Feb 12 11:42 vdevops
用lsattr命令则原形毕露了,果然是因为这个隐藏权限:
[root@vdevops ~]# lsattr vdevops
-----a---------- vdevops
去除对vdevops文件设置的隐藏权限:
[root@localhost ~]# chattr -a vdevops
再来看下vdevops文件的隐藏权限(已经没有了):
[root@localhost ~]# lsattr vdevops
---------------- vdevops
尝试删除该文件(已经可以顺利删除了):
[root@localhost ~]# rm vdevops
rm: remove regular file ‘vdevops’? y
出现问题?大胆提问!
因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~
您可以将报错的屏幕截图与自己的操作过程帖到“会员互助问答区”,一般问题都会在24小时内被解决。
5.5 su命令与sudo服务
我建议读者使用非超级用户的普通身份来操作实验或日常工作,这样会更加的安全,当执行了错误的命令后也很少会让系统完全崩溃,但因为许多的系统管理命令只有超级用户才可以使用,所以无疑也让用户受到更多的束缚,如何让普通用户执行这些程序呢?
su命令用于变更使用者的身份(切换登陆者),格式为:“su [-] 用户名”。
root用户切换到其他用户时无需输入密码,尝试切换到普通用户vdevops:
[root@vdevops ~]# su vdevops
成功切换后查看环境变量:
[vdevops@vdevops root]$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
普通用户再切换用户需要输入对方帐户密码才可以:
[vdevops@vdevops root]$ su root
Password:
若需将环境变量改变为新用户的,请加参数"-":
[root@vdevops ~]# su - vdevops
Last login: Mon Aug 24 19:27:09 CST 2015 on pts/0
再次查看环境变量:
[vdevops@vdevops ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vdevops/.local/bin:/home/vdevops/bin
从su切换用户模式中退出:
[vdevops@vdevops ~]$ exit
logout
回到root用户的身份:
[root@vdevops ~]#
sudo命令用于给普通用户提供额外权利来完成原本超级用户才能完成的任务,格式为:“sudo [参数]
命令名称”。
上面su命令允许普通用户完全变更为超级管理员的身份,但这也无疑会让系统增添很多的安全隐患,我们使用sudo程序可以仅将特定的命令/程序执行权限赋予给指定的用户,同时也避免了过多使用root身份,只要合理的配置sudo功能便可以合理的兼顾系统的安全性和用户便捷性,给读者的原则:
在保证普通用户完成工作的前提下,尽可能少的给予额外的权限。
总结来说sudo的特色功能有:
1:限制用户执行指定的命令。
2:记录用户执行的每一条命令。
3:配置文件(/etc/sudoers)提供集中的管理用户、权限与主机等参数。
4:验证过密码后5分钟(默认值)内无须再让用户验证密码,更加的方便。
sudo命令的常用参数包括有:
参数 作用
-h 列出帮助信息。
-l 列出当前用户可执行的命令。
-u 用户名或UID值 以指定的用户身份执行命令。
-k 清空安全时间,下次执行sudo时需要再次密码验证。
-b 在后台执行指定的命令。
-p 更改询问密码的提示语。
只用超级用户才可以使用visudo命令编辑sudo程序的配置文件(/etc/sudoers),visudo命令的优势:
防止多个用户同时修改sudo配置文件。
对sudo程序配置文件的语法检查。
visudo会调用vi编辑器来修改配置文件,而如果语法有报错则会报错:
visudo: >>> /etc/sudoers: syntax error near line 111
<<<
本文详细介绍了Linux系统中的用户身份、文件权限与归属,以及特殊权限如SUID、SGID和SBIT的作用。同时讲解了文件隐藏属性和访问控制列表,并演示了su命令和sudo服务的使用。
793

被折叠的 条评论
为什么被折叠?



