一、用户身份权限
0、id
小命令,查看用户及其所属的组。
root@kali:~# id ss
uid=1001(ss) gid=1001(ss) 组=1001(ss)
1、useradd
useradd命令用于创建新的用户,格式为“useradd [选项] 用户名”。
使用该命令创建用户账户时,默认的用户家目录会被存放在/home目录中,默认的Shell解释器为/bin/bash,而且默认会创建一个与该用户同名的基本用户组。不过这些都可以在创建用户的时候使用参数进行修改。
参数 | 作用 |
---|---|
-d | 指定用户的家目录(默认为/home/username) |
-e | 账户的到期时间,格式为YYYY-MM-DD. |
-u | 指定该用户的默认UID |
-g | 指定一个初始的用户基本组(必须已存在) |
-G | 指定一个或多个扩展用户组 |
-N | 不创建与用户同名的基本用户组 |
-s | 指定该用户的默认Shell解释器 |
linux中有UID和GID,也就是用户ID(用户名)和组ID(群组名),分别代表文件所属的用户和组。
root@kali:~# useradd ss
root@kali:~# id ss
uid=1001(ss) gid=1001(ss) 组=1001(ss)
2、groupadd
groupadd命令用于创建用户组,格式为“groupadd [选项] 群组名”。
用户组的作用和windows上的是一样的,都是为了方便权限的管理和分配。
一般直接添加群组,不经常用到参数选项:
groupadd sea
3、usermod
usermod命令用于修改用户的属性,格式为“usermod [选项] 用户名”。
参数 | 作用 |
---|---|
-c | 填写用户账户的备注信息 |
-d -m | 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去 |
-e | 账户的到期时间,格式为YYYY-MM-DD |
-g | 变更所属用户组 |
-G | 变更扩展用户组 |
-L | 锁定用户禁止其登录系统 |
-U | 解锁用户,允许其登录系统 |
-s | 变更默认终端 |
-u | 修改用户的UID |
//把用户ss添加到root用户组中
usermod -G root ss
//修改用户ss的UID号码为1234
usermod -u 1234 ss
用户的信息保存在/etc/passwd文件中,也可以直接对文件进行修改,和usermod命令等效。
4、passwd
passwd命令用于修改用户密码、过期时间、认证信息等,格式为“passwd [选项] [用户名]”
参数 | 作用 |
---|---|
-l | 锁定用户,禁止其登录 |
-u | 解除锁定,允许用户登录 |
–stdin | 允许通过标准输入修改用户密码,如echo “NewPassWord” |
-d | 使该用户可用空密码登录系统 |
-e | 强制用户在下次登录时修改密码 |
-S | 显示用户的密码是否被锁定,以及密码所采用的加密算法名称 |
//直接使用passwd命令可以修改当前用户的密码
reno@reno:~$ passwd
Changing password for reno.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
5、userdel
userdel命令用于删除用户及用户信息,格式为“userdel [选项] 用户名”。
执行删除操作时,被删除用户的家目录时默认保留的,但可以使用-r参数吧家目录也删除
参数 | 作用 |
---|---|
-f | 强制删除用户 |
-r | 同时删除用户及用户家目录 |
二、文件权限
1、Linux中的文件类型
- -:普通文件
- d:目录文件
- l:链接文件
- b:块设备文件
- c:字符设备文件
- p:管道文件
这些就是Linux中常见的文件类型了
2、Linux中文件的一般权限
一般文件的权限有可读(r)、可写(w)、可执行(x),这些权限Windows上也是有的,但普通用户平时用Windows的时候一般不会涉及权限问题,但在一文件组成的Linux系统上,文件的权限是一个大问题。
Linux中在表示权限的时候经常用数字,r、w、x分别对应的权限数字为4、2、1,而文件的权限表示经常使用这些符号的组合:
reno@reno:~/Downloads$ ls -lh
total 53M
-rw-rw-r-- 1 reno reno 53M Sep 17 08:45 code_1.38.1-1568209190_amd64.deb
//开头的-表示文件类型为普通文件,然后rw-表示所有者的权限,中间的rw-表示所属组的权限,最后的r--表示其他用户的权限
这就是Linux中文件的一般权限
3、Linux中文件的特殊权限
很多时候在一些复杂环境下,我们需要更多更全面的权限来进行更进一步的管理,Linux面对一些文件设定了特殊的权限
1)SUID权限
- 专门针对二进制程序(对目录无用)
- 让二进制程序的执行者临时拥有属主的权限(该二进制程序必须可执行)
- 属主仍是原来的属主,不过可以暂时得到属主的权限
//权限设置命令
chmod u+s filename
chmod u-s filename
2)SGID权限
- 让执行者临时拥有属组的权限(对象可以是二进制文件和目录)
- 属组仍是原来的属组
- 目录中创建的文件自动继承该目录的用户组
//权限设置命令
chmod g+s filename
chmod g-s filename
3)SBIT权限
也就是Sticky Bit(保护位)
- 确保用户只能删除自己的文件
- 目录被设置SBIT之后,其中的文件只能被其所有者或root用户删除
- 只设置在目录上,设置在文件上毫无意义
//权限设置命令
chmod o+t dir_name
chmod o-t dir_name
4)chmod和chown
chmod用法:
chmod [-cfvR] [ugoa…][[±=][rwxX]…] file
只看用法有点繁杂了
- u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
- - + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
- r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
- -c : 若该文件权限确实已经更改,才显示其更改动作
- -f : 若该文件权限无法被更改也不要显示错误讯息
- -v : 显示权限变更的详细资料
- -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
一般使用是这样:
chmod u+w filename
chown用法:
chown [-cfhvR] user[:group] file
- user : 新的文件拥有者的使用者 ID
- group : 新的文件拥有者的使用者组(group)
- -c : 显示更改的部分的信息
- -f : 忽略错误信息
- -h :修复符号链接
- -v : 显示详细的处理信息
- -R : 处理指定目录以及其子目录下的所有文件
需要强调的是,chown命令只能由管理员使用,按需要指定文件的拥有者改为指定的用户或组。
一般用法:
//指定flag.txt的拥有者为ss,群组为root
chown ss:root flag.txt
//将目前目录下的所有文件与子目录的拥有者皆设为ss,群组都设为root
chown ss:root *
4、Linux中文件的隐藏权限
隐藏权限也很特殊,是不会被用户察觉到的权限,有时候明明有充足的权限却无法删除或修改文件,这就可能说明是隐藏权限的问题了,隐藏权限在一定程度上增加了文件的安全性。
1)隐藏权限设置命令chattr
格式为“chattr [参数] 文件”
参数 | 作用 |
---|---|
i | 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件 |
a | 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) |
S | 文件内容在变更后立即同步到硬盘(sync) |
s | 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域) |
A | 不再修改这个文件或目录的最后访问时间(atime) |
b | 不再修改文件或目录的存取时间 |
D | 检查压缩文件中的错误 |
d | 使用dump命令备份时忽略本文件/目录 |
c | 默认将文件或目录进行压缩 |
u | 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复 |
t | 让文件系统支持尾部合并(tail-merging) |
X | 可以直接访问压缩文件中的内容 |
Linux中的命令总是特别多,但隐藏权限命令对于一般用户来说还是不太常用的。
可以看到-a参数就可以设置文件不被删除。
使用命令chattr +a flag.txt之后再进行删除就无法删除文件。
2)隐藏权限显示命令lsattr
格式为“lsattr [参数] 文件”
这个命令倒是没有什么参数,可以类比于ls命令,直接使用就可以显示出文件的隐藏权限。
5、文件访问控制列表(ACL-Access Control List)
权限本身就是为了限制不同用户对文件的使用程度而设置的。
如果想对某个指定的用户进行单独的权限控制,就要使用ACL了。使用ACL可以指定某个用户对特定的文件或文件夹的权限。
1)ACL设置命令setfacl
setfacl使用下面的规则格式:
[d[efault]:] [u[ser]:]uid [:perms] 指定用户的权限,文件所有者的权限(如果uid没有指定)。
[d[efault]:] g[roup]:gid [:perms] 指定群组的权限,文件所有群组的权限(如果gid未指定)
[d[efault]:] m[ask][:] [:perms] 有效权限掩码
[d[efault]:] o[ther] [:perms] 其他的权限
常用参数:
- -R:递归参数,用于目录
- -m:针对普通文件
- -b:删除文件的扩展ACL,基本的仍会保留
- -d:设定默认的acl规则
示例:
setfacl -Rm u:ss:rwx /root
2)ACL显示命令getfacl
格式为:getfacl 文件名
6、su和sudo命令
su命令用来切换用户身份,可以让当前用户在切换不退出登录的情况下切换到其他用户。
管理员切换到其他用户不需要密码,普通用户在进行用户切换的时候需要输入目的用户的密码。
//切换到ss用户,中间的-号的作用是实现完全切换,此时环境变量等系统信息也完全切换为目标用户的信息
su - ss
对于普通用户没有权限的命令,需要root用户实现,这样普通用户需要和root用户进行切换,对于普通用户工作不方便,root用户的密码也会变得不安全。sudo命令就是解决这个问题的,sudo命令会给普通用户一些更高的权限来帮助其完成工作。
先说说用法:
sudo [参数] 命令名称
参数 | 作用 |
---|---|
-h | 列出帮助信息 |
-l | 列出当前用户可执行的命令 |
-u | 用户名或UID值 以指定的用户身份执行命令 |
-k | 清空密码的有效时间,下次执行sudo时需要再次进行密码验证 |
-b | 在后台执行指定的命令 |
-p | 更改询问密码的提示语 |
sudo命令具有如下功能:
- 限制用户执行指定的命令:
- 记录用户执行的每一条命令;
- 配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
- 验证密码的后5分钟内(默认值)无须再让用户再次验证密码。
如果担心直接修改配置文件会出现问题,则可以使用sudo命令提供的visudo命令来配置用户权限。这条命令在配置用户权限时将禁止多个用户同时修改sudoers配置文件,还可以对配置文件内的参数进行语法检查,并在发现参数错误时进行报错。
sudo进行权限操作时需要的是用户的密码,这就为普通用户提供了很大的便利。
示例:
当时用apt命令安装应用的时候显示有lock(锁),不能进行操作,然后使用sudo进行暂时授权,输入用户自己的密码即可,然后就可以成功使用较高权限的命令。
只有root管理员才可以使用visudo命令编辑sudo服务的配置文件。
通过修改配置文件可以限定不同用户可用的命令。
用户可以通过sudo -l来查看可以执行的命令