我想从非特权用户拥有的简单脚本中删除root用户拥有的文件(/var/lib/pacman/db.lck):
#!/bin/bash
rm -f /var/lib/pacman/db.lck
但是我不想使用该脚本sudo
来避免每次以非特权用户身份执行脚本时都输入密码。为了实现这一点,我将s
位设置为:
-rwsrwsrwx 1 popov users 41 04.02.2015 10:35 unlock.sh
但是运行脚本后,我得到了
rm: cannot remove ‘/var/lib/pacman/db.lck’: Permission denied
看来我误解了s
位的目的。
因此,问题是:如何设置脚本权限(和/或脚本的所有权),该权限将允许脚本在由非特权用户调用时删除root拥有的文件?
另一种选择是用一个小的C程序替换shell脚本:
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
#define FILENAME "/var/tmp/dummy"
int main() {
if(unlink(FILENAME) == -1) {
printf("unlink() of %s failed: %s\n", FILENAME, strerror(errno));
return 1;
}
return 0;
}
FILENAME
unlink_it.c
。gcc -Wall -o unlink_it unlink_it.c
/usr/local/bin
)。注意:系统上的任何用户都可以启动程序,从而删除文件,除非您使用UNIX权限限制文件的使用!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句