目录
用户一般来说是指使用计算机的人,计算机对使用其每一个用户给了一个特定的名称,用户就可以使用这些名称来登录使用计算机,除了人之外,一些系统服务也需要含有部分特权的用户账户运行;因此,出于安全考虑,用户管理应运而生,它加以明确限制各个用户账户的权限,root在计算机中拥有至高权限,所以一般只做管理用,非特权用户可以通过SU或SUDO程序来临时获得特权
Linux中通过用户和用户组实现访问-----包括对文件访问、设备使用的控制
个人可以拥有很多账户,只是名称不同,比如root已经占用就不能再次使用,此外,任意用户可能从属某个用户组,此用户可以加入某些已经存在的组来获取改组的特权
Linux系统中,每一个文件都有属一个用户(属主)和一个用户组(属组)。另外还有三种类型的访问权限:读(read)、写(write)、运行(execute)。我们可以针对文件的属主、属组而设置相应的访问权限。
我们可以使用ls或者stat命令查看该文件的权限
在Linux中,用户的类别一般分为一下三种
用户的主要组(primary group):用户必须属于一个且只有一个主组,默认创建用户时会自动创建
用户名同名的组,做为用户的主要组,由于此组中只有一个用户,又称为私有组
附加组:除了第一个组外的其他组为附加组或公共组,附加组在 /etc/group 文件中指定
一对一:一个用户可以存在一个组中
一对多:一个用户可以存在多个组中
多对一:多个用户可以存在一个组中
多对多:多个用户可以存在多个组中
UID(User IDentity ):用户标识号,Linux中每个用户都有一个以数字为表达方式的身份标记,类似于每个人的身份证号
GID(Group IDentify):组标识号。与UID号相似,每一个组也有自己的标识
名称 | 帐号信息 | 说明 |
用户配置文件 | /etc/passwd | 记录了每个用户的基本属性,并且对所有用户 可读每一行记录对应一个用户,每行记录使用 冒号进行分割 |
用户组文件 | /etc/group | 用户组的所有信息存放地,并且组名不能重复 |
用户对应的密码信息 | /etc/shadow | 因为passwd是对所有用户可读的,为了安全起见把密码从passwd里分离出来放入单独的文件,该文件只有root用户 有读权限,从而保证密码的安全性 |
1.用户配置文件
打开/etc/passwd
各字段代表的含义
打开/etc/group
打开/etc/shadow
kysw:$6$2YaZfC2f$RJctv3I765WZvyMXDUDEy.1cYBadOqLuIAp7ZALl3m.0TLjKhgSYwaYvhd8jHkYgPfRwT1GW.SsLG0aquobfb0:19717:0:99999:7:::
知识扩展:第三段字符从1970-01-01日开始算起,这个日子是UNIX诞生的日子,实际上在1969年Unix就已经诞生,正式公布为1970年1月1日,当时有个“千年虫”事件。Unix的作者也没有想到它会存在这么长的时间,所以当时出现了一个BUG,当时间到2000年时系统无法识别,就会从1900年重新开始计算
命令-------useradd?
语法:useradd 【选项】...? 用户名
作用:添加新用户,并对新用户进行个性化设置
选项:
-u | 指定用户的 UID 号,要求该 UID 号码未被其他用户使用。 |
-d | 指定用户的宿主目录位置(当与-M 一起使用时,不生效)。 |
-e | 指定用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式。 |
-g | 指定用户的基本组名(或使用 GID 号)。 |
-G | 指定用户的附加组名(或使用 GID 号)。 |
-M | 不建立宿主目录,即使/etc/login.defs 系统配置中已设定要建立宿主目录。 |
-s | 指定用户的登录 Shell /sbin/nologin |
无特殊情况,按顺序依次生成UID号与组ID号
useradd? lida
指定UID号
指定用户的宿主目录位置(当与-M 一起使用时,不生效)
两台不同的机器创建的用户,为了给大家演示方便,不用太纠结
指定用户失效时间
指定用户的基本组名(或使用 GID 号)
指定用户的附加组名(或使用 GID 号)
不建立宿主目录不建立宿主目录
指定用户的登录 Shell?
命令之----------usermod
语法:usermod? 【选项】...? 用户名
作用:对已经创建的用户属性进行修改
选项:
-l:更改用户账号的登录名称(Login Name)
-L:锁定用户账户
-u: 修改用户的 UID 号
-U:解锁锁用户账户
-d:修改用户的宿主目录位置。
-e:修改用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式。
-g:修改用户的基本组名(或使用 GID 号)
-G:修改用户的附加组名(或使用 GID 号)
-s:指定用户的登录 Shell
更改用户账号的登录名称
锁定用户账户,锁定后账户就无法登录了
解锁锁用户账户
修改用户的 UID 号
命令之------passwd
语法:passwd [选项]... 用户名???不加用户名默认为当前用户修改密码
作用:为用户账号设置密码
选项:
不加选项:passwd? 用户名
-d:清空指定用户的密码,仅使用用户名即可登录系统。
-l:锁定用户账户。
-S:查看用户账户的状态(是否被锁定)。
-u:解锁用户账户。
其它选项与useradd基本一致,在此不再过多演示
命令之--------userdel
userdel? 【选项】?用户
不加条件的话,用户删除后,该用户的家目录还会存在
-r 将用户家目录一起删除
用户宿主目录下的初始配置文件只对当前用户有效
~/ .bash_profile
#此文件中的命令将在该用户每次登录时被执行,他会设置一些环境变量,并且会调用该用户的~/.bashrc文件
~/.bashrc
#此文件中的命令将在该用户每次打开新的bash shell时(包括登录系统)被执行(登录 切换 新的bash环境)
~/.bash_logout
#此文件中的命令将在该用户每次退出时bash shell时使用
/etc/bashrc
命令之------groupadd
语法:groupadd? 【选项】 组名
作用:创建新的用户组,并设置个性化属性
groupadd? 【-g GID号】? 组账号名
[root@localhost ~]#groupadd ky1
[root@localhost ~]#tail -1 /etc/group
ky1:x:2004:
[root@localhost ~]#groupadd -g 2500 ky2
[root@localhost ~]#tail -2 /etc/group
ky1:x:2004:
ky2:x:2500:
#不加 -g 会根据前一个创建用户GID号依次生成
#加上 -g 后可以自定义GID号
命令之------gpasswd
语法:gpasswd? 【选项】? 用户名? 组名
作用:对组成员进行操作
选项:
-a:向组内添加一个用户
-d:从组内删除一个用户成员
-M:定义组成员列表,以逗号分隔
?
groupdel 组帐号名
查询已登录到主机的用户信息
标题 | 含义 |
---|---|
USER | 登录到系统的用户。 |
TTY | 登录终端。 |
FROM | 表示用户从哪里登陆进来,一般显示远程登陆主机的 IP 地址或者主机名。 |
LOGIN@ | 用户登陆的日期和时间。 |
IDLE | 表示某个程序上次从终端开始执行到现在所持续的时间。 |
JCPU | 和该终端连接的所有进程占用的 CPU 运算时间。这个时间里并不包括过去的后台作业时间,但是包括当前正在运行的后台作业所占用的时间。 |
PCPU | 当前进程所占用的 CPU 运算时间。 |
WHAT | 当前用户正在执行的进程名称和选项,换句话说,就是表示用户当前执行的是什么命令。 |
相比较 w 命令,who 命令只能显示当前登陆的用户信息,但无法知晓每个用户正在执行的命令。 who 命令的基本格式如下:
显示当前登录到系统的用户列表
此命令需要手动安装 ,它可以查看到用户的详细信息
在Unix/Linux系统中,文件和目录都有各自的权限设置,这些权限决定了哪些用户或用户组可以
文件或目录进行操作
①读取(r):可使用文件查看类工具,比如:cat,可以获取其内容
②写入(w):可修改其内容
③执行(x):可以把此文件提请内核启动为一个进程,即可以执行(运行)此文件(此文件的内容必须是可执行)
① r?:可以使用ls查看此目录中文件列表
② w :可在此目录中创建文件,也可删除此目录中的文件,而和此被删除的文件的权限无关
③ x :可以cd进入此目录,可以使用ls -l查看此目录中文件元数据(须配合r权限),属于目录的可访问的最小权限
文件和目录的权限通常通过一组九个字符来表示,格式如下:
这九个字符分为三组,每组三个,分别代表所有者(user)、所属组(group)和其他用户(others)的权限。
命令之----chmod
语法 :chmod? ?【选项】??文件名
作用:修改文件/目录对特定用户的权限
选项:
+? 是加上,在原有的基础上加上权限
-? 是在原有的基础上减去权限
=? 赋予 就是原有权限不看 等于号后面的权限
权限使用三位八进制数来表示所有者、所属组和其他用户的权限。每一位数字的范围是0-7,分别对应以下权限组合:
0:无权限
1:执行权限
2:写入权限
3:写入和执行权限
4:读取权限? ? ? ? ??
5:读取和执行权限
6:读取和写入权限
7:读取、写入和执行权限
在Linux显示为? ?r=4、w=2、x=1
例如:????????
使用chmod修改权限后
命令之-----chown
语法:chown? 用户:组名? 文件名
作用:修改文件/目录的所属住和所属组
只修改所属主 :输入 chown? 属主名? 文件名
只修改所属组:输入 chown? .属组名? 文件名
同时修改:输入 chown? 属主名:属组名? 文件名
除了基本的读、写、执行权限外,还有一些特殊的权限位:
s(setuid/setgid)
当设置在可执行文件上时,允许以文件所有者的身份(setuid)或文件所属组的身份(setgid)运行该文件。
此处s表示当使用这个命令程序时,把当前用户当成文件的所属主
修改密码就是修改/etc/shadow文件内容
正常来说,作为普通用户,我们是没有权限去修改的,但是passwd命令加上了suid这个特殊权限,就可以将使用该命令的用户作为修改文件的所属主,无视权限
添加命令为:?chown? s(g)+s? 文件名
t(粘滞位/sticky bit)
当设置在目录上时,仅允许文件所有者删除该目录下的文件,即使其他用户具有写入权限。
输入chmod? o+t? 文件名
其它用户虽然有权限,但是无法删除
只有该文件的属主可以删除
umask 的值可以用来保留在创建文件权限
新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变? 因为为了安全考虑,默认是将x(执行)权限去掉? (x=1)
新建目录的默认权限: 777-umask
非特权用户umask默认是 002
root的umask 默认是 022
可以实现单个用户的权限设置,
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
用法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } 文件名....
-m, ? ? ? --modify-acl 更改文件的访问控制列表
-M, ? ? ? --modify-file=file 从文件读取访问控制列表条目更改
-x, ? ? ? --remove=acl 根据文件中访问控制列表移除条目
-X, ? ? ? --remove-file=file 从文件读取访问控制列表条目并删除
-b, ? ? ? --remove-all 删除所有扩展访问控制列表条目
-k, ? ? ? --remove-default 移除默认访问控制列表
? ? ? ? ? --set=acl 设定替换当前的文件访问控制列表
? ? ? ? ? --set-file=file 从文件中读取访问控制列表条目设定
? ? ? ? ? --mask 重新计算有效权限掩码
-n, ? ? ? --no-mask 不重新计算有效权限掩码
-d, ? ? ? --default 应用到默认访问控制列表的操作
-R, ? ? ? --recursive 递归操作子目录
-L, ? ? ? --logical 依照系统逻辑,跟随符号链接
-P, ? ? ? --physical 依照自然逻辑,不跟随符号链接
? ? ? ? ? --restore=file 恢复访问控制列表,和“getfacl -R”作用相反
? ? ? ? ? --test 测试模式,并不真正修改访问控制列表属性
-v, ? ? ? --version ? ? ? ? ? 显示版本并退出
-h, ? ? ? --help ? ? ? ? ? ? ?显示本帮助信息
举个例子
总结:通过用户和组的管理,可以对不同的用户进行不同的权限设置