Linux账号和权限管理
文件权限介绍
id username 显示该用户的信息
/etc/passwd的文件结构
desktop : x : 80 : 80 : desktop : /var/lib/menu/kde : /sbin/nologin
1 2 3 4 5 6 7
1.账号名称
2.密码,用户的密码曾以加密的格式存储在此处,现已移至/etc/passwd文件,该字段始终为x。
3.UID
4.GID
5.用户信息说明列
6.主文件夹
7.该用户默认shell程序。对于普通用户统称提供用户命令行提示符程序。如果系统不允许交互式登录,该字段为/sbin/nologin
/etc/shadow的文件结构
基本上, shadow同样以“”作为分隔符,共有9个字段,这9个字段。
账号名称
密码 | 这个字段内的数据才是真正的密码,而且是经过编码的密码(加密)。 |
最近更动密码的日期 | |
密码不可被更动的天数 | 第4个字段记录了这个账号的密码在最近一次被更改后需要经过几天才可以再被更改!如果是0的话,表示密码随时可以改动 |
密码需要重新更改的天数 | 为了强制要求用户更改密码,这个字段可以指定在最近一次更改密码后在多少天数内需要再次的更改密码才行。你必须要在这个天数内重新设置你的密码,否则这个数 的密码将会变为过期特性。 |
密码需要更改期限前的警告天数(与第5个字段相比) | 当账号的密码有效期限快要到的时候(第5个字段),系统会依据这个字段的设置发出“警告“给这个账号,提醒他再过n天你的密码就要过期了,请尽快重新设置你的密码! |
密码过期后的账号宽限时间(密码失效日) | 密码有效日期为“更新日期”(第3个字段)+“重新更改日期”(第5个字段),过了该期限后用依旧没有更新密码,那该密码就算过期了。不过如果密码过期了,那当你登录系统时,系统会强制要求你必须要重新设置密码才能登录继续使用,这就是密码过期特性。要注意密码过期与密码失效并不相同。 |
账号失效日期 | 这个字段表示:这个账号在此字段规定的日期之后,将无法再使用。就是所谓的“账号失效”,此时不论你的密码是否有过期,这个“账号”都不能再被使用。 |
保留 |
加密字段的格式:
所用的哈希算法,salt和加密哈希值,每段信息有$符号分隔
哈希算法:
6 >SHA-512哈希算法
1 > MD5哈希算法
5 >SHA-256哈希算法
salt:是随机选取的,防止两个密码相同的用户在/etc/shsdow文件中拥有相同的条目
用户密码哈希值:由salt和未加密的密码组合并加密
密码验证:用户登录时键入的密码语言和salt组合再使用指定的算法加密,然后和shadow中的条目进行比对。
用户管理
UID范围
0 | root |
1~200 | 系统用户,由红帽静态分配给系统进程 |
201~999 | 供文件系统中没有自己的文件的系统进程使用。通常在安装需要他们的软件时,可以动态的分配给他们。 |
1000+ | 普通用户 |
用户的增删改查
useradd | 创建用户 |
---|---|
-u | 后面接的是UID,是一组数字。直接指定一个特定的UID给这个账号; |
-g | 后面接用户组名该用户组的GID会被放置到/ etc/passwd的第四个字段内 |
-G | 后面接的组名则是这个账号还可以加入的用户组。 这个参数会修改/etc/ group内的相关数 |
-c | 这个就是/etc/ passwd的第五列的说明内容,可以随便我们设置的 |
-d | 指定某个目录成为主文件夹,而不要使用默认值。务必使用绝对路径 |
-r | 创建一个系统的账号,这个账号的UID会有限制 |
-s | 后面接一个shell |
userdel | 删除用户 |
---|---|
-r | 从/etc/passwd中删除用户的详细信息,同事删除用户的注目录 |
如果没有使用-r,删除a用户后,该UID下次就会分配给b用户,那么b用户就会拥有a用户的所有文件。
usermod | 更改用户信息 |
---|---|
-c | 后面接账号的说明 |
-d | 后面接账号的主文件夹 |
-e | 后面接日期, |
-g | 后面接初用户组 |
-G | 后面接次要用户信息 |
-l | 后面接账号名称,即是修改账号名称,/etc/ passwd的第一列! |
-s | 后面接she11的实际文件,例如/bin/bash或/bin/csh等 |
-u | 后面接UID数字 |
-L | 暂时将用户的密码冻结,让他无法登录。其实仅改/etc/ shadow的密码 |
-U | 将letc/ shadow密码列的!去掉 |
密码管理
passwd | |
---|---|
-l | 是Lck的意思,会将letc/ shadow第二列最前面加上!使密码失 |
-u | 与-1相对,是 Unlock的意思! |
-S | 列出密码相关参数,即 shadow文件内的大部分信息 |
-d | 清空密码 |
注意:
-
一般账号在更改密码时要先输入旧密码,而root用户则不用
-
密码不能与账号相同
-
密码尽量不要选用字典里面会出现的字符串
-
密码需要超过8个字符
-
量密码不要使用个人信息,如身份证、手机号码、其他电话号码等
-
密码不要使用简单的关系式
-
密码尽量使用大小写字符、数字、特殊字符($,-等)的组合。
chage | |
---|---|
-l | 列出该账号的详细密码参数 |
-d | 后面接日期,修改 shadow的第三字段(最近一次更改密码的日期), |
-I(大i) | 后面接天数,修改 shadow的第七字段(密码失效日期)想YYD |
E | 后面接日期,修改 shadow的第八字段(账号失效日), |
m | 后面接天数,修改 shadow的第四字段(密码最短保留天数) |
-M | 后面接天数,修改 shadow的第五字段(密码多久需要进行更改) |
-W | 后面接天数,修改 shadow的第六字段(密码过期前警告日期) |
chage和passwd的功能类似,在这两个用户分别用两种命令
用户授权
sudo可以让其他用户执行只有root的身份才能执行的命令 sudo的命令用法 开始系统默认仅有root可以执行sudo。sudo可以让你切换身份来进行某项任务,
sudo的流程:
-
当用户执行sudo时,系统于 /etc/sudoers文件中查找该用户是否有执行sudo的权限
-
若用户具有可执行sudo的权限后,便让用户输入用户自己的密码来确认
-
若密码输入成功,便开始进行sudo后续接的命令(但root执行sudo时不需要输入密码);
-
若欲切换的身份与执行者身份相同,那也不需要输入密码
能否使用sudo必须要看 letc/sudoers的设置值,而可使用sudo的是通过输入用户自己的密码来执行后续的命令串。
visudo与etc/ sudoers
除了root之外的其他账号,若想要使用sudo执行属于root的权限命令,则root需要先使用 visudo去修改etc/ sudoers,让该账号能够使用全部或部分的oot命令功能。为什么要使用 visudo呢?这是因为letc/ sudoers是有语法的,如果设置错误那会造成无法使用sudo命令的不良后果,因此才会使用 visudo去修改,并在结束离开修改界面时,系统会去检验/etc/ sudoers的语法
visudo的设置方式
单一用户可进行root所有命令与 sudoers文件语法
其实 visudo只是利用vi将/etc/sudoers.d文件调出来进行修改而已,所以这个文件就是etc/ sudoers.d。打开visudo后,在76行(有root设置的那行)左右,看到的数据就是:
用户账号 登录者的来源主机名=(可切换的身份) 可执行的命令
root ALL=(ALL) ALL(默认值)
上面四个参数的意义为
- 用户账号:系统的哪个账号可以使用sudo这个命令,默认为root这个账号。
- 登录者的来源主机名:这个账号由哪台主机连接到本
Linux主机,意思是这个账号可能是由哪一台网络主机连接过来的,这个设置值可以指定客户端计算机(信任用户的意思默认值root可来自任何一台网络主机 - 可切换的身份:这个账号可以切换成什么身份来执行后续的命令,默认rt可以切换成任何人。
- 可执行的命令:这个命令请务必使用绝对路径编写。默认roo可以切换任何身份且进行任何命令。
那个ALL是特殊的关键字,代表任何身份、主机或命令的意思
在visudo编辑完成并保存后切换至student用户,并尝试新建hello用户
经查看hello用户存在
普通用户如果需要拥有完整的管理权限,需要执行
echo "admin ALL=(ALL) ALL">>/etc/sudoers.d/admin
组管理
groupadd | 增加用户组 |
-g | 后面接一个特定的,用来直接给予某个 |
-r | 新建系统用户组 |
groupmood | 修改相关参数 |
---|---|
-g | 修改既有的数字 |
-n | 修改既有的组名 |
groupdel | 删除用户 |
---|---|
文件和目录的权限
文件属性和权限
权限 | 简写 | 对普通文件的作用 | 对文件夹的作用 |
读取 | r | 查看文件内容 | 列出文件夹中的文件(ls) |
写入 | w | 修改文件内容 | 在文件夹中删除、添加或重命名文件(夹) |
执行 | x | 文件可以作为程序执行 | cd 到文件夹 |
文件 | 意义 |
---|---|
r | 可读取此文件的实际内容 |
w | 可以编辑、新增或者是修改该文件的内容(但不含删除该文件); |
x | 该文件具有可以被系统执行的权限。 |
注意 | 但是在Linux下面,文件是否能被执行则是由是否具有“x”这个权限来决定,而跟文件名是没有绝对的关系。 |
目录 | |
---|---|
文件和目录的关系 | 文件是存放实际数据的所在,目录主要的内容是记录文件名列表,文件名与目录有强烈的关联。 |
r | 表示具有读取目录结构列表的权限,所以当你具有读取®一个目录的权限时,表示你可以查询该目录下的文件名数据,所以你就可以利用ls这个命令将该目录的内容列表显示出来 I |
w | 它表示你具有更改该目录结构列表的权限,如新建新的文件与目录,删除已经存在的文件与目录(不论该文件的权限为何);将已存在的文件或目录进行重命名;转移该目录内的文件、目录位置 |
x | 目录的x代表的是用户能否进入该目录成为工作目录的用途 |
- 用户通常对只读目录具有读取和执行权限,因此他们可以列出该目录,并且对其内容具有完整的只读访问权限。
- 如果用户仅对某目录具有读取访问权限,可以列出其中文件的名称,但是其他信息(包括权限或时间戳)都不可用,也不可访问。
- 如果用户仅对目录具有执行权限,则无法列出目录中的文件名。
- 如果他们知道自己有读取权限的文件的名称,可通过显式指定相对文件名,以便从目录外部访问该文件的内容。
- 在文件所在的目录中拥有所有权或写入权限的任何人都可以删除此文件,不论此文件本身的所有权
改变文件的属性和权限
chown
更改文件所有者(root有更改权限)
chown | 改变文件所有者 |
---|---|
-R | 进行递归的持续更改,即连同子目录下的所有文件都更改 |
也可以同时修改文件的所有者和所有组
chown visitor:admin test_dir
chgrp
更改文件所有组(root和所有者有更改权限)
默认情况下心文件的组的所有权为创建该文件的主要用户组。
chgrp | 改变文件所属用户组 |
---|---|
-R | 进行递归的持续更改== |
chmod
更改文件权限,root和所有者有可执行权限
数字类型
Linux文件的基本权限就有9个,分别是 owner、 group、
others三种身份各有自己的read,write.、execute权限,文件的权限字符为“-rwxrwxrwx”这9个权限是三个三个一组的。其中,我们可以使用数字来代表各个权限,各权限的分数对照如下r=4 w=2 x=1
每种身份( owner、 group、 others)各自的三个权限(r、w、x)分数是需要累加的,例如当权限为[-rwxrwx—],分数则是 owner= rwx=
4+2+1=7, group= rwx= 4+2+1=7 ,others 0+0+0=0
符号类型
ACL
ACL是 Access Control List的缩写,主要的目的是提供传统的 owner、 group、 others的read,wrte. execute权限之外的具体权限设置。ACL可以针对单一用户、单一文件或目录来进行r,w、x的权限设置,对于需要特殊权限的使用状况非常有帮助
它主要可以针对几个项目
- 用户(user):可以针对用户来设置权限;
- 用户组( group):针对用户组来设置其权限
- 默认属性(mask):还可以在该目录下在新建新文件/目录时设置新数据的默认权限。
| ACL的设置技巧 | |
|–|--|
getfacl|取得某个文件/目录的ACL设置项目
setfacl|设置某个目录/文件的ACL规定。
setfacl | 参数含义 |
---|---|
-m | 设置后续的ac1参数给文件使用,不可与-x合用 |
-x | 删除后续的ac1参数,不可与-m合用 |
-b | 删除所有的ACL设置参数 |
-k | 删除默认的ACL参数 |
-R | 递归设置ac1,亦即包括子目录都会被设置起来; |
-d | 设置默认ac1参数!只对目录有效 |
getfacl用法
设定用户bob对westos有rwx权限
从列表中删除用户bob
设定zu1组成员westos对有rwx权限
act的默认权限对设定完成之后的文件生效
恢复mask值
递归设置
文件默认权限umask
umask 就是指定 “目前使用者在创建文件或目录时 候的权限默认值”
[root@study ~]# umask 0022 <==与一般权限有关的是后面三个数字!
[root@study ~]# umask -S u=rwx,g=rx,o=rx
查看的方式有两种
- 一种可以直接输入 umask,就可以看到数字形态的权限设置分数,
- 一种则是加入-S( Symbolic)这个参数,就会以符号类型的方式来显示出权限了。
因此,默认的情况如下:
若用户建2则默认没有可执行(x)权限,即只有、W这两个选项,就是66
若用户新建“目录”则由于x与是否可以进入此目录有关,因此默认为所有权限均开放,即 777分,默认权限如下 drwxrwxrwx
要注意的是, umask的分数指的是“该默认值需要减掉的权限”。
文件特殊权限
SUID
当s这个标志出现在文件所有者的x权限上时,此时就被称为 Set UID,简称为SUID的特殊权限。
SUID的限制与功能
- SUID权限仅对二进制程序( binary program)有效
- 执行者对于该程序需要具有x的可执行权限
- 本权限仅在执行该程序的过程中(run-tme)有效;
- 执行者将具有该程序所有者( owner)的权限
SGID
SetGID 当s标志在文件所有者的x项目为SUID,那s在用户组的x时则称为 Set GID,SGID。与SUID不同的是,SGID可以针对文件或目录来设置。如果是对文件来说,
SGID有如下功能
- SGID对二进制程序有用
- 程序执行者对于该程序来说,需具备x的权限
- 执行者在执行的过程中将会获得该程序用户组的支持。
- 当一个目录设置了SGD的权限后,它将具有如下的功能
用户若对于此目录具有r与x的权限时,该用户能够进入此目录用户在此目录下的有效用户组( effective group)将会变成该目录的用户组
若用户在此目录下具有w的权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同.
SBIT
这个 Sticky Bit(SBIT)目前只针对目录有效,对于文件已经没有效果了。
SBIT对于目录 的作用是
- 当用户对于此目录具有w,x权限,即具有写入的权限
- 当用户在该目录下创建文件或目录时,仅有自己与root才有权利删除该文件
换句话说:当甲这个用户于A目录是具有用户组或其他人的身份,并且拥有该目录W的权限,这表示甲用户对该目录内任何人新建的目录或文件均可进行删除、重名名、移动等操作。不过,如果将A目录加上了SBIT的权限项目时,则甲只能够针对自己创建的文件或目录进行删除、重命名、移动等操作,而无法删除他人的文件.
上图中,我用root用户建立了ml1目录,在执行chmod o+t ml1命令后,bob用户虽然执行删除命令,但是ml1目录依然存在,只能是root用户才能删除
SUID/SGID/SBIT权限设置
4为SUD, 2为SGID,1为SBIT
如果连文件拥有者都无法执行的文件,则会出现‘’S‘’ ‘’T‘’ ,因为没有权限能够给其他用户执行,所以S,T代表的就是空的