# linux文件权限

用户权限是通过创建用户时分配的用户IDUser 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在分配时也采用了特定的格式。系统账户用的组通常会分配低于500GID值,而用户组的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

改变所属关系,使用命令chgrpchown

chown Job newfile
chgrp shared newfile

SGID位会强制某个目录下创建的新文件或目录都沿用该父目录的属组,而不是创建这些文件的用户的属组。这可以为系统的用户之间共享文件提供一个简便的途径。

sudo chmod g+s textfile
(adsbygoogle = window.adsbygoogle || []).push({});