Linux 上用户及权限管理
在 linux 上学习权限管理机制
Linux 上用户及用户组的关系?
- 每个用户拥有一个 UserID,每个组拥有一个 GroupID
- 每个用户属于一个主组,属于一个或多个附属组,一个用户最多有 31 个附属组
1
2(base) wushaogui@AI2:/mnt$ id wushaogui
uid=1001(wushaogui) gid=1001(wushaogui) groups=1001(wushaogui),1004(sharedata)
linux 如何添加用户及用户组?
- 添加用户
1
2
3
4
5# -m 创建用户目录
# -s /bin/bash 可登录 /sbin/nologin不能登录
# -d 设置用户主目录
-g 用户组
sudo useradd username -m -s /bin/bash -d /home/username -g groupname - 添加用户组
1
2# 也可以不新建,新用户直接加到默认组上,即自身为一个组
sudo groupadd groupname
Linux 如何设置密码?
- 使用 passwd 设置即可
1
sudo passwd username
Linux 如何删除用户?
- 使用 userdel 删除即可
1
sudo userdel username
Linux 如何更改用户登录权限?
- 使用 usermod 设置即可
1
2
3
4# 允许登录
sudo usermod -s /bin/bash username
# 禁止登录
sudo usermod -s /sbin/nologin username
什么是 Linux 的 UGO 权限管理
- Linux 上进行权限管理的基本方式,UGO 分别表示用户、群组、其他
- Linux 的 ACL 权限 可以对该权限管理方式进行扩充
Linux 上文件或目录的类型及普通权限说明?
- Linux 上有共有 7 种文件类型:(文件)、d (目录)、l (链接文件,详细看 Linux 上的软链接与硬链接 )、c (串行端口设备,如键盘和鼠标)、b ( 块设备文件,如 /dev/hda1) 、s (套接字文件,/var/run 目录常见)、p (管道文件)
- Linux 上的文件权限针对 3 类对象:owner (u,文件所有者)、 group(g,文件所属用户组)、 other (o,其他用户)
- Linux 上的文件权限每个对象有 3 种权限:r (读权限)、w (写权限)、 x (执行权限)
Linux 上的更新文件或目录普通权限的方法?
使用 chmod 命令更新文件或目录普通权限,递归使用加参数 - R
使用十进制编码更新
1
2
3
4
5chmod xyz [文件名/目录名]
# 用r=4,w=2,x=1来表示权限
# 755 表示修改文件file的用户所有者权限为读\写\执行,所属组权限为读\执行,其他人权限为读\执行
chmod 755 [文件名/目录名]使用符号 -, + 和 = 更新
1
2
3
4chmod xyz [文件名/目录名]
chmod u=rwx,go=rx [文件名/目录名]
chmod u+w,g+x [文件名/目录名]
Linux 上的更新文件或目录所有者或所属组的方法?
使用命令 chown 更新文件或目录所有者
1
2chown [-R] 所有者 [文件名/目录名]
chown [-R] 所有者:所属组 [文件名/目录名]使用命令 chgrp 更新文件或目录的所属组
1
chgrp [-R] 所属组 [文件名/目录名]
Linux 上文件或目录的默认权限 (umask)?
Windows 系统中,新建的文件和目录时通过继承上级目录的权限获得的初始权限,而 Linux 不同,它是通过使用 umask 默认权限来计算新建文件或文件夹的初始权限,计算方法看 Linux 上使用 umask 计算初始权限
** 查看 umask 默认权限:**umask 默认权限确实由 4 个八进制数组成,但第 1 个数代表的是 Linux 上的特殊权限,后 3 位数字 “022” 才是 umask 权限值,将其转变为字母形式为 ----w–w-
1
2
3[root@localhost ~]# umask
0022
#root用户默认是0022,普通用户默认是 0002修改 umask
1
2
3
4
5
6
7# 临时生效,重启或重登录后失效
[root@localhost ~]# umask 002
[root@localhost ~]# umask
0002
[root@localhost ~]# umask 033
[root@localhost ~]# umask
0033
Linux 上如何求取新建文件或目录的初始权限?
按照 Linux 文件或目录的默认权限 获得默认权限
使用公式求取初始权限
1
文件(或目录)的初始权限 = 文件(或目录)的最大默认权限 - umask权限
文件的最大默认权限一般是 666,如果 umask 默认权限为 022,则所有新建文件初始权限是 644
目录的最大默认权限一般是 777,如果 umask 默认权限为 022,则所有新建文件初始权限是 755
Linux 上文件或目录特殊权限有哪些?
- 文件设置 s 和 t 权限,会占用 x 权限的位置
Linux 文件或目录特殊权限 SUID 使用说明?
以文件的所属用户身份执行,而非执行文件的用户;无法作用于目录
只有可执行文件才能设定 SetUID 权限,对目录设定 SUID,是无效的,此时权限位为大写 S
1
2
3
4
5
6
7
8
9[root@localhost ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 22984 Jan 7 2007 /usr/bin/passwd
# 设置SUID
chmod u+s file...
chmod 4755 file...
# 取消设置
chmod u-s file...
chmod 0755 file...
Linux 文件或目录特殊权限 SGID 使用说明?
以文件所属组身份去执行;可以作用于目录,此时在该目录中创建任意新文件的所属组与该目录的所属组相同
如果该权限设置不成功,此时权限位为大写 S
1
2
3
4
5
6
7
8
9[root@localhost ~]# ll /usr/bin/locate
-rwx--s--x. 1 root slocate 35612 8月24 2010 /usr/bin/locate
# 设置SGID
chmod g+s file...
chmod 2755 file...
#取消设置
chmod 0755 file...
chmod g-s file...
Linux 文件或目录特殊权限 SBID 使用说明?
对目录拥有写入权限的用户仅可以删除其拥有的文件,无法删除其他用户所拥有的文件
如果该权限设置不成功,此时权限位为大写 T
1
2
3
4
5
6
7
8
9
10[root@localhost ~]# ll -d /tmp
drwxrwxrwt. 4 root root 4096 Apr 19 06:17 /tmp
# 在其他人身份的权限设定中,原来的 x 权限位被 t 权限占用了,这就表示此目录拥有 SBIT 权限
#设置SBIT
chmod o+t dir...
chmod 1755 dir..
#取消设置
chmod 0755 dir...
chmod o-t dir...
Linux 上文件特殊权限的 SUID 与 SGID 有什么区别?
- SUID 无法作用于目录,而 SGID 可以
- SUID: 以文件的所属用户身份执行,而非执行文件的用户;无法作用于目录
- SGID: 以文件所属组身份去执行;可以作用于目录,此时在该目录中创建任意新文件的所属组与该目录的所属组相同
什么是 Linux 文件(目录)隐藏权限?
Linux 系统中的文件和目录,除了可以设定 Linux 上的普通权限 和 Linux 上的特殊权限 外,还可以利用文件和目录具有的一些隐藏属性
使用 chattr 命令,专门用来修改文件或目录的隐藏属性,只有 root 用户可以使用
1
2[root@localhost ~]# chattr [+-=] [属性] 文件或目录名
# + 表示给文件或目录添加属性,- 表示移除文件或目录拥有的某些属性,= 表示给文件或目录设定一些属性使用 lsattr 查看文件或目录隐藏属性
1
2
3
4[root@localhost ~]# lsattr [选项] 文件或目录名
# -a:后面不带文件或目录名,表示显示所有文件和目录(包括隐藏文件和目录)
# -d:如果目标是目录,只会列出目录本身的隐藏属性,而不会列出所含文件或子目录的隐藏属性信息;
# -R:和 -d 恰好相反,作用于目录时,会连同子目录的隐藏信息数据也一并显示出来。
Linux 上什么是 ACL 权限?
- ACL 的全称是 Access Control List (访问控制列表) ,一个针对文件 / 目录的访问控制列表。
- 它在 Linux 的 UGO 权限管理 的基础上为文件系统提供一个额外的、更灵活的权限管理机制。
- ACL 允许你给任何的用户或用户组设置任何文件 / 目录的访问权限
ACL 相比 UGO,有什么补充?
- 可以针对用户来设置权限
- 可以针对用户组来设置权限
- 子文件 / 目录继承父目录的权限
Linux 上如何开启 ACL 权限?
检查系统是否支持 ACL
1
dumpe2fs -h /dev/sda1
临时开启
1
mount -o remount,acl /dev/sda1
永久开启,修改文件 /etc/fstab
Linux 上使用 ACL 的场景之一?
- Linux 上的普通权限 管理可以管理文件或文件夹的 3 类对象的权限,比较粗略,假设有一个用户,既不是文件拥有者 (U),也不属于文件所属组 (G),也要求按其他人 (O) 以外的权限给这个用户设置,UGO 的方式不能做到
- 例子:所有者 root 用户在根目录下创建一个文件目录 /project,然后创建一个 QQ 群所属组,所属组里面创建两个用户 zhangsan 和 lisi。所有者和所属组权限和其他人权限是 770,如何新建一个旁听用户 pt,给他设定 /project 目录的 ACL 为 r-x?
Linux 上如何设置 ACL 权限?
ACL 权限命令管理
1
2
3
4[root@localhost ~]# getfacle 文件名
#查看ACL权限
[root@localhost ~]# setfacl 选项 文件名
#设定ACL权限给用户和用户组添加 ACL 权限
1
2
3
4
5# 给用户设定 ACL 权限
setfacl -m u:用户名:权限 指定文件名
# 给用户组设定 ACL 权限
setfacl -m g:组名:权限 指定文件名最大有效权限 mask
1
setfacl -m m:权限 文件名
默认 ACL 权限和递归 ACL 权限
1
2
3
4
5# 默认ACL权限
setfacl -m d:u:用户名:权限 文件名
# 递归ACL权限
setfacl -m u:用户名:权限 -R 文件名删除 ACL 权限
1
2
3
4
5
6
7
8# 删除指定用户的 ACL 权限
setfacl -x u:用户名 文件名
# 删除指定用户组的 ACL 权限
setfacl -x g:组名 文件名
# 删除文件的所有 ACL 权限
setfacl -b 文件名