UNIX - mount:只有 root 可以这样做

Tra*_*ty3 16 unix root mount sudo fstab

我需要允许非 root 用户挂载/卸载设备。说到 UNIX,我完全是个菜鸟,所以请帮我把它弄糊涂。

我一直在寻找interwebz的所有答案,似乎每个人都给出了相同的答案,即修改/etc/fstab以将该设备包含在该user选项中(或者users,两者都尝试过)。我这样做了,它仍然说mount: only root can do that

这是我的 fstab 的内容:

# /etc/fstab:静态文件系统信息。
#
# 使用 'vol_id --uuid' 打印一个通用唯一标识符
# 设备; 这可以与 UUID= 一起使用,作为一种更强大的设备命名方式
# 即使添加和删除磁盘也能正常工作。请参见 fstab(5)。
#
#                
proc /proc proc 默认值 0 0
# / 在安装过程中位于 /dev/mapper/minicc-root
UUID=1a69f02a-a049-4411-8c57-ff4ebd8bb933 / ext3 relatime,errors=remount-ro 0 1
# /boot 在安装过程中位于 /dev/sda5
UUID=038498fe-1267-44c4-8788-e1354d71faf5 /boot ext2 relatime 0 2
# 安装期间交换位于 /dev/mapper/minicc-swap_1
UUID=0bb583aa-84a8-43ef-98c4-c6cb25d20715 无交换 sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 用户,noauto,exec,utf8 0 0
/dev/scd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0
/dev/sdb1 /mnt/sdcard auto,user,rw,exec 0 0

我的拇指驱动器分区显示为/dev/sdb1. 我很确定我fstab的设置没问题,但是其他帖子上的每个人似乎都没有提到mount一旦此条目位于 fstab 文件中,他们实际上是如何调用命令的。我想这可能是我的问题所在。我用来挂载驱动器的命令是:

$ mount /dev/sdb1 /mnt/sdcard
Run Code Online (Sandbox Code Playgroud)

/bin/mount归 root 所有,在 root 组中,拥有 4755 权限。
/bin/umount归 root 所有,在 root 组中,拥有 4755 权限。
/mnt/sdcard归我所有,属于我的一个组,拥有 0755 权限。

如果我使用sudo,我的 mount 命令工作正常,但我需要能够做到这一点sudo(需要能够从 PHP 脚本使用shell_exec)。有什么建议?

Kev*_*nko 17

普通用户挂载卷时,只需要提供挂载点名称即可,即:

mount /mnt/sdcard
Run Code Online (Sandbox Code Playgroud)

/etc/fstab文件提供了将使用的设备。

  • 或者你可以挂载设备,`fstab` 将提供挂载点。 (2认同)

Den*_*son 7

尝试将所有权更改/dev/sdb1为 root:

chown root:root /dev/sdb1
Run Code Online (Sandbox Code Playgroud)

和你的fstab线路

/dev/sdb1   /mnt/sdcard auto    rw,user,noauto,exec,utf8   0   0
Run Code Online (Sandbox Code Playgroud)

并且这样做mount

mount /dev/sdb1
Run Code Online (Sandbox Code Playgroud)