Linux 权限管理

Linux 权限管理是保障系统安全的核心机制,通过控制用户对文件 / 目录的访问权限(读、写、执行),实现资源的隔离与保护。常用的权限管理命令包括 chmod(修改权限)、chown(修改所有者)、chgrp(修改所属组)、umask(设置默认权限) 等,以下是详细解析。
 一、Linux 权限基础:先理解权限表示
 在学习命令前,需先掌握 Linux 权限的两种表示方式(符号型、数字型),这是所有权限操作的前提。
 通过 ls -l 命令可查看文件 / 目录的权限信息,例如:
 bash
●rw-r–r-- 1 root root 4096 Aug 10 14:30 test.txt
 drwxr-xr-x 2 user user 4096 Aug 10 14:31 demo_dir
 第 1 个字符:文件类型(- 表示普通文件,d 表示目录,l 表示软链接)。
 第 2-10 个字符:权限位(分 3 组,每组 3 位,分别对应 所有者(owner)、所属组(group)、其他用户(others))。
1. 每组权限包含 3 个位:r(读,read)、w(写,write)、x(执行,execute),无权限则用 - 表示。符号型权限(便于理解)
 用字母表示权限主体和操作,格式:[主体][操作][权限]
 主体:
 u:所有者(user)
 g:所属组(group)
 o:其他用户(others)
 a:所有用户(all,默认值)
 操作:
●:添加权限
●:移除权限
 =:设置权限(覆盖原有权限)
 权限:r(读)、w(写)、x(执行)
2. 示例:u=rwx 表示 “给所有者设置读、写、执行权限”;g+w 表示 “给所属组添加写权限”。数字型权限(便于快速操作)
 将 r/w/x 映射为数字,通过求和表示一组权限(3 组权限对应 3 个数字,范围 0-7):
 r = 4(读权限)
 w = 2(写权限)
● x = 1(执行权限)= 0(无权限)
 常见组合示例:
 数字	对应权限	说明(所有者 + 所属组 + 其他用户)
 755	rwxr-xr-x	所有者可读写执行,其他只读执行
 644	rw-r–r--	所有者可读写,其他只读
 777	rwxrwxrwx	所有用户都有完全权限(慎用)
 600	rw-------	仅所有者可读写(保护隐私文件)
1. 二、核心权限管理命令详解chmod:修改文件 / 目录的权限
 功能:Change Mode,修改文件或目录的访问权限,是最常用的权限命令。
 注意:只有文件的 所有者 或 root 用户 能执行 chmod。
 语法 1:符号型权限(适合精细调整)
 bash
 chmod [选项] [主体][操作][权限] 文件名/目录名
 选项:
●R:递归(Recursive)修改,用于目录(修改目录及内部所有文件 / 子目录的权限)。
●v:显示修改过程(Verbose),便于排查。
 示例(符号型)
 bash1. 给 test.txt 的所有者添加执行权限
chmod u+x test.txt
2. 给 demo_dir 的所属组移除写权限,同时给其他用户添加读权限
chmod g-w,o+r demo_dir
3. 递归修改 docs 目录下所有文件,让所有用户都有读权限(a+r)
chmod -R a+r docs
4. 将 report.pdf 的权限设置为“所有者读写、所属组只读、其他无权限”(覆盖原有权限)
chmod u=rw,g=r,o=- report.pdf
 语法 2:数字型权限(适合快速设置)
 bash
 chmod [选项] 数字权限 文件名/目录名
 示例(数字型)
 bash1. 将 script.sh 设置为“所有者可执行、其他只读”(755,脚本常用权限)
chmod 755 script.sh
2. 将 private.txt 设置为“仅所有者可读写”(600,保护敏感文件如密钥)
chmod 600 private.txt
3. 递归修改 logs 目录,所有文件权限设为 644(目录需执行权限,否则无法进入,这里只改文件)
find logs -type f -exec chmod 644 {} ;
4. 给目录设置 755(目录必须有执行权限才能进入,否则即使有读权限也无法列出内容)
chmod 755 /home/user/projects
 2. chown:修改文件 / 目录的所有者和所属组
 功能:Change Owner,修改文件或目录的 所有者(Owner) 和 所属组(Group)。
 注意:只有 root 用户 能修改所有者;若要修改所属组,用户需是新组的成员(或 root)。
 语法
 bash
 chown [选项] [新所有者][:新所属组] 文件名/目录名
 格式说明:
 仅改所有者:chown 新所有者 文件名(如 chown user1 test.txt)。
 仅改所属组:chown :新所属组 文件名(如 chown :dev test.txt)。
 同时改所有者和所属组:chown 新所有者:新所属组 文件名(如 chown user1:dev test.txt)。
 选项:
