基础文件权限设置
-
查看当前权限
终端执行:ls -l 程序名 # 示例:ls -l myapp
输出示例:
-rwxr-xr-- 1 user group 16384 Jan 1 12:00 myapp
rwxr-xr--
表示:所有者可读/写/执行,组用户可读/执行,其他用户仅可读。 -
添加执行权限
chmod +x 程序名 # 所有用户添加执行权 chmod u+x 程序名 # 仅所有者添加执行权
-
精确权限控制(八进制模式)
chmod 755 程序名 # 所有者:rwx (7),组:r-x (5),其他:r-x (5) chmod 700 程序名 # 仅所有者有全部权限
高级权限:setuid/setgid
当普通用户需要临时获得root权限执行特定操作时(如修改系统配置):
-
启用setuid(以所有者身份运行)
sudo chown root 程序名 # 将所有者改为root sudo chmod 4755 程序名 # 4xxx中的4表示setuid
- 权限显示为
-rwsr-xr-x
- 权限显示为
-
启用setgid(以所属组身份运行)
sudo chgrp admin 程序名 # 将所属组改为特权组 sudo chmod 2755 程序名 # 2xxx中的2表示setgid
- 权限显示为
-rwxr-sr-x
- 权限显示为
安全实践与风险控制
-
最小权限原则
- 避免滥用
chmod 777
(完全开放权限) - 优先使用
755
或750
- 避免滥用
-
setuid安全警告
- 仅限必要场景使用(如
passwd
命令) - 代码必须严格校验输入,防止提权漏洞
- 示例风险:若程序有缓冲区溢出漏洞,攻击者可利用setuid获取root权限
- 仅限必要场景使用(如
-
替代方案
- 通过
sudo
授权特定用户执行(更安全):# 编辑sudoers文件 sudo visudo # 添加行:username ALL=(root) /path/to/program
- 通过
操作验证
- 检查权限:
ls -l 程序名
- 测试执行:
./程序名 # 普通用户执行 sudo ./程序名 # 需要root时
应用场景示例
- 场景1:普通用户运行需要访问硬件设备的程序
sudo chown root myapp && sudo chmod 4755 myapp
- 场景2:团队共享程序(组协作)
sudo chgrp team myapp && chmod 2770 myapp
引用说明:
- 权限模型依据 POSIX标准(IEEE Std 1003.1)
chmod
、chown
命令参考 GNU Coreutils 手册- setuid安全规范参见 Linux man-pages (man 7 credentials)
- 最佳实践参考 CIS Linux安全基准指南
重要提醒:
修改系统关键程序权限可能导致安全风险,生产环境操作前务必备份并测试。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7618.html