今天老婆问了我一个问题:如何在linux 下实现某个目录普通用户能够写入文件,但是不能删除或修改(只能由root 删除或修改)。开始的两分钟里,我初步判断这是做不到的,因为linux 下能 写入(w) 就代表着同时能 修改删除,命题是矛盾的。后面我又想到 粘滞位和 facl,幸好没有放弃,最后还是想到如何做到这个效果。下面是实验过程

首先起个目录用来做实验

[root@node1 data]# pwd
/data[root@node1 data]# mkdir sample

接着我们设置好目录的属组和权限


# 修改 sample 目录属组
[root@node1 data]# chown -R root:root sample# 修改 sample 目录权限,让组和用户都没有任何权限,也就是说
# 只有 root 能
# 1. 进入该目录
# 2. 向该目录写入文件
# 3. 修改或删除该目录中的文件
# 4. 执行该目录中的文件
# 其他组和用户什么都干不了
[root@node1 data]# chmod 700 sample
[root@node1 data]#
[root@node1 data]# ll
total 0
drwx------ 2 root    root    6 Apr 20 12:14 sample

做完上面一步,普通用户是不能向进入 sample 目录,也不能修改或执行 sample 目录中的文件。如果有一个程序能够向该目录添加文件,那我们就通过粘滞位来提升一下普通用户的权限,并保证该程序对普通用户可用。程序需要自己编写,这里为了实验就直接用 mv 来替代,为了不影响系统,这里换了个名字叫 add

[root@node1 data]# cp /usr/bin/mv /usr/bin/add# 给 add 添加粘滞位,这样,其他用户使用 add 的时候就能提升为 root 权限,而 root 可以向 sample 目录写入文件
[root@node1 data]# chmod u+s /usr/bin/add
[root@node1 data]# ll /usr/bin/add
-rwsr-xr-x. 1 root root 130344 Nov  6  2016 /usr/bin/add

好了,到最后了,我们切换到普通用户,进行检验。看看对该目录的查改删是不是都可以(通过mv),看看通过 add(提升为root) 能不能向 sample 目录添加文件。

# 切到普通用户,如 kafka,创建一个文件
[kafka@node1 ~]$ touch file
[kafka@node1 ~]$ ll
total 0
-rw-rw-r-- 1 kafka kafka 0 Apr 20 12:28 file# 通过mv 添加文件到 sample 目录,失败了,因为普通用户没有权限写入
[kafka@node1 ~]$ mv file /data/sample/
mv: cannot stat ‘/data/sample/file’: Permission denied# 通过应用程序 add 添加文件到 sample 目录,执行成功了。因为执行时,权限会临时提升为 root
[kafka@node1 ~]$ add file /data/sample/# 查看和删除也都失败了
[kafka@node1 ~]$ ll /data/sample/
ls: cannot open directory /data/sample/: Permission denied
[kafka@node1 ~]$ rm -f /data/sample/file
rm: cannot remove ‘/data/sample/file’: Permission denied

Linux 下实现普通用户只能写入某个目录相关推荐

  1. linux是不是在根目录下安装的软件其它用户就可以使用,[转载]Linux下非root用户如何安装软件...

    [转载]Linux下非root用户如何安装软件 这是本人遇到的实际问题,之前用到的所有机器,无论是自己的PC还是云服务器,root权限都是妥妥的,但是现在发现实验室的服务器原来自己并没有root权限2 ...

  2. linux新建用户只能查看自己的目录,Linux创建用户只能访问某个目录

    文章目录需求:创建一个用户,让他只能访问某个目录用 setfacl 实现:用ssh+ftp的方法实现:需求:创建一个用户,只能用于ftp登陆 需求:创建一个用户,让他只能访问某个目录 useradd ...

  3. linux下查看所有用户及所有用户组

    linux下查看所有用户及所有用户组 groups 查看当前登录用户的组内成员 groups xxx查看xxx用户所在的组,以及组内成员 whoami 查看当前登录用户名 /etc/group文件包含 ...

  4. linux装软件需要root用户,Linux下非root用户安装软件的一般流程:

    1. 获取源代码,一般是wget方式,ubuntu可以使用apt-get source来获取源代码. 2. 解压源代码,一般使用tar -zxvf xxx.tar.gz即可 3. 切换到解压后的目录, ...

  5. linux 下如何添加用户、权限

    linux 下如何添加用户.权限 转载点击访问 useradd –d /usr/sam -m sam 此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/ ...

  6. linux sftp创建多用户,Linux 下创建 sftp 用户并限定目录

    Linux 下创建 sftp 用户并限定目录 1.创建 sftpUser 用户组 [root@XXX ~]# groupadd sftpUser 2.创建 sftpUser 用户并指定目录 [root ...

  7. linux下搭建vsftp锁定根目录,Linux下创建ftp用户并锁定根目录

    [root@d vsftpd]# vi /etc/vsftpd/chroot_list 加入要锁定根目录的ftp用户名(一行只能一个用户) [root@ vsftpd]# vi /etc/vsftpd ...

  8. Linux下创建FTP用户和密码(日常操作)

    具体的操作如下: linux下创建ftp用户 #创建用户并指定目录 useradd -d /data/ts2ods/hnitv hn_itv  #配置密码 passwd hnitv!@# #限定用户不 ...

  9. Linux下如何实现用户的集中管理(NIS服务器的高级配置)

    Linux下如何实现用户的集中管理 (NIS服务器的高级配置)   一.NIS服务器的属性设置   1.修改NIS系统的主机名 Linux系统可以使用hostname命令查看和临时设置Linux系统的 ...

最新文章

  1. android主流开源自动化框架(monkeyrunner,robotium,uiautomator
  2. windows下实现Git在局域网使用
  3. 文科学业水平测试题软件,学业水平测试:文科备战理科篇
  4. Python Number(数字)
  5. 成功解决win10下dos中运行tensorboard --logdir=logs和调用events.out.tfevents一闪而过的问题
  6. 项目: 实时钟表(C语言)
  7. 浅谈sass与less区别优缺点
  8. 安卓进阶系列-06数据库框架(LitePal)的使用
  9. guns java_guns——一个简便的后台管理系统
  10. 大学计算机成绩统计表怎么做,wps怎么制作成绩表 wps设计成绩统计表的步骤方法...
  11. php mysql 数据库类_PHP操作MySQL数据库的类
  12. win7下安装PADS2007
  13. 传智黑马java基础学习——day10(继承、抽象类)
  14. linux系统双网卡不能同时启动,针对RHEL中双网卡IP不能同时被访问的解决方法
  15. win10安装CA证书服务器,分享一下win10系统安装数字证书的方法
  16. C++ 野指针和悬空指针
  17. RGB与HSB之间转换
  18. 认知的高度 = 人生的高度
  19. Android 外部存储App私有目录下照片和视频显示到相册
  20. 身边策神 振江 刘盛义等等

热门文章

  1. Android四级缓存,RecyclerView 源码四级缓存原理
  2. python tcp通信如何实现多人聊天,Python实现多用户全双工聊天(一对一),python多用户,多用户全双工聊天简陋...
  3. 从全职高手开始的系统_动画全职高手第二季热血回归,腾讯视频的国漫IP全链路开发之道...
  4. 团队行为心理学读书笔记(1)
  5. 【caffe-Windows】cifar实例编译之model的使用
  6. windows系统作为客户端时,linux中本地yum源挂载时,如何同时挂载DVD1和DVD2?
  7. 201521123004《软件工程》个人阅读作业1
  8. centos 6.5 配置网络
  9. Android6.0------权限申请RxPermissions
  10. 201521123110《Java程序设计》第5周学习总结