●R:递归修改目录及内部内容(必选,否则仅改目录本身,内部文件不变)。
●v:显示修改过程。
 示例
 bash1. 将 file.txt 的所有者改为 user2
chown user2 file.txt
2. 将 data 目录的所属组改为 analytics(仅改目录本身)
chown :analytics data
3. 递归修改 /var/www 目录,所有者改为 apache,所属组改为 www-data(Web 服务常用配置)
chown -R apache:www-data /var/www
4. 查看修改过程:将 log.txt 的所有者改为 root,所属组改为 syslog
chown -v root:syslog log.txt
 3. chgrp:修改文件 / 目录的所属组
 功能:Change Group,仅修改文件或目录的 所属组,功能是 chown 的子集(chown :组名 等价于 chgrp 组名)。
 注意:用户需是新组的成员(或 root)才能执行。
 语法
 bash
 chgrp [选项] 新所属组 文件名/目录名
 选项:-R(递归)、-v(显示过程),与 chown 一致。
 示例
 bash1. 将 docs 目录的所属组改为 teamA
chgrp teamA docs
2. 递归修改 /data/logs 下所有文件的所属组为 loguser
chgrp -R loguser /data/logs
 4. umask:设置新建文件 / 目录的默认权限
 功能:User Mask,定义用户新建文件 / 目录时的 默认权限掩码(默认权限 = 基础权限 - umask)。
 基础权限(系统预设):
 新建普通文件:基础权限为 666(无执行权限,避免安全风险)。
1. 新建目录:基础权限为 777(目录需执行权限才能进入)。查看当前 umask
 直接执行 umask 命令,输出 4 位数字(第 1 位是特殊权限,日常用后 3 位):
 bash
2. umask  # 示例输出:0022(表示掩码为 022)计算默认权限
 默认权限 = 基础权限 - umask(按位减法,而非数值减法)。
 示例(umask=022):
 新建文件默认权限:666 - 022 = 644(rw-r–r–)。
 新建目录默认权限:777 - 022 = 755(rwxr-xr-x)。
 常见 umask 配置:
 umask	新建文件默认权限	新建目录默认权限	适用场景
 0022	644	755	普通用户(默认)
 0002	664	775	团队共享目录(组可写)
3. 0077	600	700	高安全需求(仅自己用)临时修改 umask
 直接执行 umask 掩码,仅对当前终端有效(关闭终端后失效):
 bash临时设置 umask 为 0002(团队共享场景)
umask 0002
 4. 永久修改 umask
 需修改配置文件,对所有用户或特定用户生效:
 所有用户生效:编辑 /etc/profile 或 /etc/bashrc,添加一行 umask 0022(根据需求修改掩码)。
 特定用户生效:编辑用户家目录的 /.bashrc 或 /.profile,添加 umask 0077。
 修改后需生效配置(或重新登录):
 bash让 /etc/profile 的修改生效
source /etc/profile
让当前用户的 .bashrc 修改生效
source ~/.bashrc
 5. id:查看用户 / 组信息(辅助权限管理)
 功能:查看当前用户或指定用户的 UID(用户 ID)、GID(主组 ID)及所属的所有附加组,常用于确认权限主体是否正确。
 语法
 bash
 id [用户名]  # 不指定用户名则查看当前用户
 示例
 bash查看当前用户信息
id
输出示例:uid=1000(user1) gid=1000(user1) groups=1000(user1),4(adm),24(cdrom),27(sudo)
查看 root 用户的信息
id root
输出示例:uid=0(root) gid=0(root) groups=0(root)
三、特殊权限:SUID、SGID、Sticky Bit
1. 除了基础的 r/w/x,Linux 还有 3 个特殊权限,用于满足特定场景(如让普通用户执行 root 命令、共享目录权限控制)。SUID(Set User ID,4)
 作用:用户执行某文件时,临时获得该文件 所有者 的权限(仅对可执行文件有效)。
 典型场景:/bin/passwd(普通用户修改自己密码时,需临时获得 root 权限修改 /etc/shadow)。
 查看:文件权限位的第 4 位为 s(如 -rwsr-xr-x,表示所有者权限的 x 被 s 替代)。
 设置:
 bash
 chmod u+s /bin/passwd  # 给 passwd 设置 SUID
