所有修改权限的动作,可能需要重新登录用户,才能够生效
用户信息及组信息的存放文件:
/etc/passwd存放用户信息
/etc/shadow存放用户密码
/etc/group存放组信息
#一般看组信息都是grep这个文件,而不是用id查用户
/etc/gshadow存放组密码
组:方便对用户的管理,方便对权限的管理
组的唯一标识:GID
Linux的用户至少属于一个组
组分为两种:基本组 从属组
当我们新创建一个用户时,不加任何选项时,系统就会自动生成一个同名的组,这个组也叫基本组
除了这个系统的组,用户加入的别的组都叫从属组
用户:
UID是用户的唯一标识,管理员root的UID是0
用户信息存放在/etc/passwd 文件中
显示的信息如下:
root : x : 0 : 0 : root : /root : /bin/bash
用户名:密码:UID:基本组的GID:用户描述信息:用户的家目录:用户的登陆解释器
用户密码存放在/etc/shadow 文件
显示信息如下:
root : !!或密码串 : 距离上次的密码修改时间 : 0 : 99999 : 7 : : :
用户名:!!表示没密码不让登录:距离上次修改密码的时间:过多少天必须修改密码0是不用改:密码有效期:在密码失效前需要提前多少天改密码
id 用户名:该命令可以查看用户的详细信息,会显示uid gid 组信息
使用useradd命令添加用户:
添加用户并指定用户的UID:useradd -u 数字 用户名
添加用户并指定用户家目录:useradd -d 路径 用户名
添加用户并指定登陆解释器:useradd -s /sbin/nologin 用户名(这个是创建不能登陆的用户)
添加用户并指定从属组:useradd -G 从属组 用户名
使用passwd命令修改密码:root权限下可以任意修改普通用户的密码
命令格式:
passwd 普通用户名
#root才能用这命令,普通用户不需要输入用户名,直接输入passwd,普通用户改密码有复杂度要求,普通用户没密码不让登录
非交互式的设置密码:
echo 密码 | passwd --stdin 用户名
#如果不加 --stdin会显示交互信息
切换用户的方法:
su - 用户名 #root su到任何用户都不需要密码
修改用户的属性:
命令格式:usermod [选项] 参数
修改用户的UID:usermod -u
修改用户的家目录:usermod -d
#这个命令并不会创建新的家目录
#而且如果以root用户去cp普通用户的家目录的隐藏文件,这里面是环境变量,相关权限也会变成root的
#这个命令只是去修改了/etc/passwd的第六个字段
#所以当你给这个用户指定了一个新的家目录时,你可能就会出问题登录不了了
修改用户的解释器:usermod -s
修改用户的附加组:usermod -G
例:usermod -u 1600 -d /opt/a -s /sbin/nologin -G 组名称 所需要改的用户名
以数字的形式改变权限:
usermod -u 777 root
使用userdel命令删除用户:
删除用户:userdel 用户名
删除用户及家目录:userdel -r 用户名
修改用户组信息及创建组:
组信息在/etc/group 文件里的显示内容如下
root : x :0 :组成员
组名:组的密码占位符:组的ID:组成员列表
创建新的组:groupadd 组名
把用户加进组里:gpasswd -a 用户名 组名
把用户从组里删除:gpasswd -d 用户名 组名
修改组属性:
修改组ID:groupmod -g 新ID 组名
修改组名称:groupmod -n 新组名 原组名
删除组:groupdel 组名
目录或文件的权限及归属:但是权限约束不了root用户
读取权限:r
一般是要和x一起给的
写入权限:w
w权限只针对它的子目录和子文件生效,当前目录是不生效的,要想改这个目录,必须对上一级目录有w权限
而且必须要和r一起使用
可执行权限:x
比如bash 文件 或者 cd到这个目录,都属于执行动作
权限适用对象:u(所有者) g(所属组) o(其他用户)
例:ls -ld /opt 显示内容如下
d rwxr-x--x. 10 root root 4096 12月 3 20:06 /opt
#第一列:
d代表该文档是目录 -代表普通文件 l代表快捷方式
#第二列:
rwx代表所有者的权限有 读、写、执行
r-x代表所属组成员的权限有 读、执行
--x代表其他用户有执行权限,但是一般执行权限必须要与r权限一起使用
#第四列:
该目录的所有者是哪个用户
#第五列:
该目录的所属组是哪个组
利用chmod命令修改文档的权限:
命令格式:
chmod [选项] 参数 目标文件或目录
chmod -R ugo=rwx /opt
#就是给/opt目录下的所有子目录和文件修改成这个权限
为文档更改权限:chmod u/g/o +/-/= 目标文件或目录
例:
chmod u+r /opt
chmod g=w /opt
如果想更改多个权限可以用逗号隔开
例:
chmod u+r,g=x /opt
如果多个角色更改相同的权限
例:
chmod ugo=rwx /opt
权限的数值表示:
r=4 w=2 x=1
一个用户能否cd进一个目录:
在于该用户对该目录是否有x权限
如果一个用户拥有一个目录的所有权限:
则可以对这个目录下的所有子目录做任意修改
利用chown命令修改文档的所属关系:
修改目录的所有者:
chown -R lisi /opt
#-R是递归修改,也就是将/opt和它的子目录所有者都改成lisi
修改目录的所属组:
chown :lisi /opt
两者一起修改:
chown lisi:lisi /opt
关于权限的匹配机制:遵循匹配即停止机制
所有者>所属组>其他人
当系统判定到一个用户是目录的所有者,就只会看所有者所拥有的权限,而不去看这个用户还有没有其它权限,以此类推
其它的附加权限:
特殊权限必须是先设置后生效,对于已经存在的子文档是不生效的。
关于t权限:
chmod o+t /tmp
ls -ld /tmp
d rwx---rwt. 15 root root 4096 6月 5 11:12 /tmp
#当root想让普通用户在/tmp目录中可以自由的删除或更改自己的目录或文档,而又无法更改其他用户的文件和文档,就可以赋予这个/tmp目录o+t
#t权限适用于o角色,t权限会在执行权限的位置上覆盖x权限
关于s权限:
针对目录,s的权限适用于g角色
chmod g+s /opt/test
ls -ld /opt/test
drwxr-sr-x 3 root test 4096 Jul 8 09:56 /opt/test/
#功能就是以后在/opt/test目录下建的任何文件或者目录,所属组都会是test
#如果所属组的用户有x权限,则在x位置上显示小s,如果没有x权限,则显示大S
#s权限只适用于u和g角色
针对可执行文件,s的权限适用于u角色
chmod u+s /opt/a.sh
#传递所有者身份,以后不管什么用户运行该程序,都会以该文件所有者权限执行,这句话是两个意思
#比如/opt/a.sh原本除了所属主以外都没有执行权限,加了s,普通用户也可以执行这个程序
#又或者说我们用root给/usr/bin/mkdir这个命令设置u+s,那么以后普通用户用mkdir建目录所属主都会变成root
acl访问控制列表:
acl策略实现更加精细的控制,可以针对单个用户,或者组设置权限
当我们设置了acl权限以后,d rwx---rwt. 这个.就会变成+
给指定用户增加acl权限:
setfacl -m u:用户名:权限 /opt
给指定组增加acl权限:
setfacl -m g:组名:权限 /opt/1.txt
删除用户或组对该文档的acl权限:
setfacl -x u:用户名:权限 /opt
setfacl -x g:组名:权限 /opt
删除文档的所有acl策略:
setfacl -b /opt
查看文档的所有权限包括acl权限:
getfacl /opt
#有的时候因为acl权限设置过多,会导致ls看到的权限和实际显示会有出入,建议看权限用这个命令看
利用acl给用户设置黑名单:
setfacl -m u:lisi:--- /opt