运维的基石(二)用户与权限

网友投稿 1004 2022-10-02

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

运维的基石(二)用户与权限

1 用户与用户组

1.1 用户

多用户是为了Linux方便区分权限的方式,为了防止用户将自己误限制权限,引入了超级用户root的概念,即root不受用户权限体系限制,在生产环境中非必须情况下不建议直接使用root来进行操作就是这样的原因, 我们在新闻中多次看到某运维误删除了文件,多数是因为滥用root权限导致。因此我们这里讨论的权限也是用非root 用户来讨论的。

用户使用useradd命令注册到系统中,这里使用了最稳定的方式存储,即文件。默认将用户添加到/etc/passwd文件,每行一个用户,Linux判断用户是否存在使用的就是/etc/passwd文件,查看是否包含用户名称的一行,所以人为删除整行即删除了用户。userdel做的就是相同的事情。

1.2 密码

为了让用户密码得到有效保护,用户密码放入/etc/shadow中,权限限制的极为严格,只有root能够查看

[root@localhost ~]# ll etc/shadow

----------. 1 root root 819 Dec 21 20:03 etc/shadow

[root@localhost ~]# cat etc/shadow

root:$6$nIPxfuFjLsdrO7eh$af9xUAir3h9hOlaA26DMp2w0MBAz4jCYYmqZm6fFfheSWDKRlc6v9/bQeorNRPbS5463p4C1VKIGRDOYEBVfb1:17521:0:99999:7:::

第二个字段$6$nIPxfuFjLsdrO7eh$af9xUAir3h9hOlaA26DMp2w0MBAz4jCYYmqZm6fFfheSWDKRlc6v9/bQeorNRPbS5463p4C1VKIGRDOYEBVfb1 就是散列之后的密码,使用SHA-512散列,只能穷举,不能逆向运算,保证了一定的用户安全。而且其中使用了$6$nIPxfuFjLsdrO7eh$ 这段被称作salt值,避免明文相同的密码,散列后的内容也相同,被撞库。一定程度上增强了安全性,但是仍然建议管理员使用复杂密码和定期改密策略,因为现代GPU技术和通用计算能力增强,原有安全的密码也会因为穷举速度加快,变成有风险的密码。

检查自己的密码是否是弱口令可以使用john工具,在官方网站下载源代码,执行如下命令编译安装:

xz -d john-1.8.0.tar.xz

tar xf john-1.8.0.tar

cd john-1.8.0/src

make

make clean linux-x86-64

执行方法为:

[root@localhost run]#cd ../run

[root@localhost run]# ./john  --single etc/shadow

Loaded 1 password hash (crypt, generic crypt(3) [?/64])

Press 'q' or Ctrl-C to abort, almost any other key for status

0g 0:00:00:07 100% 0g/s 364.0p/s 364.0c/s 364.0C/s 999991907..999991900

Session completed

1.2 用户组

为了方便管理相同权限或属性的一组用户,引入了用户组的概念。当建立一个新的用户,未指定用户组时,会创建同名用户组

2 权限

2.1 普通文件权限

在文件中标注的权限分成三部分,即对文件所属用户的权限、文件所属组的权限、其他人的权限。判断一个文件是否可读写还有结合进程才能知晓,因为进程启动时会标记启动该进程的用户,而且还会根据预先写好的程序,设置有效用户id ,如nginx,我们以root身份启动后, nginx会使用seteuid(2)来设置自己的有效用户id为nginx,那么nginx进程对文件请求时使用的用户身份就是nginx,那对应权限位置也要看下文件的用户是否为nginx,如果不是,那么判断组、继而再根据其他权限来判断该进程是否有文件读写权限。

所以在修改权限过程中chomd、chown两条命令都会经常用到,这里特别强调的是shell脚本,除了执行权限外,由于shell为解释语言,所以对于执行用户r权限也是必须的。

2.2 目录文件权限

目录文件权限需要注意的是x权限位, x权限位为目录文件操作必须的权限,因为目录文件的特殊性(相对普通文件),对目录的基本操作命令cd、ls、rmdir 等都需要对目录内容进行读取操作,这点也是特别要注意的。

2.3 粘着位

这是一个古老的问题,记住一个规则就可以,粘着位只对目录有效,如/tmp目录,、/tmp下拥有此文件或者目录的用户才能修改这些文件,这是为了避免误删他人文件而设置的一个特殊权限,当然root是不受到限制的。

3 符号链接与硬链接

3.1 符号链接

符号链接是指向文件的间接指针,对符号链接的权限修改、内容修改都会修改指向文件,但是要注意创建符号链接可能会导致文件系统进入死循环,参考《APUE》的例子如下:

[root@localhost ~]# ln -s ../foo foo/testdir[root@localhost ~]# ls -l foototal 0-rw-r--r-- 1 root root 0 Dec 22 17:04 alrwxrwxrwx 1 root root 6 Dec 22 17:05 testdir -> ../foo[root@localhost testdir]# cd testdir/testdir/[root@localhost testdir]# pwd/root/foo/testdir/testdir/testdir/testdir[root@localhost testdir]# lsa  testdir[root@localhost testdir]#

这里的死循环不会造成太大问题,使用rm命令删除testdir符号链接即可打破循环,rm命令这里调用了unlink(2)调用,unlink(2)调用不跟随符号链接。另一种链接就不会这么简单了。

3.2 硬链接

另一种叫做硬链接,硬链接的要求是不允许跨越文件系统建立,硬链接需要大家注意的一点是它在删除时不会真的消失,只有目中文件名称和文件inode只有唯一连接时,删除才会将文件名回收, 数据还是存储在磁盘中的。考虑上面的循环情况,硬链接只有超级用户特权才可以对目录建立,但是这里并不推荐大家手动建立目录硬链接, 只保证有“.”和“..”才是最好的情况。

4 设备特殊文件

设备特殊文件的权限不建议管理员进行修改,设备特殊文件是通过主设备号和次设备号与设备关联的,如:

[root@localhost testdir]# ll /dev/sda1

brw-rw---- 1 root disk 8, 1 Dec 21 20:08 /dev/sda1

这里的sda1表示block设备 ,主设备号为8 , 次设备号为1 ,设备文件通过mknod 命令创建,以文件表示主要用于对裸设备直接操作,如经常分区时使用的parted mkfs 等命令。

5 特殊目录

在linux中还有些目录的内容并不真实存在在系统磁盘上面, 它们是系统运行时的状态信息,为了方便用户,以文件形式表现出来,通常这里文件也无法进行写操作,对这些文件的用户权限也不建议人为进行修改,如/proc、/sys 目录

参考资料《UNIX 环境高级编程》

上一篇:MySQL 好书推荐 第001期:《MySQL运维内参》
下一篇:Java-Spark系列9-Spark 运维管理
相关文章

 发表评论

暂时没有评论,来抢沙发吧~