用户身份
Linux系统的管理员之所以是root,并不是因为它的名字叫root,而是因为该用户的身份号码即UID(User IDentification)的数值为0
在Linux系统中,UID就相当于我们的身份证号码一样具有唯一性,因此可通过用户的UID值来判断用户身份。
管理员UID为0:系统的管理员用户。
/etc/passwd:保存账户名称
/etc/shadow:保存账户密码
/etc/group:保存用户组名称和GID系统用户UID为1~999: Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
普通用户UID从1000开始:是由管理员创建的用于日常工作的用户。
useradd命令用于创建新的用户 格式为“useradd [选项] 用户名”。
useradd命令中的用户参数以及作用
参数 作用 -d 指定用户的家目录(默认为/home/username) -e 账户的到期时间,格式为YYYY-MM-DD. -u 指定该用户的默认UID -g 指定一个初始的用户基本组(必须已存在) -G 指定一个或多个扩展用户组 -N 不创建与用户同名的基本用户组 -s 指定该用户的默认Shell解释器
passwd命令用于修改用户的密码 格式为“passwd [选项] [用户名]”。
passwd命令中的参数以及作用
参数 | 作用 |
-l | 锁定用户,禁止其登录 |
-u | 解除锁定,允许用户登录 |
--stdin | 允许通过标准输入修改用户密码,如echo "NewPassWord" | passwd --stdin Username |
-d | 使该用户可用空密码登录系统 |
-e | 强制用户在下次登录时修改密码 |
-S | 显示用户的密码是否被锁定,以及密码所采用的加密算法名称 |
userdel命令用于删除用户 格式为“userdel [选项] 用户名”。
userdel命令的参数以及作用
参数 | 作用 |
-f | 强制删除用户 |
-r | 同时删除用户及用户家目录 |
usermod命令用于修改用户的属性 格式为“usermod [选项] 用户名”。
usermod命令中的参数及作用
参数 | 作用 |
-c | 填写用户账户的备注信息 |
-d -m | 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去 |
-e | 账户的到期时间,格式为YYYY-MM-DD |
-g | 变更所属用户组 |
-G | 变更扩展用户组 |
-L | 锁定用户禁止其登录系统 |
-U | 解锁用户,允许其登录系统 |
-s | 变更默认终端 |
-u | 修改用户的UID |
groupadd命令用于创建用户组 格式为“groupadd [选项] 组名”。
文件权限与归属
在linux中一切都是文件,但是每个文件的类型不同 所以使用不同的字符来区分文件类型
-:普通文件。
d:目录文件。
l:链接文件。
b:块设备文件。
c:字符设备文件。
p:管道文件。
文件可存取访问的身份分为3个类别,分别是user、group、others,这3种类别各有read、write、execute
3种权限
chmod命令是一个非常实用的命令,能够用来设置文件或目录的权限
chown改变文件的属主和属组
chown root:bin test 使用这条命令 test文件的属主就变成了root 属组bin 使用的时候可以使用-R参数让其递归处理
特殊权限
SBIT 粘滞位权限
当对某个目录设置了SBIT粘滞位权限后,那么该目录中的文件就只能被其所有者执行删除操作了。
用chmod命令可以设置SBIT权限。对应的参数o+t代表设置SBIT粘滞位权限:
chmod -R o+t 目录名
chattr 用于设置文件的隐藏权限 格式为“chattr [参数] 文件”
chattr命令中用于隐藏权限的参数及其作用
参数 | 作用 |
i | 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件 |
a | 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) |
S | 文件内容在变更后立即同步到硬盘(sync) |
s | 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域) |
A | 不再修改这个文件或目录的最后访问时间(atime) |
b | 不再修改文件或目录的存取时间 |
D | 检查压缩文件中的错误 |
d | 使用dump命令备份时忽略本文件/目录 |
c | 默认将文件或目录进行压缩 |
u | 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复 |
t | 让文件系统支持尾部合并(tail-merging) |
x | 可以直接访问压缩文件中的内容 |
lsattr 显示文件的隐藏权限 格式为“lsattr [参数] 文件”
setfacl命令用于管理文件的ACL规则,格式为“setfacl [参数] 文件名称”
文件的ACL提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用-R递归参数;针对普通文件则使用-m参数;如果想要删除某个文件的ACL,则可以使用-b参数。
本来其他用户是没法访问 /root这个目录的 但是在root用户中使用setfacl命令可以让其他用户查看/root
setfacl -Rm u:其他用户名:rwx /root 然后切换到其他用户就能访问root 目录了
getfacl命令显示文件上设置的ACL信息 格式为“getfacl 文件名称”
su命令与sudo服务
su命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户
sudo命令用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务,格式为“sudo [参数] 命令名称”
sudo服务中的可用参数以及作用
参数 | 作用 |
-h | 列出帮助信息 |
-l | 列出当前用户可执行的命令 |
-u 用户名或UID值 | 以指定的用户身份执行命令 |
-k | 清空密码的有效时间,下次执行sudo时需要再次进行密码验证 |
-b | 在后台执行指定的命令 |
-p | 更改询问密码的提示语 |
总结来说,sudo命令具有如下功能:
限制用户执行指定的命令:
记录用户执行的每一条命令;
配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
验证密码的后5分钟内(默认值)无须再让用户再次验证密码。
用root用户可配置visudo配置文件 直接 visudo 就能直接打开 然后在里面可以配置其他用户使用的命令列表 也就是权限吧
[root@linuxprobe ~]# visudo 96 ## 97 ## Allow root to run any commands anywhere 98 root ALL=(ALL) ALL 99 需要配置的用户名 ALL=(ALL) ALL然后切换到我们设置了权限的用户 然后使用sudo -l 可以查看自己可以使用的命令 不过要输入自己的密码
一般来说其他用户是不可以查看到root目录的但是现在我们使用 sudo ls /root 就可以查看相关目录
但是考虑到生产环境中不允许某个普通用户拥有整个系统中所有命令的最高执行权,所以我们要给其他用户尽量少的命令权限
[linuxprobe@linuxprobe ~]$ exit logout [root@linuxprobe ~]# whereis cat cat: /usr/bin/cat /usr/share/man/man1/cat.1.gz /usr/share/man/man1p/cat.1p.gz [root@linuxprobe ~]# visudo 96 ## 97 ## Allow root to run any commands anywhere 98 root ALL=(ALL) ALL 99 linuxprobe ALL=(ALL) /usr/bin/cat如果我们只需要给他cat权限 那么我们先用whereis cat 得到命令的保存路径 然后在配置文件中修改相应的路径就好
但是普通用户每次执行sudo命令都要输入一次密码其实也挺麻烦的,这时可以添加NOPASSWD参数
[root@linuxprobe ~]# visudo 96 ## 97 ## Allow root to run any commands anywhere 98 root ALL=(ALL) ALL 99 linuxprobe ALL=NOPASSWD: /usr/sbin/poweroff