第一讲 管理用户和文件权限
今天要跟大家聊的是关于Linux操作系统的“管理用户和文件权限”,主要是以下几个点:
Linux基于用户身份对资源访问进行控制。
1、用户帐号:
2、组帐号:
3、UID和GID:
root用户的UID的固定值为0、root组帐号的GID号为固定值0;
1~499的UID、GID默认保留给程序用户使用,普通用户/组使用的UID、GID号在500~60000之间。
用户帐号文件用于保存用户的帐号基本信息。
文件位置:/etc/passwd,每一行对应一个用户的帐号记录。
举例释义:
[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/dev/null
nobody:x:99:99:Nobody:/:/dev/null
test:x:996:996::/home/test:/bin/bash
说个小秘密:
? ? ? ? (1)基于系统运行和管理需要,所有用户都可以访问passwd文件中的内容,但是只有root用户才能进行更改;
????????(2)在早期的UNIX操作系统中,用户帐号的密码信息是保存在passwd文件中的,不法用户可以很容易的获取密码字串并进行暴力破解,因此存在一定的安全隐患;
????????(3)后来经改进后,将密码转存入专门的shadow文件中(见下页)并严格控制全新,而passwd文件中仅保留密码占位符“x” 。
shadow用于保存密码字串、密码有效期等信息。
文件位置:/etc/shadow,每一行对应一个用户的密码记录。
举例释义:
[root@localhost ~]# cat /etc/shadow
root:$1$po/zD0XK$4HSh/Aeae/eJ6dNj1k7Oz1:19079:0:99999:7:::
bin:!*:18131:0:99999:7:::
nobody:!*:18131:0:99999:7:::
test:$1$po/zD0XK$4HSh/Aeae/eJ6dNj1k7Oz1:19649:6:99999:30:::
? ? ? ? (1)默认只有root用户能够读取文件中的内容,并且不允许root直接编辑该文件中的内容。
????????(2)上次修改密码的时间,表示从1970年01月01日(可理解为Unix系统的诞生日)算起到最近一次修改密码时间隔的天数。
useradd命令
????????格式:useradd ?[选项]... ?用户名
常用命令选项
????????-u:指定 UID 标记号
????????-d:指定宿主目录,缺省为 /home/用户名
????????-e:指定帐号失效时间
????????-g:指定用户的基本组名(或UID号)
????????-G:指定用户的附加组名(或GID号)
????????-M:不为用户建立并初始化宿主目录
????????-s:指定用户的登录Shell
最简单的用法是,不添加任何选项,只使用用户名作为useradd命令的参数,按系统默认配置建立指定的用户帐号。
下面演示以下添加用户的操作,重点演示 -d、-e、-g、-G、-s 等几个选项的用法,例如:
????????[root@localhost ~]# useradd -u 501 test1
????????[root@localhost ~]# cat /etc/passwd
????????test1:x:501:501::/home/test1:/bin/bash
????????[root@localhost ~]# useradd -g users -e 2029-07-30 test2?
?文件来源:新建用户帐号时,从 /etc/skel 目录中复制而来
主要的用户初始配置文件:
说个小秘密:
????????(1)充分理解这些文件的作用,便于我们安排一些自动运行的后台管理任务,例如:.bashrc文件中默认设置了一些命令别名;
????????(2)默认情况下,用户宿主目录下的初始配置文件只对当前用户有效,而全局配置文件对所有用户有效。
passwd命令:
????????格式:passwd ?[选项]... ?用户名
常用命令选项:
????????-d:清空用户的密码,使之无需密码即可登录
????????-l:锁定用户帐号
????????-S:查看用户帐号的状态(是否被锁定)?
????????-u:解锁用户帐号
说个小秘密:
? ? ? ?(1) “未设置密码”的用户帐号尚未完成初始化,处于不可登录状态,这与“空密码”的情况(已经为用户设置密码,但密码字串为空)是不同的—— “未设置密码”的用户将被禁止登录系统,而拥有“空密码”的用户是可以在本地终端登录的。
? ? ? ? (2)普通用户也可以使用passwd命令,但只能更改自己的密码,密码要求有一定的复杂性(如不要直接使用英文单词,长度保持在6位以上),否则系统可能拒绝进行设置.
? ? ? ? (3)被锁定的帐号也将无法登录系统。
usermod命令:
????????格式:usermod ?[选项]... ?用户名
常用命令选项:
????????-l:更改用户帐号的登录名称
????????-L:锁定用户账户
????????-U:解锁用户账户
????????以下选项与useradd命令中的含义相同
?????????????????-u、-d、-e、-g、-G、-s
注:usermod有两个选项“-L”、“-U”,分别用于锁定、解锁用户帐号,这两个选项与passwd命令的“-l”、“-u”选项作用基本相同,只不过大小写存在区别
userdel命令:
????????格式:userdel ?[-r] ?用户名
????????添加 -r 选项时,表示连用户的宿主目录一并删除
[root@localhost ~]# useradd test
[root@localhost ~]# ls -ld /home/test/
drwx------ 2 test test 4096 08-09 12:11 /home/test/
[root@localhost ~]# userdel -r test
[root@localhost ~]# ls -ld /home/test/
ls: /home/stu01/: 没有那个文件或目录
与用户帐号文件相类似:
????????/etc/group:保存组帐号基本信息
????????/etc/gshadow:保存组帐号的密码信息
groupadd命令:
????????格式:groupadd ?[-g GID] ?组帐号名
[root@localhost ~]# groupadd -g 1000 test
[root@localhost ~]# cat /etc/group
test:x:1000:
gpasswd命令:
????????用途:设置组帐号密码、添加/删除组成员
????????格式:gpasswd ?[选项]... ?组帐号名
常用命令选项:
[root@localhost ~]# grep "test" /etc/group
test:x:1000:test,root,adm
[root@localhost ~]# gpasswd -d test test
将用户“root”从“market”组中删除
[root@localhost ~]# grep "test" /etc/group
test:x:1000:test,adm
注:使用“-M”选项时可以为指定组帐号定义成员列表(注意:会覆盖原有组成员),需要添加多个用户到指定的组中时非常方便。
groupdel命令:
????????格式:groupdel ?组帐号名
[root@localhost ~]# groupdel test
[root@localhost ~]# grep "test" /etc/group
[root@localhost ~]#
注:删除组帐号后,从/etc/group文件中将查不到相应的记录
id命令
????????用途:查询用户身份标识
????????格式:id ?[用户名]
groups命令
????????用途:查询用户所属的组
????????格式:groups ?[用户名]
finger命令
????????用途:查询用户帐号的详细信息
????????格式:finger ?[-l] ?[用户名]
users、w 、who命令
????????用途:查询已登录到主机的用户信息
访问权限:
????????读取:允许查看文件内容、显示目录列表
????????写入:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
????????可执行:允许运行程序、切换目录
归属(所有权):
????????属主:拥有该文件或目录的用户帐号
????????属组:拥有该文件或目录的组帐号
chmod命令:
????????chmod是 Linux 和 Unix 系统中的一个命令,用于改变文件或目录的访问权限。这个命令可以控制哪些用户或用户组可以对文件或目录进行读取、写入或执行操作。
????????格式1(符号模式):chmod ? [ugoa] ?[+-=] ?[rwx] ?文件或目录...?
????????格式2(八进制模式):chmod nnn 文件或目录...
常用命令选项:
????????-R:递归修改指定目录下所有文件、子目录的权限
# 重新设置test文件的权限,为属主用户添加执行权限,去除其他用户的读取权限
[root@localhost ~]# chmod u+x,o-r test
[root@localhost ~]# ls -l test
-rwxr----- 1 root root 29588 05-12 06:19 test
# 重新设置test文件的访问权限,恢复为“rwxr-xr-x”
[root@localhost ~]# chmod 755 test
[root@localhost ~]# ls -l test
-rwxr-xr-x 1 root root 29588 05-12 06:19 test
# 使用递归的方式将“/home/test/”目录中所有子目录、文件的权限都设置为“rw-r--r--”
[root@localhost ~]# chmod -R 755 /home/test/
# 需要设置的具体权限值,如“777”、“644”等
chown命令:
????????chown是Unix和Linux系统中的一个命令,主要用于修改文件或目录的所属用户和组。这个命令的功能非常强大,它允许用户改变文件或目录的所有权,使其归属于另一个用户或组。
格式:
????????chown ?属主 ? 文件或目录
????????chown ?:属组 ?文件或目录
????????chown ?属主:属组 ?文件或目录
常用命令选项:
????????-R:递归修改指定目录下所有文件、子目录的权限
注:需要设置文件或者目录的归属时,可以通过chown、chgrp命令进行chown命令既可以修改属主,也可以修改属组,而chgrp命令只用于修改属组信息。
主要用途:
????????为可执行(有 x 权限的)文件设置,权限字符为“s”,其他用户执行该文件时,将拥有属主或属组用户的权限
SET位权限类型:
????????SUID:表示对属主用户增加SET位权限
????????SGID:表示对属组内的用户增加SET位权限
应用示例:/usr/bin/passwd
Q:问题来了,普通用户并没有权限修改“/etc/shadow”文件,那为什么可以修改自己的登录密码呢?
A:这是因为,passwd命令程序被设置了SUID权限,普通用户在执行该命令时临时获得相当于属主用户(root)的权限。
注意:不要轻易为可执行文件设置SET位权限,特别是对于那些属主、属组是root的执行程序,使用SET位权限时更应该慎重。例如,若为vim编辑器程序设置SUID权限,将导致普通用户也可以使用vim编辑器修改系统中的任何配置文件。
主要用途:
????????为公共目录(例如,权限为777的)设置,权限字符为“t”
????????用户不能删除该目录中其他用户的文件
应用示例:
????????由于系统及服务程序运行的需要, Linux提供了/tmp、/var/tmp等临时目录,允许任意用户、程序写入数据。
????????设置粘滞位以后,正好可以保持一种动态的平衡:允许各用户在目录中任意写入、删除数据,但是禁止随意删除其他用户的数据 。
使用权限字符:
????????chmod ?ug±s ?可执行文件...
????????chmod ?o±t ?目录名...
使用权限数字:
????????chmod ?mnnn ?可执行文件...
????????m为4时,对应SUID,2对应SGID,1对应粘滞位,可叠加
注意:
????????欢迎私信交流学习,有时间一定会回复。