Linux用户介绍
超级管理员用户(root用户):UID为 0,具有一切权限,可以操作系统中的所有资源。Root用户可以进行基础的文件操作及特殊的系统管理,可以修改系统中的任何文件。
系统用户:UID为1~999;Linux 系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务 器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏围。
普通用户:? UID从1000开始:由管理员创建的用于维护日常工作的用户,可使用Linux的大部分资源,一些特定的权限受到控制。为了保证安全性,用户只对自己创建的目录有写权限,读写权限受到一定控制
用户及其组相关文件
/etc/passwd????? # ? 用户配置文件;存储用户基本信息;所有用户都可以读取此文件的内容
格式:
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
x: 用户密码:并非真正密码。真实密码保存在/etc/shadow文件中
/etc/shadow?????? #?? 存储Linux系统中用户的密码信息,又称影子文件;此文件只有root用户才能访问,其他用户没有权限,以此保证用户密码的安全性。
格式:
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
/etc/group?????????????? # 存放用户组的信息
格式:
组名:口令:组标识号:组内用户列表
?用户和组相关命令
[root@ggbond ~]# whoami?????????????????????????? #? 查看当前登录用户
?[root@ggbond ~]# id ggbond????????????????? #? 查看用户ID,组ID,群组ID
sudo 以管理员身份执行命令,普通用户默认无法使用sudo命令,需要将用户添加到wheel组当中
切换用户时需要用su -? 命令;普通用户到root用户需要输入密码;然而root用户切到其他用户时候不需输入密码
?[ggbond@ggbond ~]$ su - root???
useradd
创建用户
参数使用
[root@ggbond ~]# useradd -u 66 tt????????????? # 创建一个UID为66的用户tt
[root@ggbond ~]# id tt??????????????????????????????????? # 查看UID信息
[root@ggbond ~]# useradd -g tt gg?????????? # 添加一个用户gg将它放到tt组中
[root@ggbond ~]# id gg????????????????????????????? #查看gg用户
passwd
修改用户密码、过期时间等
参数使用
[root@ggbond ~]# passwd -l gg????????????????????? # 锁定gg用户,禁止其登陆
?[root@ggbond ~]# passwd -uf gg?????????? # 解锁gg用户?? ; 如实没设置密码则解锁需要加f
?[root@ggbond ~]# passwd -e gg?????? # 强制用户gg在下次登录时修改密码
?
userdel??????????
删除用户
参数使用
[root@ggbond ~]# userdel -r gg??????????????????????????????? #? 同时删除用户及其用户家目录
?usermod
修改用户属性
参数使用
[root@ggbond ~]# usermod -g tt ww ? ? ???????? #? 修改ww的基本组为tt组 ?
[root@ggbond ~]# usermod -G ww ww???????? # 为用户ww加一个附加组ww
[root@ggbond ~]# usermod -u 1314 tt???????? # 修改用户tt的uid为1314
chage
修改账号和密码的有效期限
参数使用
[root@ggbond ~]# chage -M 66 tt??????????????????? # 修改密码保持有效的最大天数为66
[root@ggbond ~]# vim /etc/shadow?????????????? #? 进入配置文件查看是否变更时间
[root@ggbond ~]# chage -W 77 tt?????????????????? # 密码到期前77天开始提醒
?groupadd
创建组
参数使用
[root@ggbond ~]# groupadd -g 333 dd???? # 创建dd组且组ID为333
[root@ggbond ~]# grep dd /etc/group????????? # 查看dd组信息
?groupmod
修改用户组属性
参数使用
[root@ggbond ~]# groupmod -g 123 tt????????????????????? #修改用户tt的GID为123
[root@ggbond ~]# groupmod -n tq tt????????? #修改tt的组名为tq
?
?gpasswd
将用户加入到某个组或者从某个组中删除
参数使用
[root@ggbond ~]# gpasswd -a ww tt????????????????? #? 将用户ww加入到tt组
?[root@ggbond ~]# gpasswd -d ww tt????????????????????? # 将用户ww从tt组中移除
?groupdel
删除用户组
参数使用
[root@ggbond ~]# groupdel ww????????????? # 删除ww组
?groups
查看用户属于哪些组
参数使用
[root@ggbond ~]# groups tt???????????????????????? #??? 查看用户tt属于哪些组
Linxu权限管理
权限对于普通文件和目录文件作用是不一样的
权限对普通文本文件的作用
9列权限;
前三列(Owner-拥有者):文件的拥有者对该文件具有的权限
中间三列(group-所属组): 文件所属组对该文件具有的权限
后三列(others-其他人):?? 其他人(既不是拥有者也不是所属组就是其他人)对该文件具有的权限
注意:
一般来说(并不强行规定),owner的权限>group的权限>others的权限,注意一点,文件的owner不一定属于该文件的所属组。
每个文件的权限针对三类对象进行定义
所有者(由u表示)
所属组(由g表示)
其他(由o表示,除所有者和所属组的用户)
所有用户(用a表示)
每个文件针对每类访问者定义了三种主要权限
读:read(r)
写:write(w)
执行:execute(x)
对普通文件来说,r,w,x权限表达的意义如下:
如果一个普通文件有r权限,就表示该文件的内容可以被查看到。 如果一个普通文件有w权限,就表示该文件的内容可以被修改(加内容,删内容,修改内容) 如果一个普通文件有x权限,就表示该文件可以当做脚本一样执行
对目录文件来说,r,w,x权限表达的意义如下:
如果一个目录文件有r权限,就表示该目录下的文件可以被查看属性(查看文件属性的命令ls) 如果一个目录文件有r权限,能否查看这个目录下的普通文件的内容(不一定) 一个普通文件能否查看它的内容和它所在的目录没有任何关系,而是和它自己是否具备r权限有关系。
如果一个目录文件有w权限,就表示可以在该目录下创建或删除或修改文件属性
注意:一个普通文件能否修改它的内容和它自己是否具备w权限有关系,而和它是否在具备w权限的目录没有任何关系。
如果一个目录文件有x权限,就表示可以进入该目录,如果一个目录连x权限都没有,这个目录是无法进入的。
一个目录没有x权限,也可以在该目录下创建删除文件,或者我查看文件属性
如果一个目录没有执行权限,那么即使有r权限或者w权限,也表示该目录是一个问题目录。
chmod
更改文件的权限
参数使用
[root@ggbond ~]# chmod u-w test.txt/????????????????????? # 去掉文件拥有者的写权限(其他所属组和其他人同理)
[root@ggbond ~]# chmod g+w test.txt/??????????????????????? # 为文件所属组加一个写权限
[root@ggbond ~]# chmod g-w,u-r test.txt/????????? # 也可以进行连写
?[root@ggbond ~]# chmod 757 test.txt/????????? #为文件的其他人赋予一个写权限? 我们可以通过对应数字来实现
?chown
更改文件和目录所有者
参数使用
[root@ggbond ~]# chown -R tt test.txt/???????? # 将test.txt文件所有者的用户改为用户tt
?chgrp????????
更改文件和目录的所属组
参数使用
[root@ggbond ~]# chgrp -R tt test.txt/????????????????????????? # 将test的文件所属组改为tt用户
?Linux的三种特殊权限
1、set UID
应用于可执行的普通文件,当一个文件被设置成SUID特殊权限时,任何人一旦执行该文件,都会被临时获得文件拥有人的权限
?在文件拥有者的权限列的执行权限位置,如果有s或者S,则代表该文件被设置了set UID的特殊权限
[root@ggbond ~]# chmod u-s /bin/passwd???????????????? # 去除该文件的SUID特殊权限
?[root@ggbond ~]# chmod u+s /bin/passwd????? # 为其赋予SUID权限
?2、set GID
应用于目录文件,当一个目录被设置SET GID特殊权限时,任何用户在该目录下创建文件,文件的所属组都会变成被设置SET GID那个目录的所属组。
[root@ggbond ~]# chmod g+s ggbond?????????????????????? 为目录ggbond赋予一个SGID的特殊权限
?3、Sticky(粘置位)
对于有写权限的目录设置的特殊权限位,当一个有写权限的目录被设置了sticky特殊权限;那么任何人在该目录下创建的文件就只有自己和root可以删除,该特殊权限位,限制了目录的写权限。
对于目录的写权限来说,该权限有点太大了,sticky就是限制目录写权限的。
[root@ggbond ~]# chmod o-t /tmp/?????????????????????? # 去除sticky特殊权限
?[root@ggbond ~]# chmod o+t /tmp/?????????????????????? # 赋予sticky特殊权限
[root@ggbond ~]# touch /tmp/ggbond2??????? 通过root用户在tmp文件下创建一个ggbond2文本
?[root@ggbond ~]# su - tt [tt@ggbond ~]$ rm -rf /tmp/ggbond2???????
我们发现无法删除文件
chattr和lsattr
改变属性
查看属性
参数使用
? i:不能更改 ? a:不能删除和修改,只能追加
[root@ggbond ~]# chattr +i test.txt/
[root@ggbond ~]# lsattr -d test.txt/
?[root@ggbond ~]# chattr +a test.txt/
[root@ggbond ~]# lsattr -d test.txt/ [root@ggbond ~]# rm -rf test.txt/
改变属性后我们发现无法删除
umask
umask值用于设置用户在创建文件时的默认权限,当我们在系统中创建目录或文件时,目录或文件所具有的默认权限就是由umask值决定的。
对于root用户,系统默认的umask值是0022;对于普通用户,系统默认的umask值是0002。执行
?umask命令可以查看当前用户的umask值。
[root@ggbond ~]# umask???????????????? #? root用户umask默认值
? [gg@ggbond ~]$ umask????????????????????? # 普通用户默认umask值
一般来说umask只看后3位
创建目录的缺省权限是777
创建普通文件的权限是666
正常来说任何用户创建目录后,该目录的权限是rwxrwxrwx 任何用户创建普通文本文件,该文件的权限是rw-rw-rw(因为普通文件加上执行权限是不安全的)
umask能帮助用户修改创建文件的默认权限。 创建目录的最终权限,就是目录777减去umask的后3位 创建普通文件的最终权限,就是666减去umask的后3位
root创建的目录权限应该是777-022=755 root创建的普通文件权限应该是666-022=644
普通用户创建的目录权限应该是777-002=775 普通用户创建的文件权限应该是666-002=664
修改umask方法
命令行的修改是临时的只有在当前shell有效 [root@ggbond ~]# umask 0033???????????????? # 临时修改
此时在临时修改的umask值shell窗口我们创建一个目录看看权限
创建目录权限:??????? 777-033=744=rwxr--r--
永久设置umask值:
编辑/etc/profile和/etc/bashrc的内容,然后执行 source /etc/profile /etc/bashrc 重新读取bash配置
权限细化
ACL主要的目的是在提供传统的 owner,group,others 的 read,write,execute 权限之外的细部权限划 分。ACL 可以针对单一使用者,单一文件或目录来进行 r,w,x 的权限规范,对于需要特殊权限的设定非常有帮助。
ACL 主要可以针对下列几个方面来控制权限
使用者 (user):可以针对使用者来设定权限; 群组 (group):针对群组为对象来设定其权限; 默认属性 (mask):还可以针对在该目录下在建立新文件/目录时,规范新数据的默认权限;
ACL设定方法
setfacl:设定某个目录/文件的 ACL 格式:setfacl [-bkRd] [{-m|-x} acl 参数] 目标文件名 选项与参数: -m :设定后续的 acl 参数给文件使用,不可与 -x 合用; -x :删除后续的 acl 参数,不可与 -m 合用; -b :移除『所有的』 ACL 设定参数; -k :移除『预设的』 ACL 参数,关于所谓的『预设』参数于后续范例中介绍; -R :递归设定 acl ,即包括子目录都会被设定; -d :设定『预设 acl 参数』的意思!只对目录有效,在该目录新建的数据会引用此默认值
?[root@ggbond ~]# setfacl -m u:tt:r haha????????? # 设置tt用户对haha文件可读
我们看到权限部分多了+
[root@ggbond ~]# setfacl -m g::r haha?? 表示默认给该文本的所属组用户root一个读权限
注:如果一个文件设定了 ACL 参数后,他的权限部分就会多出一个 + 号,但是此时你看到的权限与实际权限可能就会有点误差,可以通过 getfacl 来查看。
getfacl
查看某个目录或者文件的ACL
参数使用
[root@ggbond ~]# getfacl haha??????? #? 查看haha文件的真实权限使用getfacl
前三列之后全部是acl表格内容
表格内容主要有两类,一类是user开头,一类是group开头
user开头:? 该行是针对用户设置的权限
group开头: 该行是针对用户组设置的权限
有效权限的设定,用户或群组所设定的权限必须要存在于 mask 的权限设定范围内才会生效,此即有效权限 [m:权限]
root@ggbond ~]# setfacl -m m:r haha
[root@ggbond ~]# setfacl -m u:tt:rw haha
tt用户的权限与 mask 的集合仅有 r 的存在,所以 tt用户仅具有 r 的权限,并不存在 w 权限,这就是 mask 的功能。我们可以通过 mask 来规定允许的最大权限,这样就可以避免不小心开放某些权限给其他用户或组了。
?使用默认权限设定目录中新建文件的 ACL 权限继承 [d:[u|g]:[user|group]:权限] 例如:创建 haha.txt目录,为该目录设置默认 ACL 后在该目录下新建的目录与文件均会继承该目录的ACL
[root@ggbond ~]# setfacl -m d:u:tt:rx haha.txt/??????
多了一个default开头的行,default开头的所有字段,表示该目录下创建文件会继承ACL权限
mask表示该文件acl的最大权限,在default的acl权限存在情况下,创建文件的acl权限不能超过mask指定的权限
?[root@ggbond ~]# ll -d haha.txt/??????? # 加号即为已经设置了ACL权限
?在已经设置acl权限的目录内创建的文本和目录都已经继承了其属性如下图+号
取消ACL
[root@ggbond ~]# setfacl -b filename?????? # 取消所有acl [root@ggbond ~]# setfacl -x u:tt haha.txt/??? # 取消haha.txt目录的tt用户的 [root@ggbond ~]# setfacl -k haha.txt/?????????????? # 取消默认ACL
|