Linux 用户及权限深入理解
用户组的管理
当我们使用Linux时,我们需要以一个用户的身份登入,一个进程也需要以一个用户身份运行,用户限制使用者或进程可以使用或不可以使用哪些资源
组用来方便组织管理用户
用户ID为32位,从0开始,但是为了和老式系统兼容,用户ID限制在60000以下
用户分为以下三种
- root用户(ID为0的用户为root)
- 系统用户(1-499)
- 普通用户(500以上)
系统中的文件都有一个所属用户及所属组
使用id命令可以显示当前用户的信息
使用passwd
命令可以修改当前用户密码
- 每个用户拥有一个UserID,操作系统实际使用的是用户ID,而非用户名
- 每个用户属于一个主组,属于一个或多个附属组(一个用户最多有31个附属组)
- 每个组拥有一个GroupID
- 每个进程以一个用户身份运行,并受该用户可访问的资源限制
- 每个可登录用户拥有一个指定的shell
相关文件
/etc/passwd 保存用户的信息
/etc/shadow 保存用户密码(以加密的形式保存)
/etc/group 保存信息
/etc/login.defs
/etc/default/useradd
彻底删除一个用户的信息可以使用
userdel -r 用户名
[root@localhost ~]# useradd chen //加用户chen
[root@localhost ~]# passwd chen //改密码
更改用户 chen 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# tail -1 /etc/passwd //查看是否存在普通用户chen
chen:x:1000:1000::/home/chen:/bin/bash
[root@localhost ~]# tail -1 /etc/shadow //查看密码文件
chen:$6$67uXhtso$1s9N7IxoZduO1ssKeBn/cJSNRcMYjJ53nR2cpMfECI.p7oyZaiboDwP8Wk0gq05OX2735IHYttXqAjVCwzfwl/:18605:0:99999:7:::
[root@localhost ~]#
新建一个用户(useradd chen
)
这个命令执行以下操作
- 在/etc/passwd中添加用户信息
- 如果用passwd命令创建密码,则将密码加密保存在/etc/shadow中
- 为用户建立一个新的家目录/home/chen
- 将/etc/skel中的文件复制到用户的家目录中
- 建立一个与用户名相同的组,新建用户默认属于这个同名组
命令useradd
支持以下参数:
-d 指定家目录
-s 登录shell
-u 指定UID
-g 主组
-G 附属组(最多31个,用“,”分割)
[root@localhost ~]# useradd chen //加用户chen
[root@localhost skel]# su chen
[chen@localhost skel]$ su root
密码:
[root@localhost skel]# cd /home
[root@localhost home]# ls
1.txt 2.txt abc chen
[root@localhost home]# cd chen
[root@localhost chen]# ls -a
. .. .bash_logout .bash_profile .bashrc
[root@localhost chen]# rm -rf .bash*
[root@localhost chen]# ll
总用量 0
[root@localhost chen]# su chen
bash-4.2$
bash-4.2$
bash-4.2$ ^C
bash-4.2$ su root
密码:
[root@localhost chen]# cp /etc/skel/.bash* /home/chen/ -a //etc/skel是模板文件的目录
[root@localhost chen]# su chen
修改用户信息
命令usermod
用来修改用户信息
usermod 参数 username
支持参数
如下:
-l 新用户名
-u 新userID
-d 用户家目录位置
-g 用户所属主组
-G 用户所属附属组
-L 锁定用户使其不能登录
-U 解除锁定
创建用户的时候指定用户属于那个用户组:
usermod -g group_name user_name
把chen这个用户的组改成abc组
修改用户名称:
usermod -l new_user_name old_user_name
将用户加入组:
usermod -G group_name user_name
更改用户的用户组:
usermod -g group_name user_name
组的管理
几乎所有的OS都有组的概念,通过组我们可以更加方便的归类,管理用户,一般来讲,我们会使用部门,职能或地域的分类方式来创建使用组
- 每个组有一个组ID
- 组信息保存在/etc/group中
- 每个用户拥有一个主组,同时还可以拥有31个附属组
权限的管理
权限是OS用来限制对资源访问的机制,权限一般分为读写执行
。系统中每个文件都拥有特定的权限,所属用户及所属组,通过这样的机制来限制哪些用户或用户组可以对待定文件进行怎样的操作
每个进程都是以某个用户身份运行,所以进程的权限与该用户的权限的一样,所以用户的权限越大,该进程拥有的权限就大
文件权限
linux中,每个文件拥有三种权限详情如下:
r
(读取):可读取文件内容,可列出目录内容
w
(写入):可修改文件内容,可在目录中创建删除内容
x
(执行):可作为命令执行,可访问目录内容
目录必须拥有x权限
,否则无法查看其他内容
UGO
Linux权限基于UGO模型进行控制:
- U代表User,G代表Group,O代表Other
- 每一个文件的权限都基于UGO进行设置
- 权限三个一组(rwx),对应UGO分别设置
- 每个文件拥有一个所属用户和所属组,对应UGO,不属于该文件所属用户或所属组使用O权限
命令ls -l
可以查看当前目录下文件的详细信息
命令chown
用来改变文件的所属用户
修改权限
命令chmod
用以修改文件的权限
chmod 模式 文件
模式格式:
- u,g,o分别代表用户,组和其他
- a可以代指ugo
- +,-,=代表加入,删除和等于对应权限
命令chmod也支持以数字方式修改权限,三个权限由数字表示为:
- -r=4
- -w=2
- -x=1
使用数字表示权限时,每组权限分别对应数字之和
rw=4+2=6
rwx=4+2+1=7
rx=4+1=5
默认权限
每一个终端都拥有 一个umask
属性,来确定新建文件、目录的默认权限
umask使用数字权限方式表示,如: 022
目录的默认权限是 : 77-umask
文件的默认权限是: 666-umask
一般,普通用户的默认umask是022 , root用户的默认umask是022
也就是说对于普通用户来说
新建文件的权限是: 666-022 = 644
新建目录的权限是: 777-022 = 755
命令 umask用以查看设置umask值
umask 022