本文分为两部分:第一部分先介绍用户与权限的各种观念
第二部分再集中介绍一下相关命令
个人理解的用户,文件,与进程关系之间的关系如下:(以下的文件不包含目录)
用户通过对该文件的权限来操作文件,使文件在进程中运行,此时用户的作用可表现为进程的发起者
查看文件的权限可通过以下命令执行
ls -l :查看当前目录中的文件与目录的详细信息:
在查询结果中可查看当前目录下的详细文件信息:
首先看一下查询结果中的第一部分:-rw-r--r-- 在这里我们可以获取到的信息由文件的格式与权限信息
第一个 “ - ” 表示的是该文件的类型 :
- | 常规文件 |
d | 目录文件 |
b | 块设备文件 |
c | 字符设备文件 |
l | 符号链接文件 |
p | 命名管道 |
s | 套接字文件 |
剩余部分每三个字符为一组 分别表示三个用户类别的权限:用户权限,组权限,其他权限
用户与组的组成关系如下图
每一组权限由三个字符组成:r--可读,w--可写,x--可执行
举例: 一个文件信息中第一部分为: -rwxrw-r--
代表该文件为普通文件 rwx:属主对其可执行的权限
rw-:属组可执行的权限
r--:其他用户可执行的权限 --其他用户:既不是该文件的属主,也不属 于该文件的组的用户
在文件详细信息中,第二列 第三列的 分别表示该文件的属主与属组
之后分别是文件的大小,创建日期,文件名
接下来就要详细说明一下关于用户,组的信息与概念
每个用户,组都有一个唯一的ID 命令id可查看当前登录的用户信息
ID | 解析库(信息库) | ||
用户 | UID | /etc/passwd 密码存放的位置为/etc/shadow: | |
组 | GID | /etc/group: |
用户UID中 管理员用户为0 ,系统用户为1~499(CentOS6.7),普通用户为500~60000
组GID中 管理员组为0,系统用户组为1~499(CentOS6.7),普通用户为500~6000
进程是以发起者的身份运行。即 进程对文件的访问权限取决于发起进程的用户/用户所属组的权限
什么是系统用户?
在系统中的后台进程和服务类进程都需要以用户的身份运行,如果以管理员身份运行的话有可能会对系统造成危险。所以需要一组普通用户来运行,此类用户不需要登录系统。--这就称之为系统用户
用户的私有组:组名与用户名一样,且只包含一个用户。在我们创建新用户时系统会默认的给我们创建一个同名的用户组
密码:输入 chage -l username 可以看到指定用户的密码信息
自上而下分别为:最后一次的密码更改时间。密码过期时间。非活动时间。账户过期时间。两次密码改变之间最小距离天数。最大天数。密码过期前开始警告的天数
在非活动时间内:账户依然存在,不过必须要在修改了密码后才能继续使用
在账户过期之后就只能以管理员的身份来解决
查看组的信息库: /etc/group
查看用户的信息库: /etc/passwd
用户名:密码:UID:GID:注释信息:家目录:默认shell
其中密码是独立存放于 /etc/shadow中的
其中$6$中6表示该密码采用了 sha-512(86位)的算法 其他加密算法有:
1:MD5(22位)
2a:Blowfish--只在一部分linux分支中使用的加密算法
5:SHA-256(43位)
在设置密码时为了安全:1.使用随机码
2.最短长度不要低于8位
3.使用大写/小写字母,数字,标点符号中至少三类
4.定期更换
接下来就介绍一下linux用户与权限管理中常用到的命令:
ps:只介绍了命令中的部分参数选项,详细的参数及使用方法可以自行man COMMAND查看
更换用户: su
管理员在切换其他用户的时候可以无需密码直接登录
su username :非登录式切换 不会读取用户目标的配置文件进行初始化
su - username :登录式切换 通过重新读取用户的配置文件来重新初始化
-c ,--command : 需要用某个用户来执行命令。但不想切换到该用户的时候可以用这个选项
像我这个样门都没入的新手看来这个选项目前是不知道有什么意义。
创建新用户: useradd useradd [选项] logname
常见的选项有:
-u:制定uid 默认情况下uid是自动分配的。id=最后一个UID+1
-g:制定基本组ID 此组必须要事先存在
-G:知名用户的附加组
-c:注释信息
-d:指明家目录
-s:制定默认shell
-r:创建系统用户
修改用户属性: usermod usermod [选项] username
-u:修改id为指定id
-g:修改用户的基本组,指定的组必须事先存在
-G:修改附加组。会默认覆盖用户原来的附加组。若是想追加用户组可用-a选项一起使用
-c:修改注释信息
-l:修改用户名
-L:锁定用户。禁止登录。-原理为在用户的密码字符串中首部加一个!
-U:解锁用户
userdel:删除用户
-r:删除用户时把用户的家目录一起删除 默认情况下不删除家目录
groupadd: 添加组
groupmod:修改组的选项
groupdel:删除组
由于这三条命令使用方法与用户的添加修改删除差不多。所以就不需要举例。可自行查看帮助手册
对组的成员用户进行操作: gpasswd gpasswd [选项] group
-a username: 像组中添加用户
-d username: 从组中移除用户
newgrp:临时切换为制定的组为基本组 newgrp [-] [group]
-:模拟用户重新登录-重新初始化其工作环境
文件权限管理部分的常用命令:
在这里需要注意一件事 : 那就是用户只能修改属主为自己的权限
进程对文件的访问权限应用模型:
进程的属主与文件的属主是否相同:如果相同则应用属主权限进行,否则则看发起者是否属于文件的属组
属于属组则使用属组权限 否则使用其他权限
文件 | 目录 | |
r | 可获取文件的数据 | 可使用ls获取其下所有文件列表 |
w | 可修改文件的数据 | 可修改此目录的文件列表 即创建和删除 包括他的子目录 |
x | 可执行,默认情况下任何文件都不该有执行权限 | 可移动到此目录中。并且可获取所有文件的详细属性信息 |
修改文件(目录)的权限:chmod 修改目录时只影响目录本身
有三种格式的用法:
1.chmod [option] ...mode[,mode,mode]...file
在图1中 是直接覆盖之前的权限。如果只需要添加或者删除某一个权限就可以用+(添加)或- (删除)来组合使用
u 用户 g组 o 其他用户 ugo可单独使用也可以组合使用
2.chmod [OPTION]... OCTAL-MODE FILE...
现在就要讲一下文件权限的另一种表示方法
如果把我们输入 chmod 22 file 没有给出3位数看看是什么结果
从结果中可以知道在没有给三位出的情况下会默认往首位填0 即 22=022
3.chmod [OPTION]... --reference=RFILE FILE.
chmo --reference=file1 file2把2的权限改为和1一样
-R,--recursive: 递归修改:修改目录下的所有目录,子目录 文件。
修改文件的属主: chown
chown [OPTION]... [OWNER][:[GROUP]] FILE...OWNER:GROUP或OWNER.GROUP皆可
chown [OPTION]... --reference=RFILE FILE...
-R:递归修改
修改文件的属组:chgrp
在创建文件的时候之所以会有默认权限。是因为umask存在
umask:件权限的反向掩码,遮罩码:防止创建出来的文件/目录为777
umask有个默认值 022
由于文件不应该有执行权限 所以: 666-umask就是创建文件时的默认权限
如果最后运算所得的结果为3/5等带有执行权限的。就会+
如666-043=623 就会+1得 624
目录中是: 777-umask
但是实际上当我们查看umask值得时候看见的是0002四位数.
左边多出来的那一位代表的就是文件的 SUID,SGID,STYCKY属性
SUID:当用户在运行某程序时 对该文件拥有SUID权限时.该用户不是运行的发起者. 文件会以自己的属主为发起者
设置:chmod u+s
user位的x位置为s时.代表别的用户能以该用户的权限运行文件
应用: /bin/passwd
虽然test用户不是passwd的属主/属组. 但是依然能执行该文件修改自己的密码
SGID chmod g+s
目录属组有写权限,而且有SGID权限时.那么所有属于此目录的属组.且以属组身份再次目录中心创建文件或目录时新文件的属组不是用户的基本组:而是此目录的属组.
STYCKY chmod o+t
对于属组或全局可写的目录.组内的所有任务或系统上的所有用户在此目录中都能创建新文件或删除所有的已有文件.如果为此类目录设置Sticky权限.则每个用户能创建新文件,且只能删除自己的文件.
效果:只要该目录有t位. 别人不能删掉 即使是有读权限也不能删除 只有该文件拥有者可以删除
一般与SGID一起使用.在共享文件夹中的应用
facl 文件访问控制列表
facl可理解为对不属于文件属主/属组的用户/组赋予与文件属主/属组权限无关的单独授权
getfacl:查看某文件的列表:
getfacl FILE
user:USERNAME:MODE
group:GROUPNAME:MODE
setfacl命令:
setfacl -m u:USERNAME:MODE FILE...
-m g:GROUPNAME:MODE FILE...
撤销赋权:
setfacl -x u:USERNAME:MODE FILE...
-x g:GROUPNAME:MODE FILE...
否定优先级最高: 一个用户在a b两个组 ab两个组都是文件A的特权组 此时 该用户执行A文件的时候 是执行否定级的 即 a组 --- b组 rwx 时 该用户对该文件的权限是---