Linux账号与权限管理
账号管理
- Linux系统中基于用户身份来控制对资源的访问,通过表现形式及分别在细节方面存在的差异分为了用户账号和组账号。
管理用户账号
用户账号的介绍
-
用户账号
1、超级用户 root :Linux系统中默认的超级用户账号,对本机拥有最高管理的权限,类似于 windows系统中的 Administrator。可以在进行系统管理、维护任务时用。2、普通用户 :需要由 root 用户或其他管理员用户创建,拥有的权限受到一定的限制,一般只在用户自己的宿主目录中拥有完整的全向。
3、程序用户 :这些用户一般不允许登录到系统,而仅用于维持系统或某个程序的正常运行。
-
UID号
1、Linux系统中的每个用户账号都有一个数字形式的身份标志,称为 UID,即用户标识号
2、原则上每个用户的UID号应该是唯一的
3、 root 用户的UID 号为固定值 0
4、程序用户账号的UID号默认为 1~999
5、普通用户默认分配了 1000~60000 的UID号
用户账号文件
在这两个配置文件中,没一行对应一个用户账号,不同的配置选之间使用冒号":"进行分隔
- /etc/password :用于保存用户名称、宿主目录、登录shell等基本信息
- 该文件任何用户都能读取文件中的内容,该文件每一行的内容包含了七个用冒号“:”的配置段,从左往右的含义分别为:
第1字段 | 用户账号的名称,也是登录系统时使用的识别名称 |
---|---|
第2字段 | 经过加密的用户密码字串,或者密码占位符“x” |
第3字段 | 用户账号的UID号 |
第4字段 | 所属基本组账号的GID号 |
第5字段 | 用户全名,可填写与用户相关的说明 |
第6字段 | 宿主目录,即该用户登录后所在的默认工作目录 |
第7字段 | 登录shell等信息,用户完成登录后后使用的shell |
- /etc/shadow :用于保存用户的密码、账号有效期等信息
- 该文件默认只有root用户才能够读取到文件中的内容,该文件每一行的内容包含了九个用冒号”:“分隔的配置字段,从左往右的含义分别为
第1字段 | 用户账号名称 |
---|---|
第2字段 | 使用MD5加密的密码字串信息,当为“*” 或 “!!” 时表示此用户不能登录到系统。若该字段为空,则该用户无需密码即可登录系统 |
第3字段 | 上次修改密码的时间,从某日算起到最近一次修改密码时间隔的天数 |
第4字段 | 密码的最短有效天数,自本次修改密码后,必须至少经过该天数才能再次修改密码。默认值为0,表示不进行限制 |
第5字段 | 密码的最长有效天数,自本次修改密码后,经过该天数以后必须再次修改密码。默认值为99999,表示不进行限制 |
第6字段 | 提前多少天警告用户口令将过期,默认值为7 |
第7字段 | 在密码过期之后多少天内禁用此用户 |
第8字段 | 账号失效时间,此字段指定了用户作废的天数,默认值为空,表示账号永久可用 |
第9字段 | 保留字段,目前没有特定用途 |
用户账号管理命令
- 添加用户账号 —— useradd
语法格式:
useradd [选项] 用户名
选项:
-u :指定用户的UID号,要求该UID号未被其他用户使用
-d :指定用户的宿主目录位置(当与 -M 一起使用时,不生效)
-e :指定用户的账户失效时间,可使用YYYY-MM-DD的日期格式
-M :不建立宿主目录
-s :指定用户的登录shell
-g :指定用户的基本组
-G :指定用户端附加组(既可以属于用户组,也可以属于附加组)
示例:
创建一个bbbs的账号,禁止它在终端登录,于2020-8-8失效
useradd -e 2020-8-8 -s /sbin/nologin bbbs
- 用户账号的初始配置文件
●用 useradd 命令添加一个新用户账号时,会在该用户的宿主目录中建立一些初始配置文件。
●这些初始配置文件是从 “/etc/skel” 目录中复制而来。
●较常用的初始配置文件包括“.bash_logout” 、“.bash_profile” 、“.bashrc”
其中:
.bashrc_profile :文件中的命令将在该用户每次登陆时被执行;
.bashrc :文件中的命令将在每次加载 “/bin/bash”程序时执行
.bashlogout :文件中的命令将在用户每次退出登陆时被执行
- 设置、更改用户密码 —— password
语法格式:
password [选项] 用户名
选项:
-d :清空密码
-I :锁定用户账户
-S :查看用户账户的状态
-u :解锁用户账户
- 修改用户账户的属性 —— usermod
语法格式:
usermod [选项] 用户名
选项:
-I :更改用户登录的名称
-L :锁定账号
-U :解锁用户账户
-u :修改用户ID
-d :修改用户的宿主目录的位置
-e :修改用户账户失效时间,可使用YYYY-MM-DD的日期格式
-g :修改用户基本组组名
-G :修改用户的附加组组名
-s :指定登录的shell
- 删除用户账户 —— userdel
语法结构:
userdel [-r] 用户名
添加 -r 选项时,表示连同用户的宿主目录一并删除
(只有指定目录属于账户自己的组时,才能连带宿主目录一并删除,否则无权删除)
可以从/home 家目录中查看该用户是否存在
管理组账号
组账号的介绍
- 对于用户账号来说,对应的组账号可以分为 基本组(所有组)和 附加组(公有组)两种类型。
- 每一个用户账号可以是多个组账号的成员,但是其基本组账号只有一个
- 在 /etc/passwd 文件中的第4个字段记录了该用户的基本组GID号
- 在对应的组账号文件中可以知道该用户还属于哪些附加组
组账号文件
- 组账号相关的配置文件:
- /etc/group :用于保存组账号名称、GID号、组成员等基本信息
- /etc/gshadow :保存组账号的加密密码字串等信息
示例:
分别检索获知 root 组包括哪些用户成员,哪些组中包含 root 用户
grep “^root” /etc/group ###检索root组包括哪些用户
grep “root” /etc/group ###检索哪些组包括 root 用户
管理组账号命令
- 添加组账号 —— groupadd
语法格式:
groupadd [-g] 组账号
添加 -g 选项,可以指定该组账号的GID号
示例:创建一个名为 datou 的组账号,并指定该GID号为123456
groupadd -g 123456 datou
tail -1 /etc/group ###查看创建的组账号的信息
- 添加、设置、删除组成员 —— gpasswd
语法结构:
gpasswd [选项] 成员名 组账户名
选项:
-a :添加成员
-d :删除成员
-M :指定组账户中多个成员用户(用 “,” 逗号隔开)
示例1:在 root 组中添加成员 libai
gpasswd -a libai root
groups libai ####查看libai成员用户是否已经加入
示例2:在 root 组中删除成员 kai
gpasswd -d kai root
groups kai ####查看libai成员用户是否已经加入
示例3:在 root 组中指定 luren1、 luren2、 luren3、 luren4、 luren5
gpassed -M luren1,luren2,luren3,luren4,luren5
grep "^adm" /etc/group ####查看所指定的成员
- 删除组账号 —— groupdel
语法格式:
groupdel 组账号名
示例:删除组账号opt
gropudel opt
- 添加用户账号时指定组账户 —— useradd [-g]
示例:创建用户 lookup ,指定它的基本组为 cookie ,并加入到 Python 组中,指定它的主目录为 /etc/lookup ,并且不允许 lookup 通过本地登录服务器。
useradd -d /etc/lookup -g cookie -G Python -s /sbin/nologin lookup
- 修改用户的账号属性 —— usermod
语法结构:
usermod [选项] 用户名
(对于系统中已经存在的用户,添加相应的选项即可重新设置该账户的所属组)
选项:
-g :修改用户的基本组名(或GID)
-G :修改用户的附加组名(或GID)
示例:修改 root 用户的基本组为 duck,并且修改它的附加组为 pig
usermod -g duck -G pig root
查询账号信息
UID :用户标识号 ###标识号为十进制数字
GID :组标识号 ###标识号为十进制数字
-
查询用户账号的身份标识 —— id
使用 id 命令 可以快速查看指定用户账号的 UID、 GID 等标识信息
gid 和 groups 部分的第一个组账号对应该用户的基本组,group部分的其他组账号为该用户的附加组 -
查询用户账号所属的组 ——groups
查看指定的用户账号属于哪些组
示例:
[root@localhost ~]# groups
root ###当前用户
[root@localhost ~]# groups oracle
oracle : oinstall dba ####当前 oracle 用户所属的组
- 查询用户账号的登录属性 —— finger
可以查询指定的用户账号的登录属性等详细信息,包括登录名、完整名称、宿主目录、登录shell等
示例:
[root@localhost ~]# finger root
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Mon Oct 26 00:24 (CST) on pts/0 from 20.0.0.252
No mail.
No Plan.
- 查询当前主机的用户登录情况 —— w
查询当前主机中的用户登录情况,列出登录账号名称、所在终端、登录时间、来源地点等信息
示例:
[root@localhost ~]# w
00:58:28 up 34 min, 1 user, load average: 0.00, 0.01, 0.03
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 20.0.0.252 00:24 4.00s 0.06s 0.00s w
权限管理
文件的权限及归属
- 在 Linux 文件系统的安全模型中,为系统中的文件赋予了二个属性
- 访问权限(简称 权限):包括 读取、写入、可执行 三种基本类型
- 文件所有者(简称 归属):包括 属主(拥有该文件的用户账号)、属主(拥有该文件的组账号)
- Linux系统根据文件或目录的访问权限、归属来对用户访问数据的过程进行控制
- 文件的访问权限主要针对的是文件内容,而目录访问权限则是针对目录内容(包括目录下的子目录和目录下的文件)
权限 | 文件 | 目录 |
---|---|---|
r | 查看文件内容 | 查看目录内容(显示子目录、文件列表) |
w | 修改文件内容 | 修改目录内容(在目录中新建、移动、删除文件或子目录) |
x | 执行该文件(程序或脚本) | 执行cd命令,进入或退出该目录 |
- 文件的权限为 666-022=644
- 目录的权限为 777-022=755
查看文件的权限及归属
- 使用 ls 命令带 “-l” 选项时,可以查看文件的详细信息,其中就包括了文件的权限及归属等参数
示例:
[root@localhost ~]# ls -l /etc/passwd
-rw-r--r-- 1 root root 2347 Oct 24 22:53 /etc/passwd
1)其中:-rw-r--r-- 表示:该用户对文件所拥有的权限
第一个字符 “-” 表示:该文件的类型
文件类型 :“-” :普通文件 、“d” :目录 、“b” :块设备 、“c” :字符设备文件 、“l” :字母 “l” 为连接文件
r ,w ,x :分别表示 可读 、可写 、可执行 ;也可以表示为八进制数 4 ,2 ,1
2)根据用户类型设置了相对应的权限
“u” :代表文件属主
“g” :代表文件属组内的用户
“o” :代表其他任何用户
“a” :代表所有用户(包括u、g、o)
相对于的权限,请看下表:
设置文件的权限 —— chmod
语法格式1:
chmod [ugoa][+-=][rwx] 文件名
示例:不加用户类型则是对有所用户类型进行权限设置型,也就是默认为“a”用户类型;对不同的用户类型进行授权时,可以用逗号“,” 进行分隔。
chmod +x runbook ####增加该文件可执行权限
chmod -w runbook ####取消该文件写权限
chmod =r runbook ####设置该文件为可读权限
chmod g-x,o-x runbook ###取消该文件属组内用户、其他用户的执行权限
语法格式2:
chmod [nnn] 文件名
(第一个n:对应“u”用户类型 ; 第二个n:对应“g”用户类型 ; 第三个n:对应“o”用户类型 ;每个n里r,w,x 权限和为 7)
示例:
[root@localhost ~]# ll ok
-rwxr-xr-x 1 root root 0 Oct 26 19:18 ok
(普通文件类型 ;权限为751)
[root@localhost ~]# chmod 540 ok
[root@localhost ~]# ll ok
-r-xr----- 1 root root 0 Oct 26 19:18 ok
(“u”里去掉了w 为5 ,变成 r-x ; “g”里去掉了w,x 为4,变成 r-- ;“o”里去掉了r,w,x 为0 ,变成了 --- )
设置文件的归属 —— chown
语法格式1:
chown [属主]:[属组] 文件名
(同时设置属主和属组时中间用 “:”冒号分隔)
语法格式2:
chown 属主 文件名
(只设置属主时可以只输入设置的属主)
语法格式3:
chown :属组 文件名
(只设置属组时,前面必须要带“:”冒号)
语法格式4:
chown -R [属主]:[属组] 文件名
(-R :递归修改)
目录的权限及归属
- 目录的权限及归属与文件的权限相似,不过存在不同的意义,前面有所描述
- 设置 目录的权限 —— chmod(与设置文件的类似)
- 设置 目录的归属 —— chown(与设置文件的类似)
- 设置 目录的权限及归属 都可以使用 “-R” 选项,递归修改目录下的所有文件、子目录的权限及归属
系统属性
- 日常生活中我们的电脑中会有一些非常中要的文件,防止别人的误删,除了给电脑上锁,我们也可以给文件“上锁”
- 通过 chattr 命令,即使在root权限下也不能直接删除
语法格式:
chattr [+-=][ai] 文件名
选项:
+ :在原有参数的基础上,追加参数
- :在原有参数基础上,移除参数
= :更新为指定参数
a :设置只能向文件中添加数据,而不能删除
i :设置后,不能对文件进行删除、写入、改名等操作
- 查看 chattr 命令设置的系统属性 ,用 lsattr 命令 ;可以显示出文件的底层属性
语法格式:
lsattr [选项] 文件名
选项:
-a :显示所有文件属性
-d :仅显示目录属性
-R :递归显示
- 设置这些参数必须在 root 权限下 —— 取消 chattr 设置的系统属性
示例:用 chattr 命令设置,用 lsattr 查看,取消 chattr 命令设置的参数
[root@localhost ~]# chattr +a ok ###设置
[root@localhost ~]# ll ok
-r-xr----- 1 root root 0 Oct 26 19:18 ok
[root@localhost ~]# rm -rf ok
rm: cannot remove ‘ok’: Operation not permitted ###显示无法删除
[root@localhost ~]# lsattr -a ok ###查看
-----a---------- ok
[root@localhost ~]# chattr -a ok ###取消参数,在原有参数的基础上移除参数
[root@localhost ~]# lsattr -a ok
---------------- ok
[root@localhost ~]# rm -rf ok ###删除成功
[root@localhost ~]#
默认权限 —— mask
- umask — 即指定目前用户在新建文件或目录时的权限默认值
●第一个0 为“u”用户类型,权限为 rwx 及4,2,1
●第二个0 为“g”用户类型,权限为 rwx 及4,2,1
●第三个0 为“o”用户类型,权限为 rwx 及4,2,1
umask 000 代表默认权限为 777
umask 022 代表默认权限为 755
umask 333 代表默认权限为 444
示例1:文件权限
[root@localhost ~]# umask 000
[root@localhost ~]# touch ok
[root@localhost ~]# ll ok
-rw-rw-rw- 1 root root 0 Oct 26 20:52 ok
示例2:目录权限
[root@localhost ~]# mkdir /kkk/
[root@localhost ~]# ls -ld /kkk
drwxrwxrwx 2 root root 6 Oct 26 20:59 /kkk
[root@localhost ~]# mkdir /uuu/
[root@localhost ~]# ls -ld /uuu/
drwxr-xr-x 2 root root 6 Oct 26 21:00 /uuu/
到此结束,感谢浏览