免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 13909 | 回复: 9
打印 上一主题 下一主题

急救!!cron 定制任务报错::sudo: sorry, you must have a tty to run sudo [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-19 11:00 |只看该作者 |倒序浏览
32可用积分
32分是我所有的财产了..

[Abel@localhost ~]$ crontab -l
*/1 * * * * sudo /usr/sbin/lvscan 2>>/home/Abel/test
[Abel@localhost ~]$ cat ~/test
sudo: sorry, you must have a tty to run sudo
sudo: sorry, you must have a tty to run sudo
提示sudo要一个tty才可以运行.

解决方法!!!!
     1. 写个脚本..把上述任务放进去.并在将本中创建tty..............................ok....怎么创建???麻烦高手..透露下..
     2. 用suid or sgid代替..sudo..但这样不安全.赋予权限太大..
e.g
A...查看lvm在/usr/sbin下的符号链接..
[Abel@localhost testdir]$ symlinks -v /usr/sbin/ | grep lvm
relative: /usr/sbin/vgck -> lvm
relative: /usr/sbin/vgchange -> lvm
relative: /usr/sbin/vgconvert -> lvm
relative: /usr/sbin/lvmdiskscan -> lvm
relative: /usr/sbin/lvresize -> lvm
relative: /usr/sbin/lvs -> lvm
relative: /usr/sbin/lvconvert -> lvm
relative: /usr/sbin/pvs -> lvm
relative: /usr/sbin/pvdisplay -> lvm
relative: /usr/sbin/vgmerge -> lvm
relative: /usr/sbin/lvremove -> lvm
relative: /usr/sbin/lvmchange -> lvm
relative: /usr/sbin/pvremove -> lvm
relative: /usr/sbin/vgs -> lvm
relative: /usr/sbin/vgextend -> lvm
relative: /usr/sbin/lvmsar -> lvm
relative: /usr/sbin/lvmsadc -> lvm
relative: /usr/sbin/vgremove -> lvm
relative: /usr/sbin/vgcfgrestore -> lvm
relative: /usr/sbin/vgimport -> lvm
relative: /usr/sbin/vgreduce -> lvm
relative: /usr/sbin/lvchange -> lvm
relative: /usr/sbin/vgmknodes -> lvm
relative: /usr/sbin/vgcreate -> lvm
relative: /usr/sbin/pvchange -> lvm
relative: /usr/sbin/pvcreate -> lvm
relative: /usr/sbin/lvscan -> lvm
relative: /usr/sbin/lvreduce -> lvm
relative: /usr/sbin/lvcreate -> lvm
relative: /usr/sbin/pvmove -> lvm
relative: /usr/sbin/vgexport -> lvm
relative: /usr/sbin/vgsplit -> lvm
relative: /usr/sbin/lvextend -> lvm
relative: /usr/sbin/vgrename -> lvm
relative: /usr/sbin/pvscan -> lvm
relative: /usr/sbin/vgdisplay -> lvm
relative: /usr/sbin/lvrename -> lvm
relative: /usr/sbin/lvdisplay -> lvm
relative: /usr/sbin/vgscan -> lvm
relative: /usr/sbin/vgcfgbackup -> lvm
relative: /usr/sbin/pvresize -> lvm

B...如果我对lvscan赋予suid..因为lvscan是lvm的符号链接,所以s位赋给了lvm
[Abel@localhost testdir]$ sudo chmod u+s /usr/sbin/lvscan
Password:
[Abel@localhost testdir]$ ll /usr/sbin/lvm
-r-sr-xr-x 1 root root 589952 03-20 05:54 /usr/sbin/lvm
C....但这样....所有用户都拥有lvm.......的所有权限...所以不行..
   3...还有其他的方法吗.......................


Thanks

[ 本帖最后由 newsecond 于 2007-6-19 13:25 编辑 ]

最佳答案

查看完整内容

没错,当启用时,会需要一个终端。但是去掉该选项(requiretty),在执行sudo命令时,就不需要终端,这完全可以满足你的需求。如果你非要终端,那就不明白你的目的了。

论坛徽章:
0
2 [报告]
发表于 2007-06-19 11:00 |只看该作者
原帖由 newsecond 于 2007-6-19 22:58 发表于 5楼  
这是我/etc/sudoers中的配置
Cmnd_Alias BACK_LV=/usr/sbin/lvscan,/usr/sbin/lvremove,/usr/sbin/lvcreate
Abel  localhost=ABEL,NOPASSWD: BACK_LV


没错,当启用
  1. Defaults    requiretty
复制代码

时,会需要一个终端。但是去掉该选项(requiretty),在执行sudo命令时,就不需要终端,这完全可以满足你的需求。如果你非要终端,那就不明白你的目的了。

论坛徽章:
0
3 [报告]
发表于 2007-06-19 15:19 |只看该作者
用sudo是最好的办法,针对你的问题,在/etc/sudoers文件中做如下修改:
(1)注释掉:Defaults    requiretty所在的行。即:
  1. #Defaults    requiretty
复制代码
(2)你的允许执行lvscan命令的内容类似下面(即加上NOPASSWD,在使用sudo执行该命令时可以不用密码):
  1. bearzhang       ALL=NOPASSWD:/usr/sbin/lvscan,/sbin/sudo
复制代码
如果只允许在某台主机上使用该命令则将ALL换成允许的主机即可,例如:
  1. bearzhang       www.koorka.com=NOPASSWD:/usr/sbin/lvscan,/sbin/sudo
复制代码

[ 本帖最后由 free_man_008 于 2007-6-19 15:21 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-06-19 19:01 |只看该作者
楼上的应该可以。

论坛徽章:
0
5 [报告]
发表于 2007-06-19 22:49 |只看该作者
先谢谢free_man_008 ......谢谢你的回答...
是我没讲清楚..不好意思.


我现在是想通过cron 执行我一个脚本或者命令,为了安全考虑.我使用了sudo...........
         但sudo 在cron执行时候..提示需要一个tty...................怎么在脚本中创建一个tty????

  或者使用其他方法代替...

[ 本帖最后由 newsecond 于 2007-6-19 22:53 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2007-06-19 22:58 |只看该作者
这是我/etc/sudoers中的配置
Cmnd_Alias BACK_LV=/usr/sbin/lvscan,/usr/sbin/lvremove,/usr/sbin/lvcreate
Abel  localhost=ABEL,NOPASSWD: BACK_LV

论坛徽章:
0
7 [报告]
发表于 2007-06-20 09:43 |只看该作者
谢谢 free_man_008 了........在请教下..怎么在脚本中创建个tty.????????

论坛徽章:
0
8 [报告]
发表于 2007-06-20 10:05 |只看该作者
在问下.....
前提::::::::关闭#Defaults    requiretty
把错误,和标准输出一起输入到一个文件
运行时...sudo /usr/sbin/lvscan 2>>/home/Abel/test 并不会把错误和标准输出输入到该文件当中.
只能sudo /usr/sbin/lvscan >> /home/Abel/test.....为什么......       错误和标准输出 不能一起输入到一个文件当中.....
麻烦 free_man_008 。。。
我也去查查..

论坛徽章:
0
9 [报告]
发表于 2007-06-20 10:25 |只看该作者
原帖由 newsecond 于 2007-6-20 10:05 发表于 8楼  
在问下.....
前提::::::::关闭#Defaults    requiretty
把错误,和标准输出一起输入到一个文件
运行时...sudo /usr/sbin/lvscan 2>>/home/Abel/test 并不会把错误和标准输出输入到该文件当中.
只能su ...


呵呵,共同进步。

如果要使用tty,必然需要一个终端窗口。
而服务进程都是在后台执行的,所以没有必要让输出内容输出到窗口,如果需要查看或保存后台进程输出的内容,可以使用重定向到一个文件中。也就是你所使用的方法。

需要错误输出和标准输出都重定向,应该这样:


  1. */1     *       *       *       *       sudo /usr/sbin/lvscan >> /home/Abel/test 2>&1
复制代码

论坛徽章:
0
10 [报告]
发表于 2007-06-20 17:01 |只看该作者
thanks  free_man_008
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP