完全可以实现,核心通过Linux系统原生的用户权限体系、访问控制列表(ACL)、受限Shell、Chroot监狱四层机制组合落地,全程无需额外付费工具,且完全兼容宝塔面板环境。
先明确一个Linux权限的核心原理,这是实现「不能删除文件」的关键依据:
在Linux中,删除文件的权限不取决于文件本身,而是取决于文件所在目录的写权限。只要目录没有写权限,用户就无法删除、新建里面的文件,哪怕文件本身拥有写权限。
根据管控严格程度,从轻量到高强度,有三套可直接落地的方案:
方案一:基础权限管控(最轻量,适合内部信任员工)
适用场景
员工需要正常使用Linux命令操作项目(查看日志、编辑代码、重启进程),只需限制访问范围、禁止删除核心文件,彼此信任度较高。
核心能力
- 一人一个独立SSH账号,所有操作可追溯
- 仅能访问授权的项目目录,无法读取其他站点、系统敏感文件
- 可精确控制「完全只读」或「可修改但不可删除」
配置步骤
- 创建独立SSH用户
# 创建用户 devuser,指定标准登录Shell
useradd -s /bin/bash devuser
# 设置登录密码(生产环境强烈建议改用密钥登录)
passwd devuser
- 配置目录权限,实现「可修改但不可删除」
以宝塔默认的网站目录 /www/wwwroot/你的项目名 为例,不破坏网站本身的运行权限:
# 递归给所有文件追加读写权限
setfacl -R -m u:devuser:rw- /www/wwwroot/你的项目名
# 给所有目录仅追加读+执行权限(无写权限=禁止删除/新建文件)
find /www/wwwroot/你的项目名 -type d -exec setfacl -m u:devuser:r-x {} \;
- 效果:员工可以编辑修改任意文件内容,但无法删除文件、无法新建文件/文件夹。
- 如果需要完全只读,统一给
r-x权限即可:
setfacl -R -m u:devuser:r-x /www/wwwroot/你的项目名
- 禁止访问其他敏感目录
通过ACL拒绝用户访问其他站点和系统核心目录:
# 禁止访问其他网站项目
setfacl -R -m u:devuser:--- /www/wwwroot/其他项目
# 禁止访问宝塔系统目录(加固防护)
setfacl -R -m u:devuser:--- /root /www/server
优缺点
- 优点:配置简单,不影响系统和宝塔运行,员工操作体验无差异
- 缺点:用户仍可浏览系统公开目录,无法完全锁死操作环境
方案二:受限Shell + 命令白名单(中等强度,禁用高危命令)
适用场景
员工只需查看日志、编辑指定文件,不需要执行系统级命令,从操作层面彻底禁止rm、su、sudo等高危指令。
核心能力
在方案一的文件权限基础上,进一步限制用户可执行的命令:
- 禁止使用
cd切换目录、禁止使用rm删除、禁止su/sudo提权 - 仅允许执行你放行的命令(如
ls、cat、vi、tail等)
配置步骤
- 改用受限Bash(rbash)作为登录Shell
# 修改用户的默认Shell为受限bash
usermod -s /bin/rbash devuser
rbash默认会禁止四类操作:cd切换目录、修改PATH环境变量、重定向输出、执行带绝对路径的命令。
- 配置命令白名单
创建专用命令目录,只把允许的命令软链接进去,然后锁定用户的PATH环境变量:
# 创建白名单命令目录
mkdir /home/devuser/bin
# 软链接允许执行的命令,按需增减
ln -s /bin/ls /home/devuser/bin/
ln -s /bin/cat /home/devuser/bin/
ln -s /usr/bin/vim /home/devuser/bin/
ln -s /usr/bin/tail /home/devuser/bin/
# 写入环境变量配置,锁定PATH
echo "export PATH=/home/devuser/bin" >> /home/devuser/.bashrc
# 锁定配置文件,防止用户自行修改
chattr +i /home/devuser/.bashrc
chown root:root /home/devuser/.bashrc
注意事项
- rbash并非绝对安全,有经验的技术人员存在绕过可能,仅适合内部低权限人员
- 若需要更严格的限制,可搭配
rssh工具,仅允许SFTP文件传输,完全禁止Shell交互
方案三:Chroot监狱(最高安全级别,完全目录隔离)
适用场景
严格隔离需求,比如外包人员、多项目隔离、低权限访客,希望用户登录后完全看不到服务器的系统文件、其他站点、配置,只能在指定项目目录内活动。
核心能力
用户SSH登录后,根目录/会被锁定在你指定的文件夹内,相当于一个独立沙箱:
- 完全看不到
/root、/etc、/www等系统目录 - 无法跳出指定目录,也无法访问其他项目
- 可搭配权限控制,实现只读、可写不可删等效果
推荐场景:仅需SFTP文件传输(最简单,零坑点)
如果员工只需要上传下载文件,不需要Shell命令行,这是最稳妥、官方原生支持的方案,配置成功率最高。
- 创建用户和Chroot根目录
# 创建用户,禁止Shell登录
useradd -s /sbin/nologin devuser
passwd devuser
# 创建Chroot根目录(硬性要求:此目录必须属主为root,权限必须是755,否则SSH会拒绝连接)
mkdir -p /chroot/project1
chown root:root /chroot/project1
chmod 755 /chroot/project1
# 在里面创建可写的项目工作目录,交给用户操作
mkdir -p /chroot/project1/wwwroot
chown devuser:devuser /chroot/project1/wwwroot
chmod 755 /chroot/project1/wwwroot
- 配置SSH服务
编辑 /etc/ssh/sshd_config,在文件末尾添加匹配规则:
Match User devuser
ChrootDirectory /chroot/project1
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
- 重启SSH服务生效
systemctl restart sshd
- 效果:用户只能通过SFTP登录,根目录就是
/chroot/project1,只能在wwwroot目录里读写文件,完全看不到系统其他任何内容。
如果需要支持交互式Shell(可执行命令),需要手动构建最小化Chroot环境,把bash、ls、vim等命令及其依赖的系统库都复制到沙箱内,配置和维护成本较高,适合有专职运维的场景。
宝塔环境的兼容注意事项
- 禁止修改宝塔核心目录
绝对不要修改 /www/server、/www/server/panel 等宝塔系统目录的权限和所有者,否则会导致面板功能异常。
- 网站目录权限兜底
项目目录建议保持 www:www 的所有者不变,通过ACL给员工用户追加权限,不要直接用chown改所有者,避免网站出现权限不足、无法上传写入的问题。
- 配合宝塔SSH安全加固
在宝塔面板「安全」页面:
- 开启SSH密钥登录,禁用密码登录
- 修改默认22端口为自定义端口
- 禁止root用户远程登录
所有子账号统一使用密钥认证,大幅降低暴力破解风险。
- 操作留痕审计
可通过script工具记录用户的所有终端操作,或开启系统审计日志,出现问题可完整追溯。
更安全的替代方案(非必须SSH时优先选择)
如果员工只是需要编辑代码、查看文件,不是必须用SSH执行命令,优先选攻击面更小的方案:
- 纯SFTP权限:只用方案三的SFTP Chroot,只能传输文件,不能执行任何命令。
- Git部署流程:员工将代码提交到Git仓库,服务器通过Webhook自动拉取更新,完全不用给员工服务器登录权限,是团队开发的最佳实践。
- 宝塔子账号:通过宝塔面板子账号分配网站文件管理权限,员工在网页端操作,无需开放SSH端口。
选型建议
- 内部开发、信任度高:选方案一(基础权限+ACL),灵活高效
- 仅需查看/编辑文件、禁止高危操作:选方案二(受限Shell)
- 外包/多项目隔离/安全要求高:选方案三SFTP Chroot,最稳妥
- 能不用SSH就不用:优先走Git部署 + 宝塔面板子账号,攻击面最小