文章目录
基础知识
Linux操作系统是多任务(multi-tasks)、多用户(multi=users)分时操作系统,Linux操作系统的用户就是让我们登录到Linux的权限;每当我们使用用户名登录操作系统时,Linux都会对该用户进行认证、授权审计等操作。操作系统为了识别每个客户,会给每个用户定义一个ID,就是UID。用户组就相当于多个用户的容器;在Linux系统中,用户组也有一个ID,就是GID
Linux操作系统用户
安全上下文:
进程以其发起者的身份运行:
进程对文件的访问权限,取决于发起此进程的用户的权限
在Linux,用户分为两大类;管理员和普通用户,其中普通用户又分为系统用户和登录用户
系统用户:为了能够让那些后台进程活服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户,这类用户从来不用登录系统
登录用户:就是我们一般使用登录Linux的用户
用户标识:user id,UID
通常使用16bits二进制数字标识(0-65535)
管理员的用户标识:0
普通用户:1-65535
系统用户:1-499(centos 6)、1-999(centos 7)
登录用户:500-60000(centos 6)、1000-60000(centos 7)
Linux通过名称解析库“/etc/passwd”文件解析用户名与用户ID之间的对应关系。
/etc/passwd:用户信息库
name:passwd:UID:GID:GECOS:home directory:shell
Linux操作系统用户组
在Linux中,用户组分类方式有三种
1、管理员组、普通用户组(系统用户组、登录用户组)
2、用户的基本组、用户附加组
3、私有组、公共组
用户组表示:group id,GID
通常使用16bits二进制数字标识(0-65535)
管理员的用户组标识:0
普通用户组:1-65535
系统用户组:1-499(centos 6)、1-999(centos 7)
登录用户组:500-60000(centos 6)、1000-60000(centos 7)
Linux通过名称解析库“/etc/group”文件解析用户名与用户组ID之间的对应关系
/etc/group:组的信息库
group_name:passwd:GID:user_list
user_liser:该组用户的成员;以此组为附加组的用户的用户列表
Linux操作系统密码
用户在登录 Linux 系统时,会对比 password 与之前保存在“/etc/shadow”、“/etc/gshadow”文件中的密码是否一致。
加密算法:
(1)对称加密:加密和解密使用同一个密钥
(2)非对称加密:加密和解密使用的一对密钥
密钥对:公钥、私钥
(3)单向加密:只能加密,不能解密;提取数据特征码
定长输出:
雪崩效应:密码中某一字符改变,那么整个加密后的密钥都会改变
Linux的密码加密方式使用单向加密算法,并且添加随机数(salt)计算得出的
系统识别算法ID | 算法名称 |
---|---|
1 | MD5:message digest,128bits |
2 | sha:secure hash algorithm,160bits |
3 | sha224 |
4 | sha256 |
5 | sha384 |
6 | sha512 |
/etc/shadow:用户密码
[root@centos7 ~]#head -n1 /etc/shadow
root:$6$dJoUpLtTdY/JpUAW$otUHSCXyc61mLW2gvItJnGHMVkv03RXQgn02gr9xijYHhAcjL7uxvFY79Ygl9J1TRDY1SRInok96eCF0LhZOA1::0:99999:7:::
格式:
用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:非活动期限:过期期限:保留字段
加密密码:使用 $ 分隔,第一个段表示使用的加密算法,第二个段表示添加的 salt (随机数),第三段表示加密后的密码
权限管理
Linux的文件管理权限分为读、写和执行
[root@centos7 ~]#ls -l /bin/bash
-rwxr-xr-x. 1 root root 964544 4月 11 2018 /bin/bash
文件权限:
-rwxr-xr-x
共分为五个部分:- 表示文件类型、rwx 用户属主的权限、r-x 用户属组的权限、r-x 其他用户的权限、. 是否启用 facl
权限:r(readable)表示读权限、w(wirteable)表示写权限、x(excuteable)表示执行权限
权限对文件的作用:
r:可获取文件的数据
w:可修改文件的数据
x:可将此文件运行为进程
权限对目录的作用:
r:可使用 ls 命令获取其下的所有文件列表或其子目录
w:可修改此目录下的文件列表即创建或删除文件,包括子目录
x:可 cd 至此目录中;且可使用 ls -l 来获取所有文件的详细属性信息
权限组合 | 二进制数 | 十进制数 |
---|---|---|
— | 000 | 0 |
–x | 001 | 1 |
-w- | 010 | 2 |
r– | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
示例:rw-rw-r-- 664
相关命令
用户管理命令
useradd命令:创建用户
用法:useradd [选项] 用户名
-u UID:指定UID,默认是上一个用户的UID+1
-g GID:指定基本组ID,此组得事先存在
-G GROUP1[,GROUP2,...][,GROUPN]:指明用户所属的附加组,多个用户组之间使用逗号分隔
-c COMMENT:指明注释信息
-d HOME_DIR:以指定路径为用户的家目录,通过复制/etc/skel 此目录并重命名实现,指定的家目录路径如果事先存在,则不会为用户复制环境配置文件
-s SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中
-r:创建系统用户
-M:不为用户创建主目录(家目录)
-f INACTIVE:在密码过期后,账户被彻底禁用之前的天数,0表示立即禁用,-1:表示禁用该功能
注意:创建用户时的诸多默认设定配置文件为/etc/login.defs
useradd -D:显示创建用户的默认选项配置
默认选项可在配置文件/etc/default/useradd文件中修改,保存可以直接修改此文件来实现
或:useradd -D [选项]:修改默认选项的值
usermod命令:修改用户属性
用法:usermod [选项] 用户
-u UID:修改用户的ID为此处指定的新UID
-g GID:修改用户所属的基本组;此组得事先存在
-G GROUP1[,GROUP2][,GROUP3,...]:修改用户所属的附加组,原来的附加组会被覆盖
-a:与-G一同使用,用于用户追加新的附加组
-c COMMENT:修改注释信息
-d HOME_DIR:修改用户的家目录,用户原来的文件不会被转移至新位置
-m:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录
-l NEW_LOGING:修改用户名
-s SHELL:修改用户的默认shell,可用的所有shell列表存储在/etc/shells文件中
-L:锁定用户密码,即在用户原来的密码字符串之前添加一个“!”
-U:解锁用户密码
userdel命令:删除用户
用法:userdel [选项] 用户名
-r:删除用户时一并删除其家目录和用户邮箱
id命令:显示用户的真是和有效的UID和GID
用法:id [选项]... [USERNAME]
-u:仅显示有效的UID
-g:仅显示用户的基本组的ID
-G:仅显示用户所属的所有组的ID
-n:显示名字而非ID;一般与-g一起使用:-ng
su命令
登录式切换:会通过重新读取目标用户的配置文件来重新初始化
sy - USERNAME
非登录式切换:不会读取目标用户的配置文件进行初始化
su USERNAME
注意:管理员可无密码切换至其他任何用户;其他用户在切换用户时必须输入密码
-c "COMMAND" :仅以指定用户的身份运行此处的命令
例如: su - USERNAME -c "whoami"
用户组管理命令
groupadd命令:添加组
用法:groupadd [选项] GROUP_NAME
-g GID:指定GID,默认是上一个组的GID+1
-r:创建系统组
groupmod命令:修改组属性
用法:groupmod [选项] GROUP_NAME
-g GID:修改GID
-n NEW_NAME:修改组名
groupdel命令:删除组
group [选项] GROUP
密码管理类命令
passwd命令
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays]
[-w warndays] [-i inactivedays] [-S] [--stdin] [username]
(1)passwd:修改用户自己的密码
(2)passwd USERNAME:修改指定用户的密码,但仅root有此权限
选项:
-l:锁定用户
-u:解锁用户
-d:清楚用户密码
-e DATE:过期期限,日期
-i DAYS:非活动期限,时间范围
-n DAYS:密码的最短使用期限
-x DAYS:密码的最长使用期限
-w DAYS:警告期限
--stdin:echo "PASSWORD" | passwd -stdin USERNAME
示例:[root@centos7 ~]#echo "xingxinchao" | passwd --stdin xingxinchao
更改用户 xingxinchao 的密码 。
passwd:所有的身份验证令牌已经成功更新。
gpasswd命令
用户组密码文件:/etc/gshadow
gpasswd [选项] GROUP_NAME
-a USERNAME:向组中添加用户,作为附加组
-d USERNAME:从组中删除用户
newgrp命令:临时切换指定的组为基本组
用法:newgrp [-] [GROUP_NAME]
-:会模拟用户重新登录以实现重新初始化其工作环境
注意:若指定组设定了密码
(1)如果用户的附加组是要切换到的组名,那么不需要密码可以直接切换到指定组
(2)如果用户的附加组不包含要切换的组名,那么需要输入密码才能切换到指定组
若指定组没有设定密码,所有用户都不可以直接切换到指定组,root用户除外
权限管理命令
chmod命令:修改文件或目录的权限位
三类用户:
u:属主
g:属组
o:其他
a:所有
(1)chmod [选项]... MODE[,MODE]... FILE...
MODE表示法:
赋权表示法:直接操作一类用户的所有权限位
在赋予三类用户的权限不同时,则用逗号隔开,如果相同,可以合并授权
u=
g=
o=
a=
授权表示法:直接操作一类用户的所有权限位r,w,x
在赋予三类用户的权限不同时,则用逗号隔开,如果相同,可以合并授权
u+,u-
g+,g-
o+,o-
a+,a-
(2)chmod [OPTION]... OCTAL-MODE FILE...
使用十进制的数字进行授权
选项:
-R:递归修改,对目录下的所有文件(包括子目录)都有效
注意:用户仅能修改属主为自己的文件的权限
从属关系管理类命令
chown命令:修改文件属主和属组
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
选项:
-R:递归修改,对目录下的所有文件(包括目录)都有效
--reference:参考其他文件属主属组进行修改属主和属组
注意:仅管理员可修改文件的属主和属组
chgrp命令:修改文件属组
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
umask命令:文件的权限反向掩码,遮掩码
文件:
666-umask
目录:
777-umask
注意:之所以文件用666去减,表示文件默认不能拥有执行权限;如果减得的结果中有执行权限,则需要将其加1
umask命令:
umask:查看当前umask
umask MASK:设置umask
注意:此类设定仅对当前shell进程有效
Linux facl(访问控制列表)
访问控制列表简介
一般权限、特殊权限。隐藏权限其实有一个共性–权限是针对某一类用户设置的。如果希望对某个指定用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了,通俗来讲,基于普通文件或目录设置 ACL 其实就是针对指定的用户或用户组设置文件或目录的操作权限。另外,如果针对某个目录设置了 ACL ,则目录中的文件会继承其 ACL;若针对文件设置了 ACL,则文件不再继承其所在目录的 ACL。
ACL有什么用?
既然是作为 UGO 权限管理的补充,ACL 自然要有 UGI 办不到或者很难办到的本事;
例如:
1.可以针对用户来设置权限
2.可以针对用户组来设置权限
3.子文件/目录继承父目录的权限
检查是否支持 ACL
ACL 需要 Linux 内核和文件系统的配合才能工作,当前我们能见到的大多数 Linux 发行版默认都是支持的,但是最好还是能够先检查一下;
# tune2fs -l device | grep “Default mount options”
Defaults mount options: user_xattr acl
我们能够看到默认情况下已经加入 acl 支持了
如何设置 ACL
我们可以使用 setfacl 和 getfacl 命令来设置或观察文件/目录的 acl 权限
setfacl 命令:设置 ACL (访问控制列表) 权限
选项:
-m:配置后面的 acl 参数给文件/目录使用,不可与 -x 合用
-x:删除后续的 acl 参数,不可与 -m 合用
-b:删除文件中的所有的扩展的 acl 设置信息
-R:递归操作到所有子目录和文件
示例
赋权给用户
setfacl -m u:USERNAME:MODE FILE...
USERNAME:为用户名
MODE:权限位
FILE:文件或目录
赋权给组
setfacl -m u:GROUPNAME:MODE FILE...
GROUPNAME:组名
MODE:权限为
FILE:文件或目录
删除 acl 权限
setfacl -x u:USERNAME FILE...
setfacl -x g:GROUPNAME FILE...
getfacl命令:查看文件或目录的 ACL 设置信息
用法:getfacl FILE
选项:
-a:显示文件或目录的访问控制列表
-R:操作递归到子目录