首页 > 代码库 > 《Linux 就是这个范儿 - 阅读笔记2》 融于心而表于行

《Linux 就是这个范儿 - 阅读笔记2》 融于心而表于行

用户的身份

        Linux 下的用户等级实际上是非常简单的,就两个等级 root 和非 root。root 用户在 Linux 下是拥有至高无上的权利的,也就是说它可以胡作非为。但是比较幸运的是,只有一个用户是 root,它的用户名就叫 root。而非 root 用户的权利是严格受限的,只能访问由 root 规定的文件。

澡堂子模型

        我们把 Linux 的用户管理方式比喻成一个澡堂子模型,因为这非常形象。所有非 root 用户,都只是这个澡堂子的顾客:root 用户则是这个澡堂子的服务生;Linux 系统就是这个大澡堂子。

        去过澡堂子的人都知道,一进门就会有服务生接待你,让你登记并发给你一个带有号牌的钥匙。这个过程跟 root 用户给其他用户分配帐号是一个道理。登记是向系统中添加用户,钥匙是给你登录系统的密码,而号牌上的号码就是你的用户名。

        当你获得钥匙之后,就可以进入更衣室了。更衣室一般都会有几组大柜子。每个大柜子又有 n 多的小柜子组成,其中有一个小柜子是属于你的。怎么找到属于你的柜子呢?看柜子上面的号码!这个号码与你钥匙号牌上的号码是一致的。

        这个过程跟我们登录 Linux 系统的过程很相似。正确登陆后,我们就会拥有一个自己的文件目录,这个目录一般是 /home/[username],后面的 [username] 与你的用户名相同。一般称这个目录为“home 目录”。更衣室的柜子就是你的 home 目录,里面可以放入一些你的私人物品,可以保证别人偷不走。

        只要离开你的 home 目录,就进入了公共区间。一般都是只读的,但有少数的位置是能够写入数据的,比如 /temp 目录。在使用 Linux 的过程中如果忘记了自己的密码,只要向 root 用户申请,就能够变更新的密码。

理解用户角色

        在 Linux 系统中还有一些用户是用来完成特定任务的,比如 nobody、admin、ftp 等。需要注意,在 Linux 中不管用户名看起来有多牛,只要不是 root ,它就一定是个普通用户,权力大小都是相同的。很多资料上说的所谓用户角色的概念,尤其是说角色不同然后权限不同的观点不是十分精准,很容易造成 Linux 用户有权限大小的印象。其实所谓的权限,则是不同的用户所能访问的文件不同而产生的一种假象。而这种假象又不是单独一个用户的概念能决定的,还要用到用户组的概念。

        什么是用户组呢?可以把它理解为用户的职业。一个用户可以属于多个用户组,而且还要注意,一个用户至少应该属于一个用户组。

        虽然用户角色不能跟权限靠上关系,但不同角色有些时候还是有待遇差别的,所谓的待遇就是是否拥有密码、home 目录以及 shell 这些资源。有些用户的主要任务就是运行某些服务程序以确保安全的,比如 nobody 用户就可以用于 Nginx(一个高性能的 HTTP 和反向代理服务器) 的工作进程。对于这类用户一般是不分配密码和 shell(严格来说还是分配 shell 了的,只是分配的是 /sbin/nologin 这个特殊的 shell。) 的,甚至 home 目录也没有。为什么要这么做呢?

        首先,可能会有很多服务程序默认使用这个用户,如果设置了密码,程序就无法自动使用了;其次,因为不会有人使用这个用户登录系统,也就没有必要分配一个 shell 给它,然而私有的 home 目录也显得有些多余。

/etc/passwd文件查看用户

        /etc/passwd 文件,它是用来存放用户基本信息的。这个文件的部分内容如下:

[root@linux lixin]# more /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologingopher:x:13:30:gopher:/var/gopher:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologin......pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologinwebalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologinpiranha:x:60:60::/etc/sysconfig/ha:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinpostgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bashluci:x:141:141:luci high availability management application:/var/lib/luci:/sbin/nologinmysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bashdovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologindovenull:x:495:491:Dovecot‘s unauthorized user:/usr/libexec/dovecot:/sbin/nologintcpdump:x:72:72::/:/sbin/nologinjason:x:500:500:Jason Yang:/home/jason:/bin/bash

        文件的每一行都代表一个用户。换句话说,这个文件有几行你的系统中就拥有几个用户。每一行由冒号“:”分割成7个字段,其结构如下所示:

用户名 : 密码 : UID : GID : 用户全名 : home 目录 : shell

        这个文件中比较重要的是 UID(User ID)GID(Group ID),无论是用户还是用户组,Linux 只靠它们来识别。所以 UID 和 GID 都只是一个数字。为了区别不同的用户或用户组,需要保持它们自身在系统中的唯一性。UID 和 GID 是可以相同的,因为它们代表的是不同的概念(可以把他们理解为两张数据库表中的主键值),都为 0 的 UID 和 GID 是 Linux 系统中比较特殊的,它们分配给 root 用户和 root 用户组。UID 和 GID 是可以通过程序获取的,所以可以通过这个特殊的值来判断是否能够胡作非为。

        虽然系统只区别 0 和 非零的 UID 和 GID,但是在使用习惯上还是进行了一些分段的(类似我们的平时分配端口号那样)。0 自然不用说,就是给 root 的;1~499是属于系统用户的,比如前面提到的那些待遇比较差的和一些甚至是占坑的就属于这类;500~4294967295是分配普通用户的。所以你会发现,你系统中的第一个被添加的用户的 UID 和 GID 都是 500。

        未完,待续。。。

《Linux 就是这个范儿 - 阅读笔记2》 融于心而表于行