用户和组简介
当我们使用Linux时,需要以一个用户的身份登入,一个进程也需要以一个用户身份运行,用户限制使用者或进程可以使用或不可以使用哪些资源。
组用来方便组织管理用户。
用户分为以下三种
-root用户 (ID为0的用户为root,即高级系统管理员,拥有所有权限)
-系统用户 (1-499)
-普通用户 (500以上)
系统中的文件都有一个所属用户及所属组
- 每个用户拥有一个UID,操作系统实际使用的是UID,而非用户名
- 每个用户属于一个主组,属于一个或多个附属组(一个用户最多有31个附属组)
- 每个组拥有一个GID
- 每个可登陆用户拥有一个指定的shell环境
- 每个进程以一个用户身份运行,并受该用户可访问的资源限制
使用id命令可以显示当前用户的信息
[root@localhost ~]# id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
使用passwd命令可以修改当前用户密码
#为指定用户zzz更换密码
1 [root@localhost ~]# passwd zzz 2 Changing password for user zzz. 3 New password:
#非交互式为zzz更改密码一:
1 [root@localhost ~]# echo "123456789" | passwd --stdin zzz 2 Changing password for user zzz. 3 passwd: all authentication tokens updated successfully.
#非交互式为zzz更改密码二:
1 [root@localhost ~]# echo "zzz:123456789" | chpasswd
#非交互式为zzz更改密码三:
1 [root@localhost ~]# echo "123456" > pass.txt2 [root@localhost ~]# cat pass.txt | passwd --stdin zzz 3 Changing password for user zzz. 4 passwd: all authentication tokens updated successfully.
#非交互式为zzz更改密码四:
1 [root@localhost ~]# echo "zzz:123456" > pass.txt 2 [root@localhost ~]# cat pass.txt | chpasswd
用户及组相关操作
相关文件:
- /etc/passwd - 保存用户信息
- /etc/shadow - 保存用户密码(以加密形式保存)
- /etc/group - 保存组信息
- /etc/login.defs
- /etc/default/useradd
新建一个用户:useradd zzz1
这个命令会执行以下操作
1. 在/etc/passwd中添加用户信息
2. 如果使用passwd命令创建密码,则将密码加密保存在/etc/shadow中
3. 为用户建立一个新的家目录/home/zzz1
4. 将/etc/skel中的文件复制到用户的家目录中
5. 建立一个与用户名相同的组,新建用户默认属于这个同名组
命令useradd支持以下参数:
-d 指定家目录
-s 登陆shell
-u 指定UID
-g 主组
-G 附属组(最多31个,用“ , ”分割)
也可通过直接修改/etc/passwd方式实现,但是不建议
修改用户信息:usermod
用法:usermod 参数 username
命令usermod支持以下参数
-l 新用户名
-u 新UID
-d 用户家目录位置
-g 用户所属主组
-G 用户所属附属组
-L 锁定用户使其不能登陆
-U 解除锁定
删除用户:userdel
用法:userdel 用户名
userdel zzz1 (保留用户的家目录)
userdel –r zzz1 (同时删除用户的家目录)
组的管理:
通过组,我们可以更加方便的归类、管理用户,一般来讲,我们会使用部门、职能或地理区域的分类方式来创建使用组。
- 每个组有一个组ID
- 组信息保存在/etc/group中
- 每个用户拥有一个主组,同时还可以拥有31个附属组
创建、修改、删除组
创建组:groupadd
groupadd zzz2
修改组:groupmod
groupmod –n newname oldname 修改组名
groupmod –g newGid oldGid 修改组ID
删除组:groupdel
groupdel zzz2
权限
- 权限是OS用来限制对资源访问的机制,权限一般分为读、写、执行。
- 系统中每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户或用户组可以对特定文件进行怎样的操作。
- 每个进程都是以某个用户身份运行,所以进程的权限与该用户的权限一样,所以用户的权限越大,该进程拥有的权限就大。
文件权限:
Linux中,每个文件拥有三种权限详情见下面:
权限 | 对文件的影响 | 对目录的影响 |
r(读取) | 可读取文件内容 | 可列出目录内容 |
w(写入) | 可修改文件内容 | 可在目录中创建删除内容 |
x(执行) | 可作为命令执行 | 可访问目录内容 |
目录必须拥有x权限,否则无法查看其内容 |
Linux权限基于UGO模型进行控制:
- U代表User,G代表Group,O代表Other
- 每一个文件的权限基于UGO进行设置
- 权限三个一组(rwx),对应UGO分别设置
- 每一个文件拥有一个所属用户和所属组,对应UGO,不属于该文件所属用户或所属组使用O权限
命令ls –l可以查看当前目录下文件的详细信息:
1 [root@localhost ~]# ls -l 2 total 12 3 -rw-------. 1 root root 1854 Aug 10 20:10 anaconda-ks.cfg 4 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Desktop 5 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Documents 6 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Downloads 7 -rw-r--r--. 1 root root 1902 Aug 10 20:11 initial-setup-ks.cfg 8 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Music 9 -rw-r--r--. 1 root root 11 Aug 10 21:56 pass.txt 10 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Pictures 11 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Public 12 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Templates 13 drwxr-xr-x. 2 root root 6 Aug 10 21:47 Videos
drwxr-xr-x. 2 root root 6 Aug 10 21:47 Documents
rwxr-xr-x代表了UGO权限
每3位一组
rwx:U
r-x:G
r-x:O
修改文件所属主、组:chown
用法:
chown 用户:用户组 文件名
或者
chown 用户.用户组 文件名
:和 . 左边或右边可为空,即只改所属主或所属组
-R 参数递归的修改目录下的所有文件所属用户
改变文件的所属组:chgrp
chgrp 组名 文件名
-R 参数递归的修改目录下的所有文件的所属组
修改权限:chmod
chmod 模式 文件
- 模式为如下格式:
u、g、o分别代表用户、组和其他
a可以代指ugo
+、-、=代表加入、删除和等于对应权限
示例:
1 chmod u+w file 2 chmod u-x file 3 chmod ugo+x file == chmod a+x file 4 chmod go+r flie5 chmod u=rwx file
命令chmod也支持以数字方式修改权限,三个权限分别由三个数字表示:
r = 4
w = 2
x = 1
使用数字表示权限时,每组权限分别对应数字之和:
rw- = 4 + 2 = 6
r-x = 4 + 1 = 5
rwx = 4 + 2 + 1 = 7
所以,使用数字表示guo权限使用如下方式
chmod 660 file == chmod rw-rw---- flie
chmod 755 file == chmod rwxr-xr-x file
特殊权限及权限掩码
默认权限:
- 每一个终端都拥有一个umask属性,来确定新建文件、目录的默认权限
- umask使用数字权限方式表示,如:022
- 目录的默认权限是:777-umask
- 文件的默认权限是:666-umask
- 一般,普通用户的默认umask是002,root用户的默认umask是022
也就是说对于普通用户来说
新建文件的权限是:666-002 = 664
新建目录的权限是:777-002 = 775
查看设置umask值:umask
注:umask属于环境变量,保存在/etc/profile或/etc/bashrc文件中。
umask值的计算:
umask值的每一位为偶数时:
文件的权限计算方法:666减去umask值
目录的权限计算方法:777减去umask值
umask值有奇数时:
文件的权限计算方法:666减去umask值,然后在结果的基础上,在umask的奇数位上+1
目录的权限计算方法:777减去umask值,目录不影响
所以当umask=031时
计算方法:
文件:666-031=635 然后在奇数位上+1
即
635
+ 11
=646
所以文件的是646
而目录不影响:777-031=746
特殊权限:
除了普通权限外,还有三个特殊权限:
权限 | 对文件的影响 | 对目录的影响 |
Suid | 以文件的所属用户身份执行,而非执行文件的用户 | 无 |
sgid
| 以文件所属组身份去执行 | 在该目录中创建任意新文件的所属组与该目录的所属组相同 |
sticky
| 无 | 对目录拥有写入权限的用户仅可以删除其拥有的文件,无法删除其他用户所拥有的文件 |
设置特殊权限
设置suid:
chmod u+s file
设置sgid
chmod g+s file
设置sticky
chmod o+t file
与设置普通权限一样,特殊权限也可以使用数字方式表示
SUID = 4
SGID = 2
Sticky =1
所以,我们可以通过以下命令设置:
chmod 4755 file
文件访问控制列表
也可以看出上面所有的操作都是针对一类用户来设置的,那么如果想要某个文件对应某个用户进行特定的设置就需要用到文件的访问控制列表(ACL)了。
简单来说:ACL会更加细分对某个用户的权限指定
例子:
[root@localhost ~]# su - zzz Last login: Sat Aug 10 20:24:05 CST 2019 on :0 [zzz@localhost ~]$ cd /root -bash: cd: /root: Permission denied
用acl来设置:
1 [root@localhost ~]# ls -ld /root 2 dr-xr-x---. 14 root root 4096 Aug 10 21:55 /root
1 [root@localhost ~]# ls -ld /root 2 dr-xr-x---. 14 root root 4096 Aug 10 21:55 /root 3 [root@localhost ~]# setfacl -R u:zzz:rwx /root 4 Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ... 5 Try `setfacl --help' for more information. 6 [root@localhost ~]# setfacl -Rm u:zzz:rwx /root
1 [root@localhost ~]# su - zzz 2 Last login: Sat Aug 10 20:24:05 CST 2019 on :0 3 [zzz@localhost ~]$ cd /root 4 -bash: cd: /root: Permission denied 5 [zzz@localhost ~]$ cd /root 6 [zzz@localhost root]$
怎么去查看文件是否有ACL呢?
常用的ls命令是看不到ACL表信息的,但是却可以看到文件的权限最后一个点(.)变成了加号(+),这就意味着该文件已经设置了ACL了
[root@localhost ~]# ls -ld /root dr-xrwx---+ 14 root root 4096 Aug 10 21:55 /root
#查看具体acl
[root@localhost ~]# getfacl /root getfacl: Removing leading '/' from absolute path names # file: root # owner: root # group: root user::r-x user:zzz:rwx group::r-x mask::rwx other::---