用户权限介绍说明
系统权限: r – 4 w – 2 x – 1 – 0
系统权限分配给: 属主 属组 其它用户
普通文件
: 各种权限作用 root 属主用户 其它用户
没有任何权限时 只有读权限时 只有写权限时 只有执行权限时
root 可读 写 可读 写 可读 写 可读 写 执行
属主用户 可写(覆盖原有内容) 可读 写 可写(覆盖原有内容) 可写(覆盖原有内容)
其它用户 没有任何权限 可读 可写(覆盖原有内容) 没有任何权限
总结:
1、 root用户是系统中无敌用户,操作不受权限限制
2、 对于文件来说, 读权限是最重要
有了读权限— 更好编辑文件
有了读权限— 可以让脚本文件执行
目录文件
: 各种权限作用 root 属主用户 其它用户
读: 可以查看目录下面信息
写: 可以在目录中删除或添加数据信息
执行: 可以切换进入到目录中
没有权限时 只有读权限时 只有写权限时 只有执行权限时
root 可读 写 执行 可读 写 执行 可读 写 执行 可读 写 执行
属主用户 没有任何权限 只能查看部分信息 没有任何权限 可执行
其它用户 没有任何权限 没有任何权限 没有任何权限 可执行
总结:
1、对于目录来说, 执行权限更重要
普通文件默认权限:
644
(默认权限 读权限)
目录文件默认权限:
755
(拥有执行权限)
文件读取原理
例如要读取该路径下的oldboy.txt文件,大概流程如下:
/oldboy/oldboy01/oldboy03/oldboy.txt
1.先从根目录开始,先查看根目录inode中的权限信息,有权限就继续进行,没权限就反馈权限不足,流程中断
2.当权限满足时,根据inode中的指针信息,指向对应的block
3.找到对应的block后,可以查看block中的文件信息
4.在block中找到对应的目录后,继续查看该目录inode中的权限信息,权限满足后根据指针找到对应block,在block中找对应的目录。
5.每一级目录都要遵循这个流程,直到找到目标文件
6.找到目标文件后,也要根据inode中的权限信息,来判断有没有相应权限,有权限后也要根据指针信息,找到对应的block,才能读取到文件的内容
用户权限设置修改
方法一: 修改系统数据权限:
umask 默认数值022
文件644 : 666 - 022 = 644 666 - 066 = 600 偶数运算
666 - 033 = 644 奇数运算 (和奇数做运算后,每一位后面加一)
目录755 : 777 - 022 = 755 777 - 066 = 711
777 - 033 = 744
临时修改:umask xxx
永久修改: 修改/etc/profile
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ];
then
umask 002
else
umask 022
fi
$UID -gt(大于) 199 --- 当前用户UID数值是否大于199
/usr/bin/id -gn --- 显示系统登录用户所属用户组名称
/usr/bin/id -un --- 显示系统登录用户名称信息
方法二: 修改系统数据权限:
chmod: 修改文件或数据权限位信息 9位权限
对指定用户修改权限:
属主用户: chmod u(user)+(添加) / -(去掉) / =(设置)
属组用户: chmod g(group)+(添加) / -(去掉) / =(设置)
其他用户: chmod o(other)+(添加) / -(去掉) / =(设置)
对所有用户修改权限:
利用数值修改: chmod 764 文件信息
统一设置权限: chmod a(all)+/-/=
PS: 对目录进行操作时, 可以进行权限递归修改 (慎用)
chmod -R 777 /oldboy
chown: 修改文件属主和属组信息
chown 属主.属组 文件信息
chown -R 属主.属组 目录信息
方法三: root用户将自身权利下放 (sudo)
chmod
第一个历程: root用户分配特殊权限给普通用户
visudo(使用时会验证语法格式) == vi /etc/sudoers (使用时不会语法验证)
root ALL=(ALL) ALL cat cp
①: 将特殊权限赋予哪个普通用户
②: 类似权限集中管理
③: 指定拥有特殊权利
oldboy ALL=(ALL) /usr/bin/rm, /usr/bin/vi 多个权限用逗号分隔
oldgirl ALL=(ALL) /usr/bin/*, ! /usr/bin/vi /etc/sudoers !代表取反操作,排除掉该权限
oldboy ALL=(ALL) NOPASSWD: /usr/bin/rm, /usr/bin/vi --- NOPASSWD 每次sudo操作不会提示输入密码信息
第二个历程: 普通检查确认特权分配
sudo -l
第三个历程: 验证自己权利
sudo 命令 xxx
用户特殊权限说明
setuid: 让一些命令可以被普通用户使用, 像命令属主用户一样使用
chmod u+s /bin/cat
chmod 4755 /bin/cat
ll /bin/cat
rwsxxxxxx
setgid: 让一些命令可以被普通用户使用, 像命令属组用户一样使用
chmod g+s xxx
chmod 2755 xxx
粘滞位: 使一个目录中数据, 只能让属主用户进行删除或编辑, 其他用户只能进行共享查看
/tmp 1777
chmod o+t xx
chmod 1777 xxx
用户相关命令参数
useradd --- 创建用户命令
-u -- 指定用户uid sa 1000 dev 2000 dba 3000
-g -- 指定用户所属主要组信息
-G -- 指定用户所属附属组信息
-M -- 不创建家目录
-s -- 指定用户登录系统方式 /bin/bash(可以登录系统) /sbin/nologin(禁止登录系统)
创建系统虚拟用户:
useradd mysql -M -s /sbin/nologin
虚拟用户: 管理数据目录|管理服务进程(例如:postfix)
-c -- 给用户添加注释说明信息
groupadd --- 创建用户组信息
-g -- 指定用户组gid信息
usermod --- 用户信息修改
-u -- 指定用户uid sa 1000 dev 2000 dba 3000
-g -- 指定用户所属主要组信息
-G -- 指定用户所属附属组信息
-s -- 指定用户登录系统方式 /bin/bash(可以登录系统) /sbin/nologin(禁止登录系统)
groupmod
-g -- 指定用户组gid信息
userdel --- 用户信息删除
-r -- 彻底删除用户相关信息
说明:
1) 删除用户时, 也会删除相关组信息
2) 删除用户时, 需要考虑家目录和邮件是否一并删除
groupdel --- 用户组信息删除
passwd --- 设置系统用户密码信息
echo 123456|passwd --stdin xxx ??? 秘钥
用户相关文件目录
文件信息:
· /etc/passwd --- 记录系统中所有用户信息
第一列: 用户名称
第二列: 密码信息
第三列: 用户uid
第四列: 用户gid
第五列: 用户描述信息
第六列: 用户家目录信息
· /etc/shadow --- 记录所有用户密码信息
· /etc/group --- 记录所有用户组信息
· /etc/gshadow --- 记录所有用户组密码信息
目录信息:
/etc/skel --- 所有用户家目录模版
PS: 用户命令提示符出现问题, 恢复命令提示符
方法一: 利用模版恢复到家目录
cp /etc/skel/* ~/
cp /etc/skel/.b* ~/
cp -r /etc/skel/* ~/
方法二: 恢复命令提示符
1.echo $PS1 输出环境变量
2.将PS1信息配置在环境变量文件中
vim /etc/profile