2. chmod u-s /bin/passwd  # 移除 SUIDSGID(Set Group ID,2)
 作用:
 对文件:执行时临时获得文件 所属组 的权限。
 对目录:在该目录下新建的文件 / 目录,其 所属组自动继承目录的所属组(适合团队共享目录)。
 典型场景:团队共享目录 team_dir,所有成员在该目录新建的文件自动属于 team 组,避免权限冲突。
 查看:权限位第 7 位为 s(如 drwxr-sr-x,表示所属组权限的 x 被 s 替代)。
 设置:
 bash给共享目录 team_dir 设置 SGID(递归生效)
chmod -R g+s team_dir
3.Sticky Bit(粘滞位,1)
 作用:仅对目录有效,在该目录下,用户只能删除 自己创建的文件,无法删除他人创建的文件(即使有写权限)。
 典型场景:/tmp(所有用户可读写,但不能删除他人文件)。
 查看:权限位第 10 位为 t(如 drwxrwxrwt,表示其他用户权限的 x 被 t 替代)。
 设置:
 bash给 /tmp 设置粘滞位
chmod o+t /tmp
特殊权限的数字表示
 特殊权限的数字值可与基础权限结合(放在基础权限前,组成 4 位数字):
 SUID = 4,SGID = 2,Sticky Bit = 1
 示例:chmod 4755 file(给 file 设置 SUID + 基础权限 755);chmod 1777 dir(给 dir 设置粘滞位 + 基础权限 777)。
 四、权限管理常见问题与最佳实践
 目录必须有执行权限(x):即使目录有读权限(r),没有执行权限也无法进入或列出内容(ls 会报错 “Permission denied”)。
 避免 777 权限:777 给所有用户完全权限,可能导致恶意修改或删除,仅在临时测试时使用。
 Web 服务权限:Web 目录(如 /var/www)建议设置为 www-data:www-data(所有者 / 所属组),权限 755(目录)和 644(文件),避免写权限泄露。
 敏感文件保护:密钥文件(如 ~/.ssh/id_rsa)、配置文件(如 /etc/sudoers)需设置为 600 或 400,仅允许所有者访问。
 递归修改需谨慎:chmod -R 或 chown -R 可能意外修改系统文件权限,建议先通过 ls -l 确认目标范围,或用 find 命令精准筛选(如 find /data -name “*.log” -exec chmod 644 {} ;)。
 通过以上命令和原则,可实现 Linux 系统的精细化权限控制,有效保障文件安全和用户隔离。
一、用户管理命令
1.useradd - 创建新用户
 功能:创建新的系统用户
 语法:useradd [选项] 用户名
 常用选项:
●m:自动创建用户的家目录(/home/用户名)
●d:指定自定义家目录(如 -d /opt/user1)
●s:指定默认 shell(如 -s /bin/bash 或 -s /sbin/nologin 禁止登录)
●g:指定初始所属组(主组,必须已存在)
●G:指定附加组(多个组用逗号分隔)
●r:创建系统用户(无家目录,UID 在系统用户范围内)
 示例:
 bash创建普通用户,自动生成家目录,使用bash
useradd -m -s /bin/bash user1
创建用户并指定主组为develop,附加组为admin和test
useradd -m -g develop -G admin,test user2
创建系统用户(如服务运行账户)
useradd -r -s /sbin/nologin apache
 2. passwd - 设置用户密码
 功能:修改用户密码(只有 root 或用户本人可操作)
 语法:passwd [用户名]
 示例:
 bash给user1设置密码(root执行)
passwd user1
当前用户修改自己的密码
passwd
 选项:
●l:锁定用户(禁止登录,如 passwd -l user1)
●u:解锁用户(如 passwd -u user1)
●d:清空密码(允许无密码登录,慎用)
 3. usermod - 修改用户属性
 功能:修改已存在用户的配置(如组、家目录等)
 语法:usermod [选项] 用户名
 常用选项:
●g:修改主组(如 usermod -g newgroup user1)
●G:覆盖附加组(如 usermod -G admin,dev user1)
●aG:追加附加组(不覆盖原有,如 usermod -aG test user1)
●d:修改家目录(需配合 -m 移动原有文件)
●s:修改默认 shell(如 usermod -s /bin/zsh user1)
●L:锁定用户(同 passwd -l)
●U:解锁用户(同 passwd -u)
 示例:
 bash给user1追加附加组sales
