第一讲 管理用户和文件权限
前言
一、管理用户和组帐号
1.1. 用户和组账号介绍
1.1.1. 用户帐号文件 passwd
1.1.2. 用户帐号文件 shadow
1.2. 用户账号管理
1.2.1. 添加用户账号
1.2.2. 用户帐号的初始配置文件
1.2.3. 设置/更改用户口令
1.2.4. 修改用户帐号的属性
1.2.5. 删除用户账号
1.3. 组账号管理
1.3.1 组帐号文件 group、gshadow
1.3.2 添加组账号
1.3.3. 添加、删除组成员
1.3.4. 删除组账号
1.4. 用户和组帐号查询
二、管理文件/目录的权限和归属
2.1. 文件/目录的权限和归属
2.2. 设置文件/目录的权限
2.3. 设置文件/目录的归属
2.4. 使用附加权限
2.4.1. SET位权限
2.4.2. 粘滞位权限 Sticky
2.4.3. 设置SET位、粘滞位权限
今天要跟大家聊的是关于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位权限
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对应粘滞位,可叠加
注意:
欢迎私信交流学习,有时间一定会回复。