chmod+s命令,设置后重启无效【求助】

sh/bash/dash/ksh/zsh等Shell脚本
回复
dlazycat
帖子: 2
注册时间: 2011-02-25 12:04

chmod+s命令,设置后重启无效【求助】

#1

帖子 dlazycat » 2011-02-25 12:17

用俩系统,经常要在Ubuntu里挂在Win7的盘。繁琐,于是编写脚本
mount命令需要root权限,于是用chmod+s来设置。设置成功后,一般用户也可以使用此脚本,不许要root权限了。
但是最后一个问题始终没有解决:重启系统后设置的+s位消失了~~极其郁闷,各种搜索也找不到答案。

不知道各位大虾们怎嘛解决类似问题,就是让非root用户不用输入密码就获取root权限的?

编写的C+shell代码如下:

代码: 全选

# include <stdio.h>
# include <stdlib.h>
# include <string.h>

int main(int argv, char ** args){

	if (!strcmp(args[1], "-m"))
	{
		if(system("sudo mount /dev/sda1 /media") == 0)
			printf("mount \nsuccess\n");
	}
	else if(!strcmp(args[1], "-u"))
	{
		if(system("sudo umount /dev/sda1") == 0)
			printf("umount \nsuccess\n");
	}

}
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
联系:

Re: chmod+s命令,设置后重启无效【求助】

#2

帖子 millenniumdark » 2011-02-26 0:29

在 /etc/fstab 里设置挂载选项就可以
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: chmod+s命令,设置后重启无效【求助】

#3

帖子 aerofox » 2011-02-27 10:58

支持楼上的做法。
即使用楼主的方法,既然设置 s 位,就没有必要再用 sudo 了。
楼主的程序放在什么分区?
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

Re: chmod+s命令,设置后重启无效【求助】

#4

帖子 cnkilior » 2011-02-27 16:53

他放在非linux分区了。
dlazycat
帖子: 2
注册时间: 2011-02-25 12:04

Re: chmod+s命令,设置后重启无效【求助】

#5

帖子 dlazycat » 2011-02-28 12:38

aerofox 写了:支持楼上的做法。
即使用楼主的方法,既然设置 s 位,就没有必要再用 sudo 了。
楼主的程序放在什么分区?
一楼的方法貌似不能动态加载~~~我是想用的时候加载~~~虽然只是图省事不想输入密码,但真的想不明白到底什么原因~~
尝试过不用sudo,也好使。与这个问题貌似没有什么关系。
放在~/目录下,确实是linux分区。

反正就是重启后s位小时,实在让我很郁闷~~~关于linux系统,是专门从硬盘划一块Ext分区给安的,没有通过Wubi~~
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: chmod+s命令,设置后重启无效【求助】

#6

帖子 tusooa » 2011-03-13 16:43

udev rules.
https://wiki.archlinux.org/index.php/Ud ... 6%96%87%29

自动加载usb设备

代码: 全选

KERNEL=="sd[a-z]", NAME="%k", SYMLINK+="usb%m", GROUP="users", OPTIONS="last_rule"
ACTION=="add", KERNEL=="sd[a-z][0-9]", SYMLINK+="usb%n", GROUP="users", NAME="%k"
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mkdir -p /mnt/usb%n"
ACTION=="add", KERNEL=="sd[a-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o rw,noauto,sync,dirsync,noexec,nodev,noatime,dmask=000,fmask=111 /dev/%k /mnt/usb%n", OPTIONS="last_rule"
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mount -t auto -o rw,noauto,sync,dirsync,noexec,nodev,noatime /dev/%k /mnt/usb%n", OPTIONS="last_rule"
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/umount -l /mnt/usb%n"
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rmdir /mnt/usb%n", OPTIONS="last_rule"
把这些udev规则放到/etc/udev/rules.d/下任何一个文件名以.rules结尾的文件中,例如/etc/udev/rules.d/sda.rules。

如果想同时建立/media到/mnt符号连接,可以使用下面的版本:

代码: 全选

KERNEL=="sd[a-z]", NAME="%k", SYMLINK+="usbhd-%k", GROUP="users", OPTIONS="last_rule" 
ACTION=="add", KERNEL=="sd[a-z][0-9]", SYMLINK+="usbhd-%k", GROUP="users", NAME="%k" 
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mkdir -p /media/usbhd-%k" 
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/ln -s /media/usbhd-%k /mnt/usbhd-%k" 
ACTION=="add", KERNEL=="sd[a-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o rw,noauto,sync,dirsync,noexec,nodev,noatime,dmask=000,fmask=111 /dev/%k /media/usbhd-%k", OPTIONS="last_rule" 
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mount -t auto -o rw,noauto,sync,dirsync,noexec,nodev,noatime /dev/%k /media/usbhd-%k", OPTIONS="last_rule" 
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rm -f /mnt/usbhd-%k" 
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/umount -l /media/usbhd-%k" 
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rmdir /media/usbhd-%k", OPTIONS="last_rule"

注意!如果你是用的其它的固定设备(例如SATA的硬盘,您可以从/etc/fstab中查看)被识别为/dev/sdX,您必须从sd[a-z] 中去掉你的那个sdX。例如,如果您的SATA硬盘被是识别为/dev/sda,您就需要把所有的“sd[a-z]”替换成“sd[b-z]”。
在规则文件的文件名前加上数字(如:010.udev.rules)是个很好的主意,这样udev在读取标准规则前,将会读取这个规则文件。 这些规则设置后不需要修改/etc/fstab文件。请查看mount命令的参数来修改权限等特性(您可以从论坛搜索查看mount命令的参数,然后根据您的需要修改它们)。

代码: 全选

] ls -ld //
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: chmod+s命令,设置后重启无效【求助】

#7

帖子 lilydjwg » 2011-03-14 12:32

编辑 /etc/sudoers 可设置为 sudo 不需要密码;
写个 daemon 开机时以 root 权限运行接受挂载请求;
把 mount 程序 +s;
。。。

PS:竟然用 system 调用。。。
回复