usermod -aG sales user1
修改user1的家目录为/newhome并移动文件
usermod -d /newhome -m user1
 4. userdel - 删除用户
 功能:删除用户账户
 语法:userdel [选项] 用户名
 选项:
●r:同时删除用户的家目录和邮件目录(彻底删除)
 示例:
 bash仅删除用户账户(保留家目录)
userdel user1
彻底删除用户及家目录
userdel -r user1
1. 二、组管理命令groupadd - 创建新组
 功能:创建新的用户组
 语法:groupadd [选项] 组名
 选项:
●g:指定 GID(组 ID,如 groupadd -g 1005 dev)
●r:创建系统组(GID 在系统组范围内)
 示例:
 bash创建普通组develop
groupadd develop
创建指定GID的组
groupadd -g 2000 testgroup
 2. groupmod - 修改组属性
 功能:修改组的名称或 GID
 语法:groupmod [选项] 组名
 选项:
●n:修改组名(如 groupmod -n newname oldname)
●g:修改 GID(如 groupmod -g 3000 testgroup)
 示例:
 bash将组dev改名为develop
groupmod -n develop dev
 3. groupdel - 删除组
 功能:删除指定的用户组(组必须为空,即无用户以此为主要组)
 语法:groupdel 组名
 示例:
 bash
 groupdel testgroup
 4. gpasswd - 组权限管理
 功能:管理组的成员及权限(更精细的组操作)
 语法:gpasswd [选项] 组名
 常用选项:
●a:添加用户到组(如 gpasswd -a user1 develop)
●d:从组中删除用户(如 gpasswd -d user1 develop)
●M:设置组的成员列表(覆盖原有,如 gpasswd -M user1,user2 develop)
●A:指定组管理员(允许其管理组成员)
 示例:
 bash设置user3为develop组的管理员
gpasswd -A user3 develop
批量设置develop组的成员
gpasswd -M user1,user2,user3 develop
 三、查看用户 / 组信息的命令
 id:查看用户的 UID、GID 及所属组
 bash
 id user1  # 查看指定用户
 id        # 查看当前用户groups:查看用户所属的所有组
 bash
 groups user1  # 查看user1所属组cat /etc/passwd:查看所有用户信息(用户名、UID、GID、家目录等)
 bash
 cat /etc/passwd | grep user1  # 过滤指定用户cat /etc/group:查看所有组信息(组名、GID、组成员)
 bash
 cat /etc/group | grep develop  # 过滤指定组getent:更规范地查询用户 / 组信息(支持 NIS 等非本地用户)
 bash
 getent passwd user1  # 查看用户
 getent group develop # 查看组四、权限相关的用户 / 组操作示例
 场景 1:创建开发团队用户及共享组
 bash1. 创建开发组develop
groupadd develop
2. 创建3个开发用户,主组为develop,附加组为admin
useradd -m -s /bin/bash -g develop -G admin dev1
 useradd -m -s /bin/bash -g develop -G admin dev2
 useradd -m -s /bin/bash -g develop -G admin dev33. 给用户设置密码
passwd dev1
 passwd dev2
 passwd dev34. 创建共享目录,设置组为develop,确保组内用户可读写
mkdir /project/shared
 chown :develop /project/shared
 chmod 775 /project/shared  # 组内有读写执行权限
 chmod g+s /project/shared  # 新建文件自动继承组权限场景 2:临时禁止用户登录
 bash锁定用户(保留账户)
usermod -L tempuser
解锁用户
usermod -U tempuser
场景 3:批量将用户添加到附加组
 bash方法1:循环添加
for user in user1 user2 user3; do
 usermod -aG testgroup $user
 done方法2:使用gpasswd批量设置
gpasswd -M user1,user2,user3 testgroup
五、注意事项
 root 权限:用户 / 组管理命令通常需要 root 权限(普通用户可用sudo执行)。
 主组与附加组:一个用户只有一个主组(/etc/passwd中定义),但可以有多个附加组(/etc/group中定义)。
 组的唯一性:组名和 GID 在系统中必须唯一。
 删除限制:删除组前需确保没有用户将其作为主组(可通过grep 组名 /etc/passwd检查)。

评论 (0)

发表评论