目录
- 用户
- 创建用户
- 删除用户
- 查看(非系统)用户
- 组
- 查看所有组
- 创建组
- 删除组
- 改变用户所在组
- 从组中移除用户
- 将用户追加到其他组
- id
- 查看用户以及所属组名字和id
- 查看用户id
- 查看所属组
- 查看所属组id
- 查看所属组名字
- 查看有效用户组(主组)
- 查看有效用户组(主组)id
- 查看有效用户组(主族)名字
- 权限管理-setfacl
- 安装acl
- 查看权限
- 增加组权限
- 删除组权限
- 增加删除用户权限
- 设置mask权限
- 应用ACL的例子
- 注意:多种权限并集为最终权限
- chmod
- setuid - 4
- setgid - 2
- sticky - 1
用户
创建用户
sudo adduser new_username
adduser --system [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
[--gecos GECOS] [--group | --ingroup GROUP | --gid ID] [--disabled-password]
[--disabled-login] [--add_extra_groups] USER
--ingroup
可以创建用户时指定组。
删除用户
sudo deluser username
这个命令会删除一个现有的用户账户。
--remove-home
移除home和邮件。--remove-all-files
移除该用户为所有者的所有文件。- 其他参数可以用
deluser -h
查看。
查看(非系统)用户
users
组
查看所有组
groups 用户名
创建组
sudo addgroup new_group_name
删除组
sudo delgroup group_name
改变用户所在组
usermod -g 组名 用户名
从组中移除用户
deluser 用户名 组名
将用户追加到其他组
adduser 用户名 组名
(更方便)
或者
usermod -a -G 组名 用户名
将用户追加到其他组,此时用户拥有多个组。
例如:
sudo usermod -a -G sudo testuser
使testuser追加到sudo组,所以可以使用sudo命令。
id
查看用户以及所属组名字和id
id 用户名
查看用户id
id -u 用户名
查看所属组
查看所属组id
id -G 用户名
查看所属组名字
id -Gn 用户名
等效于 groups 用户名
查看有效用户组(主组)
查看有效用户组(主组)id
id -g 用户名
查看有效用户组(主族)名字
id -gn 用户名
权限管理-setfacl
安装acl
apt install acl
查看权限
getfacl /home/tmp
ACL的权限规则如下:
- 所有者权限owner:无论所有者在哪个组,它都有对当前文件的此权限。
- 所属组权限:组内成员对当前文件的此权限。
- other权限:其他成员对当前文件的此权限。
- mask权限:不管是所有者、所属组还是other的有效权限都是与mask权限进行与操作后获得的权限。他限制了当前文件/目录能被分配到的最大权限。
例如:
# file: home/tmp
这一行指出了ACL设置是针对哪个文件或目录的,这里是 /home/tmp
# owner: tmp
指出文件或目录的所有者是 tmp 用户。
# group:tmp
指出文件或目录属于 tmp组。
user::rwx
拥有者(owner: tmp)是rwx权限。
user:usertest:rwx #effective:r-x
标明usertest用户是本来是rwx权限,但是由于mask权限所以真实权限就是r-x。
group::rwx #effective:r-x
标明tmp组内的成员本来是rwx权限,但是由于mask权限所以真实权限就是r-x。
group:normal:rwx #effective:r-x
标明normal组内的成员本来是rwx权限,但是由于mask权限所以真实权限就是r-x。
mask::r-x
other::---
其他用户(other)没有任何权限(---),即他们不能读取、写入或执行这个文件或目录。
可以看到用户tmp既有user::rwx
指定的权限,也有group::rwx
的权限(用户tmp在tmp组内),那具体是什么权限可以参考:多种权限并集为最终权限
增加组权限
sudo setfacl -R -m g:group_name:permissions file_or_directory-R:递归地对目标目录及其所有子目录和文件应用权限更改(Optional)。-m 表示修改ACL条目。g:group_name 指定用户组。permissions 指定组的权限(例如 rwx 为读写执行三种权限)。file_or_directory 是目标文件或目录。
sudo setfacl -R -m g::permissions file_or_directory不指定具体组时,就是对当前文件本来所属组赋予permissions权限。
例如:sudo setfacl -R -m g:normal:rw /home/tmp
为normal
组增加对/home/tmp
目录的读写操作。
删除组权限
sudo setfacl -x g:group_name file_or_directory-x 表示移除ACL条目。g:group_name 指定用户组。file_or_directory 是目标文件或目录。撤销所有扩展的ACL权限
sudo setfacl -b file_or_directory-b 表示删除所有基本ACL条目。file_or_directory 是目标文件或目录。
增加删除用户权限
sudo setfacl -m u:username:permissions file_or_directory
sudo setfacl -m u::permissions file_or_directory
对owner
权限修改。
sudo setfacl -x u:username file_or_directory
设置mask权限
setfacl -m m:rwx /path/to/directory
应用ACL的例子
假设我现在有一个用户叫user
, 还有一个目录是/home/tmp
, 我现在需要为改用户增加对/home/tmp
的所有权限rwx
,但是希望它对/home/tmp
中的所有文件或者目录都是不可写(权限是rx
),我们可以使用两步来实现这个。
setfacl -m u:user:rwx /home/tmp
为user
创建/home/tmp
目录的使用权限为rwx
。setfacl -m m:rx /home/tmp/**
为该目录下的所有文件或者目录指定最高的mask权限为rx
。
此时用户user
可以在/home/tmp
目录中自己创建文件,user
创建了文件以后,它创建的文件就会属于user
和user
所在的组,因此它可以任意修改这些自己创建的文件。
但是对于/home/tmp/
中的本来已经有的文件(这些文件都被指定了mask权限是rx),用户user
只可以读取和执行,而不能写入和修改。
相同道理,用户user
创建的文件权限只属于它,所以其他用户对这些文件没有权限。
注意:多种权限并集为最终权限
ACL可以对一个文件给多个用户/组赋予不同权限,这时会产生一个现象:
假设用户tmp同时属于组normal和组tmp。我们现在给一个文件赋予了normal组的rw权限,又赋予了tmp组的rx权限,然后我们又又赋予tmp用户rw权限,同时我们又又又发现这个文件的owner就是tmp, 这时tmp本身对该文件就是rwx权限(没修改的话),那么tmp用户实际上是拥有哪个权限呢?
答案是rwx权限,它会在多个权限里取并集,获得最终的权限。
chmod
Linux chmod命令
不想搞了,感觉setfacl
提供了比 chmod
更高的灵活性,允许为不同的用户和组设置不同的权限。
不过一些特殊权限好像必须用chmod来搞:
linux suid,sgid,sticky-bit三种特殊权限简介
Linux特殊权限SUID/SGID/Sticky
这里简单说一下,正常来说我们是赋予一个用户使用什么权限来执行这个文件。
这里的特殊权限有点反过来,它是设置了一个文件给所有用户什么权限来执行它。
setuid - 4
当一个被设置了setuid
位的可执行文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都是用文件所有者的特权来执行它的。
一般的su、passwd、sudo等这种普通用户需要提升到root权限的都是通过setuid
:
# 在root用户下执行
chmod 4755 /usr/bin/su
chmod 4755 /usr/bin/passwd
chmod 4755 /usr/bin/sudo
or
chmod u+s /usr/bin/su
...
这样设置了setuid
,以后用户就可以在执行这些文件时具有文件所有者(root)的权限了。
如果要去除此特殊权限:
chmod u-s file
setgid - 2
当一个文件被设置了setgid
时,该文件将以所属组的身份运行,
当一个目录被设置了setgid
时,无论谁在这目录中创建文件,这个文件都属于父目录的所属组,而不是创建者所在的组。并且在创建的文件被自动添加setgid
。
chmod g+s file
如果要去除此特殊权限:
chmod g-s file
sticky - 1
对一个目录/文件设置了sticky
之后,尽管其他用户有写权限,也必须由属主执行删除、移动等操作。
像/tmp这样的目录需要某个用户创建的文件不被其他用户所删除,就需要设置sticky
:
chmod 1777 /tmp
or
chmod o+t /tmp
如果要去除此特殊权限:
chmod o-t file