本文接Linux入门记录一、Linux入门记录二的章节,为你讲述在Linux下获取帮助、Linux用户基础、Linux下权限机制及Linux下扩展权限。
Linux 入门记录:Linux 下获取帮助 一、获取帮助 Linux 提供了极为详细的帮助工具和文档,通过查阅相关文档,可以大大减少需要记忆的东西并提高效率。 二、--help参数 几乎所有命令都可以使用 -h 或 --help 参数获取命令的详细信息。 三、man命令 man 命令使 Linux 中最为常见的帮助命令,将要获取帮助的命令作为参数执行 man 命令,就可以获取相应的文档帮助。 man 文档分为很多类型:
man -k keyword 可以用来查询包含特定关键字的文档。 四、info命令 info 和 man 类似,但是提供的信息更为详细深入,以类似网页的形式显示。 man 和 info 都可以通过"/关键字"的方式进行搜索。 五、doc目录 很多程序、命令都带有详细的文档,以 txt、html、pdf等多种方式保存在 /usr/share/doc 目录中,这些文档是相应的程序最为详尽的文档。Windows 下可能是一个 chm 文档,Mac 下可能是一个 pdf 文档。
Linux 入门记录:Linux 用户基础 一、用户、组 1.用户 当我们使用 Linux 时,需要以一个用户的身份登录,一个进程也需要以一个用户的身份运行。用户限制使用者或进程可以使用或不可以使用哪些资源。 2.组 组用来方便地管理用户。 每个用户拥有唯一 uid,操作系统实际使用的是用户 ID,而不是用户名 每个用户属于一个主组,属于一个或多个附属组 每个组拥有一个 gid 每个进程以一个用户身份运行,并受该用户可访问的资源限制 每个可登陆用户拥有一个特定的 Shell 二、用户 用户 ID 为 32 位,从 0 开始, 但是为了和旧系统兼容,用户 ID 限制在 60000 以下。Linux 用户分为以下三种: 1.root 用户(ID 为 0 的用户为 root 用户) 2.系统用户(ID 范围 1 ~ 499),专门为使用某些程序或服务的用户,没有 Shell 3.普通用户(ID 为 500 以上) 系统中每个文件都有一个所属用户及所属组。 使用 id [username] 命令可以显示当前用户的信息。使用命令 passwd [username] 可以修改当前用户密码。指定用户名可以显示特定用户的信息和密码。 下图中,普通用户 mingc 的 uid 为500,gid 为 500。 每个用户在创建以后,默认会创建一个与该用户同名的主组(gid),并且该用户属于该组。 后面的 groups 是附属组。
三、相关文件 这里有关用户的(配置)文件有 3 个: /etc/passwd - 该用户文件用于保存用户信息 /etc/shadow - 该密码文件保存用户密码(加密的) /etc/group - 组文件保存了组信息 1.看看 /etc/passwd 文件用户信息:
其中,每一行都是一个用户信息,多个字段之间用冒号 ":" 分隔,格式为: 用户名:密码:用户ID:组ID:描述信息:用户目录:登陆用的Shell “密码”显示 "x" 表示用户密码保存在 /etc/shadow 密码文件里。 上图中: mingc 用户(就是我了),uid 为 500(在 500 以上)表示普通用户,我的用户目录是 /home/mingc,使用的 Shell 是 /bin/bash,就是大家都用的 Bash 了。 apache 用户,uid 为48(在 1 ~ 499 之间)表示系统用户,他的用户目录是 /var/www 目录,使用的 Shell 是 /sbin/nologin,即没有 Shell。这个系统用户显然是用来专门使用 Apache 服务的。 uid 为 0 的自然是 root 用户了。 2.再看下 /etc/shadow 密码文件信息:
其中,每一行都是一个用户密码信息,多个字段之间用冒号 ":" 分隔,格式为: 用户名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志 “加密口令”显示星号 "*" 表示账号被锁定,两个感叹号 "!!" 表示密码已过期," " 开头表示加密类型是 SHA-512 加密。 详细请参考:Linux 下 /etc/shadow 文件 Linux操作系统下有一个文件负责所有用户的密码。那就是shadow。该文件的权限必须设置为: -r- — — (400)或者 -rw — —(600) 即:Linux /etc/shadow文件是只有系统管理员才有权利进行查看和修改的文件。 /etc/shadow文件中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生。 它的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用“:”隔开。这些字段是: 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志 1)“登录名”是与/etc/passwd文件中的登录名相一致的用户账号 2)“口令”字段存放的是加密后的用户口令字,如果为空,则对应用户没有口令,登录时不需要口令; 星号代表帐号被锁定; 双叹号表示这个密码已经过期了。 $6$开头的,表明是用SHA-512加密的, $1$ 表明是用MD5加密的 $2$ 是用Blowfish加密的 $5$ 是用 SHA-256加密的。 3)“最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在SCOLinux中,这个时间起点是1970年1月1日。 4)“最小时间间隔”指的是两次修改口令之间所需的最小天数。 5)“最大时间间隔”指的是口令保持有效的最大天数。 6)“警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。 7)“不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。 8)“失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。 3./etc/group 组信息:
其中,每一行都是一个组信息,多个字段之间用冒号 ":" 分隔,格式为: 组名:组密码:组ID:组用户 “密码”显示 "x" 表示密码保存在 /etc/gshadow 组密码文件里。 “组密码”现在几乎不用了,以前旧的系统上没有附属组的概念,一个用户只能属于一个组,但很多时候需要用户属于多个组,只要用户知道要换的那个组的“组密码”,就可以切换所属组。但现在有了附属组的概念,所以这个“组密码”几乎不用了。留着是为了向后兼容。 四、查看登录用户 命令 whoami 显示当前用户 命令 who 显示有哪些用户已经在登录系统 命令 w 显示有哪些用户已经在登录并且在干什么 Linux 中有个约定俗成的习惯,命令越长,显示出来的信息越少,命令越短,显示出来的信息越多。这三个哲学命令就是这样的:
五、创建新用户 命令 useradd 用来创建一个新用户: useradd username 这个命令会执行以下操作: 在 /etc/passwd 用户文件中添加用户信息 如果使用 passwd [username] 命令创建密码,则将该密码保存在 /etc/shadow 密码文件中 为用户建立一个新的用户目录:/home/username 将 /etc/skel 中的文件拷贝到用户目录中,比如一些必要的说明文档 建立一个与用户名同名的组,该用户默认属于该组 常用参数: -d 指定用户目录 -s 指定登录Shell -u 指定用户ID(uid) -g 指定主组ID(gid) -G 指定附属组,组名或组id(最多 31 个,用逗号 "," 分割) 也可以通过直接修改用户信息文件 /etc/passwd 的方式实现,但不建议 六、修改用户信息 命令 usermod 用来修改用户信息: usermod 参数 username 常用参数: -l 新用户名 -u 新用户ID -d 新的用户目录 -g 所属主组 -G 所属附属组 -L 锁定用户使其不能登录 -U 解除锁定 七、删除用户 命令 userdel 用来删除指定用户: userdel username (会保留 /home 下的用户目录) userdel -r username (同时删除用户目录) 八、组 几乎所有操作系统都有组的概念,通过组,我们可以更加方便地归类和管理用户。一般来讲,我们使用部门、职能和地理区域的分类方式来创建使用组。 每个组都有一个组ID(gid) 组信息保存在组文件 /etc/group 中 每个用户都拥有一个主组,同时还可以拥有最多 31 个附属组 九、创建、修改、删除组 命令 groupadd 用来创建新组: groupadd groupname 命令 groupmod 用来修改组信息: groupmod -n newname oldname 修改组名 groupmod -g newid groupname 修改组ID(gid) 命令 groupdel 用来删除组: groupdel groupname
Linux 入门记录:Linux 权限机制 一、权限 权限是操作系统用来限制资源访问的机制,权限一般分为读、写、执行。 系统中每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户、哪些组可以对特定的文件进行什么样的操作。 每个进程都是以某个用户的身份运行,所以进程的权限与该用户的权限一样,用户的权限越大,该进程所拥有的权限也就越大。 二、文件权限 Linux 中,每个文件拥有以下三种权限:
所以,目录必须拥有 "x" 权限才可查看其内容。很多时候,执行权限 "x" 对于目录而言也叫浏览权限。仅有 "r" 权限是无法查看目录内容的(因为连访问都做不到)。 三、UGO模型 Linux 权限基于 UGO 模型进行控制: U 代表 User,是文件或文件夹所属用户的权限;G 代表 Group,是文件或文件夹所属组的权限;O 代表 Other,是其他用户对文件或文件夹的权限 每一个文件的权限基于 UGO 模型进行设置 权限三个一组(rwx),对应 UGO 分别设置(总共有 3 个组 9 个权限) 每一个文件拥有一个所属用户和所属组,对应 U、G模型;不属于该文件所属用户和所属组的使用 O(Other)模型对应的权限 命令 ls -l 可以查看当前目录下所有文件的详细信息:
上图中,每一行的格式如下:
四、修改文件所属用户和组 命令 chown 用以改变文件的所属用户: chown username filename 常用参数: -R 归地修改目录下所有文件的所属用户 命令 chgrp 用以改变文件的所属组: chgrp groupname filename 常用参数: -R 递归地修改目录下所有文件的所属组 五、修改文件权限 命令 chmod 用以修改文件的权限: chmod mode filename mode 参数格式如下: u、g、o 分别代表用户、组、其他 a 代表ugo +、- 代表加入或删除对应权限 r、w、x 代表三种权限 -R 递归地修改 示例: chmod u +rw test.md 给文件的所属用户添加rw权限 chmod g -x test.md 给文件的所属组移除x权限 chmod go +r test.md 给文件的所属组和其他用户添加r权限 chmod a -x test.md 给文件的所属UGO三个模型均移除x权限 命令 chmod 也支持以三位八进制数值的方式修改权限,rwx 权限值分别由数字表示如下: r = 4 (2 ^ 2) w = 2 (2 ^ 1) x = 1 (2 ^ 0) 使用数字表示权限时,每组权限分别为对应数字之和: rw = 4 + 2 = 6 rwx = 4 + 2 + 1 = 7 r-x = 4 + 1 = 5 所以,使用数字表示 UGO 权限时,可以用如下方式表示: chmod 0660 test.md 设置 UGO 权限为 rw-rw---- chmod 0775 test.md 设置 UGO 权限为 rwxrwxr-x 六、实例 案例描述 现在有个某公司 Company,部门和员工如下:
不行了,名字想不出来了。 现在,要为每个部门和员工建立相应的工作文件夹,要求如下: 1.所有目录、文件均保存在一个统一的文件夹下 2.每个部门拥有一个独立的文件夹 3.不同部门之间不能访问对方文件夹 4.每个员工在所在部门文件夹下拥有一个所属的文件夹 5.相同部门不同员工之间可以查看对方的文件夹,但不可修改,员工只能修改自己的文件夹 解决方案 好的,下面开始: 用组来表示部门,用用户来表示员工,我以 root 用户登录添加组和用户,并为用户指定附属组(部门):
为了让整个公司的文件夹 Company 有足够的访问权限,在根目录 "/" 下创建公司的文件夹目录 /Company,并创建三个部门子目录,去掉每个部门目录的 O 模型权限并指定所属部门:
OK,这样就满足了前 3 个要求:有统一文件夹和多个不同的部门目录,并且不同部门之间全没有 O 模型权限,不能访问对方。 下面继续创建员工目录,并为每个目录指定它的所属员工和所属部门:
好的,第 4 和第 5 个要求也满足了:每个员工有自己的文件夹,并且不同员工之间只能查看不能修改。 最后测试一下,登录 LiLei 账号:
不同部门之间不能查看,同一部门之间可以查看不能修改,完成。
Linux 入门记录:Linux 扩展权限 一、默认权限 每一个终端都有一个 umask 属性,是用来确定新建文件或目录的默认权限的“掩码”(mask 有“掩码”的含义,至于 u,后面说)。 Linux 中一般有默认的权限掩码,使用命令 umask 用以查看或设置: umask 查看默认掩码 umask 0022 设置默认掩码 一般地,普通用户(uid 为 500 以上)的权限掩码默认为 0002,root 用户(uid 为 0)的权限掩码默认为 0022。 如果新建了一个文件或目录,那么这个文件或目录的默认权限等于 文件或目录的默认最高权限 & (~ umask) 。 那么,“文件或目录的默认最高权限”是多少呢?一般来说,目录的默认最高权限是 0777,文件的默认最高权限为 0666(去掉了 x 权限,禁止执行,安全考虑)。注意:Linux 的权限值是八进制的!所以,网上的某些所谓十进制减法运算来计算新建文件或目录默认权限的逻辑是错误的。还有什么分情况讨论的,在我看来实在麻烦。用计算机思维来理解计算机,这是我认为最合理、最准确且最简单的思维方式。 怎么记忆和理解这个运算逻辑? umask,我把它的中文全称记为用于“位取反的权限掩码”。“位取反” 来自 "u",“掩码” 来自 "mask" 。拿这个位取反的权限掩码(~ umask)跟默认最高权限相与 "&",就得到了新建文件(或目录)的默认权限。 怎么理解? 这里主要是“掩码”:掩码是用来和目标数进行位与 "&" 运算,取得目标数里跟掩码的位均为 1 的位组合,并将跟掩码中位为 0 的对应位全部丢弃。掩码的原理是的原理,任何数和 1 相与都是它本身,任何数和 0 相与都是 0。而一个数跟掩码的反码(位取反)进行位与 "&" 运算,得到结果恰恰相反,结果是保留这个数里跟掩码里位为 0 相对应的位,丢弃跟掩码里位为1 相对应的位。 这里的 umask 就是这个作用,用默认最高权限跟取反的 umask 相与,就从默认最高权限里丢弃了 umask 不允许的权限。所以并不是简单的十进制减法运算,例如 umask 值为 0022 和 0033 的时候,普通用户新建文件的默认权限都是 0644(因为 0666 & (~ 0022) 和 0666 & (~ 0033) 的运算结果是一样的),用 rwx 符号表示就是 -rw-r--r-- 。 二、特殊权限 除了普通权限外,还有三个特殊权限:
拥有suid权限的passwd命令 Linux 中普通用户的密码口令都保存在 /etc/shadow 文件里,这个文件的权限是只有root用户和root组才可以访问的。那么普通用户是怎么修改自己密码的呢?Linux 提供了 passwd 命令,普通用户使用这个命令来修改自己的密码:
我们看到,这个 passwd 命令的 U 模型里有个 "s" 占用了原来的 "x" 权限,这表示执行该命令的用户拥有 "suid" 权限,以 root 用户身份来运行,所以普通用户可以通过执行 passwd 命令来修改自己的密码,并将它写到 /etc/shadow 文件里。 三、设置特殊权限 设置 suid: chmod u+s filename 设置 sgid: chmod g+s filename 设置 sticky: chmod o+t filename 其中,设置 sgid 权限会使 "s" 替换 G 模型的 "x" 权限,例如:"-rwxr-s---";设置 sticky 权限会使 "t" 替换 O 模型的 "x" 权限,例如:"drwxr-xr-t"。这里我所说的 G 模型、O 模型是 Linux 权限所采用的 UGO 模型。 一般来说,我们使用 sgid 来设置目录的权限,它允许了目录的子文件(或目录)自动继承该目录的所属组,常见的情况例如市场部目录的员工目录自动属于市场部用户组。经常使用 sticky 来设置目录下的用户可以删除自己的文件,但不能删除别人的文件,例如营销部目录的员工文件可以被员工删除,但不能删除同事的文件。 与普通权限一样,特殊权限也可以用八进制数值表示: suid = 4 (2 ^ 2) sgid = 2 (2 ^ 1) sticky = 1 (2 ^ 0) 所以,我们也可以通过以下命令设置: chmod 4755 filename 普通权限755,所属用户可读可写可执行,所属组和其他用户不可写,特殊权限允许以所属用户身份执行。
Linux入门记录系列 |