为特定用户禁用驱动器

为特定用户禁用驱动器

我刚刚为我的一个朋友创建了一个新用户帐户。但我不想让他访问我的数据驱动器(它不是安装 ubuntu 的驱动器,而只是一个数据驱动器)。

我怎样才能为他禁用该驱动器?

我正在使用 ubuntu 14.04。

编辑:

BLKIDD:

/dev/sda1: UUID="eee523f2-0eb4-4ee8-b758-f8ea89273233" TYPE="ext4" 
/dev/sda5: UUID="69b06774-64ed-4c11-b157-5a794c20c98c" TYPE="swap" 
/dev/sdb2: UUID="5E521E0E521DEC11" TYPE="ntfs" 

lsblk:

在此处输入图片描述

编辑:

basement21@basement21:~$ groups basement21
basement21 : basement21 adm cdrom sudo dip plugdev lpadmin sambashare secretdrive
basement21@basement21:~$ groups planner
planner : planner
basement21@basement21:~$ 

答案1

改变/mnt/data 所有者团体对自己这样说:

sudo chown basement21.basement21 /mnt/data

并且只允许你以及您的个人群组只读

sudo chmod 750 /mnt/data

答案2

为了达到您所期望的结果:

调用你的系统来识别 /dev/sdb 属于你:

sudo adduser secretdrive
sudo chown secretdrive:secretdrive /dev/sdb
sudo adduser [your-username] secretdrive
sudo chmod 770 /dev/sdb

解释:

  1. 为您的驱动器分配一个新的系统名称:/dev/sdb
  2. 将你的驱动器 chown-ize 为系统用户名secretdrive(或你想要的任何名称)
  3. 将您的用户名添加到所属组,secretdrive这样系统就会授予您对驱动器的访问权限
  4. 最后,你将驱动器的权限 chmod 为 770(所有者读/写 | 组读/写 | 其他人禁止读/写)

答案3

以下解决方案假设您的朋友不是专家,试图破解您的计算机以找到查看数据的方法。然而,这是一个合理的阈值,可以防止意外访问(安装)特定分区或驱动器。


一个选项,也可以用作更暂时的任何用户帐户的解决方案如下:

  1. 将以下内容添加到sudoers文件(/etc/sudoers,正在运行sudo visudo):

    <your_friends_username> ALL = NOPASSWD: /bin/umount
    

    这将使他能够卸载没有 sudo 密码的驱动器

  2. 在您的朋友的帐户中,将以下脚本复制到一个空文件中,并将其保存为某个位置nomount.py(或者更好的是,一个不太显眼的名字:))
  3. 通过以下命令测试运行(仍在您朋友的帐户中)脚本:

    python3 /path/to/nomount.py /mnt/data
    

    并尝试安装驱动器。 它应该会失败。

  4. 如果它按预期工作,请将其添加到您的朋友帐户启动应用程序:Dash>启动应用程序>添加命令:

    ppython3 /path/to/nomount.py /mnt/data
    

剧本

#!/usr/bin/env python3
import subprocess
import time
import sys
drive = sys.argv[1]
while True:
    check = subprocess.check_output("lsblk").decode("utf-8")
    if drive in check:
        subprocess.Popen(["sudo", "umount", "-l", drive])
    time.sleep(1)

脚本的作用

脚本会循环(每秒一次)检查“禁止”驱动器是否已安装。如果已安装,它将立即(强制)卸载该驱动器,命令如下umount -f <drivename>

编辑

该脚本的 Bash 版本:

#!/bin/bash
drive="$1"
while true
do
    if [ -n "$(lsblk | grep $drive)" ]; then
        sudo umount -l $drive
    fi
    sleep 1
done

设置和使用方法与python脚本类似,只是:

  • 另存为nomount.sh
  • 通过命令运行它:

    sh /path/to/nomount.sh /mnt/data
    

    (类似于 Python 版本;使用驱动器作为参数使其不可用)

编辑2

关于安全:

有了正确的技能和信息,几乎所有的解决方案都可以被超越。一个简单的例子:只要有足够的时间,除非你加密了驱动器,否则所有解决方案都会因从启动 USB 启动而失效。

在上述解决方案中,最明显的方法是打开终端窗口,运行ps -u <username>,查找要终止的进程(脚本),然后将其终止。但是,您的朋友需要技能为了做到这一点,意图做到这一点,并且知识怀疑它是通过这种方式完成的。

您可以通过在设置中添加一些简单的操作来降低该过程被识别的可能性:

  1. 给脚本一个伪装的名字unity-desk(我检查了该名称是否与现有命令冲突)没有扩大*
  2. 使其可执行,以便能够在没有前面的sh或 的情况下运行它python3

这样,您可以使用以下命令运行脚本:

unity-desk /mnt/data

在和中ps -u <username>ps -e进程都会被提及为unity-desk。实际上,这并不是您一看到就想终止的进程 (-name)。
要揭示它是脚本的事实,可以使用运行命令ps -ef,该命令会显示路径和语言。但是,这又需要更进一步。

答案4

经过长时间的搜索,我找到了问题所在。安装系统时,我在 fstab 中添加了以下行:

/dev/disk/by-uuid/5E521E0E521DEC11 /mnt/data auto nosuid,nodev,nofail,x-gvfs-show 0 0

我将其改为:

/dev/disk/by-uuid/5E521E0E521DEC11 /mnt/data auto nosuid,nodev,gid=1000,umask=007,nofail,x-gvfs-show 0 0

我的 groupid 是 1000,umask 定义我有读/写权限,并且我的组中的每个人都有。其余的人没有权限。

相关内容