# linux文件权限
用户权限是通过创建用户时分配的用户ID
(User ID
,通常缩写为UID
)来跟踪的。
# 用户账户处理
先来看一下Linux
是怎样处理用户账户的。
Linux
系统使用专门的文件/etc/passwd
来将用户的登录名匹配到对应的UID
值。
cat /etc/passwd
# root:x:0:0:root:/root:/bin/bash
# daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
# bin:x:2:2:bin:/bin:/usr/sbin/nologin
# sys:x:3:3:sys:/dev:/usr/sbin/nologin
# sync:x:4:65534:sync:/bin:/bin/sync
Linux
系统会为各种各样的功能创建不同的用户账户,而这些账户并不是真的用户。这些账户叫作系统账户,是系统上运行的各种服务进程访问资源用的特殊账户, 这样可以防止有人攻入某个服务获取root
账号后访问整个系统。
Linux
为系统账户预留了500
以下的UID
值。大多数Linux
系统会从500
开始,将第一个可用UID
分配给这个账户
/etc/shadow
文件为系统上的每个用户账户都保存了一条记录,对Linux
系统密码管理提供了更多的控制。
添加新用户: 向Linux
系统添加新用户使用useradd
命令,useradd
命令使用系统的默认值以及命令行参数来设置用户账户。
默认值:
(base) rx@rx-rob:~$ useradd -D
# GROUP=100
# HOME=/home
# INACTIVE=-1
# EXPIRE=
# SHELL=/bin/sh
# SKEL=/etc/skel
# CREATE_MAIL_SPOOL=no
默认情况下, useradd 命令不会创建HOME目录,但是 -m 命令行选项会使其创建HOME目录。创建新用户:
useradd -m rob
ls -al /home/rob
# .bash_logout .bashrc .profile 模板/
useradd
命令创建了新HOME目录,并将/etc/skel
目录中的文件复制了过来。
删除用户 : userdel
可以满足这个需求。默认情况下, userdel
命令会只
删除/etc/passwd
文件中的用户信息,而不会删除系统中属于该账户的任何文件。加上 -r
参数, userdel
会删除用户的HOME目录以及邮件目录。
sudo userdel -r rob
修改用户:修改已有用户账户的信息的命令有:
命令 | 作用 |
---|---|
usermod | 修改用户账户的字段,还可以指定主要组以及附加组的所属关系 |
passwd | 修改已有用户的密码 |
chpasswd | 从文件中读取登录名密码对,并更新密码 |
chage | 修改密码的过期日期 |
chfn | 修改用户账户的备注信息 |
chsh | 修改用户账户的默认登录shell |
# 用户组
用户账户在控制单个用户安全性方面很好用,在涉及共享资源的一组用户时需要使用组设置。
组信息保存在系统的/etc/group
文件中。
cat /etc/group
# 4个字段
# 组名 组密码 GID 属于该组的用户列表
# root:x:0:
# daemon:x:1:
# bin:x:2:
# sys:x:3:
# adm:x:4:syslog,lx
# tty:x:5:syslog
# disk:x:6:
# lp:x:7:
和UID
一样,GID
在分配时也采用了特定的格式。系统账户用的组通常会分配低于500
的GID
值,而用户组的GID
则会从500
开始分配。
不能通过直接修改/etc/group
文件来添加用户到一个组,要用 usermod
命令。
sudo usermod -G sudo rob
groupadd
命令可在系统上创建新组。
sudo groupadd shared
# 文件权限
ls -l
# drwxr-xr-x 6 rob rob 4096 11月 11 12:39 vscode-cpptools
# -rw-rw-r-- 1 rob rob 762 11月 10 21:58 wget-log
输出结果的第一个字段就是描述文件和目录权限的编码。
-
代表文件d
代表目录l
代表链接c
代表字符型设备b
代表块设备n
代表网络设备
之后有3组三字符的编码,每一组定义了3种访问权限:
r
代表对象是可读w
代表对象是可写x
代表对象是可执行
这3组权限分别对应对象的3个安全级别:
- 对象的所有者
- 对象同组的成员
- 系统其他用户
默认文件权限,umask
命令用来设置所创建文件和目录的默认权限。
rob@lx-rob:~$ umask
0002
修改权限,chmod
命令用来改变文件和目录的安全性设置。
chmod 760 test.txt
chmod 760 -R test
改变所属关系,使用命令chgrp
或chown
。
chown Job newfile
chgrp shared newfile
SGID位会强制某个目录下创建的新文件或目录都沿用该父目录的属组,而不是创建这些文件的用户的属组。这可以为系统的用户之间共享文件提供一个简便的途径。
sudo chmod g+s textfile