以下命令由非 root 用户执行:
perl -pi -e 's/^an24:/an24:\*LK*/g' /etc/shadow
正在发出拒绝的许可。
这表明存在一些权限问题。
这样的命令可以执行吗?
我尝试在执行此命令的脚本上设置 setuid 和组 id,但没有成功。
操作系统是Solaris 10。
答案1
相应地,非 root 用户无法读取影子文件,因此 setuid 脚本是一个好主意。
不幸的是,Solaris 不支持脚本上的 setuid 位。您可以使用 perl 脚本来演示这一点:
珀尔:
#!/usr/bin/perl
use POSIX qw(geteuid);
print "$0 is running as ".geteuid()."\n";
unlink "testfile-created-by-$0";
open(fh,">testfile");
close(fh);
然后像这样运行脚本
$ id -u
1000
$ chmod 755 test-script.pl
$ ./test-script.pl
./test-script.pl is running as 1000
$ sudo chown root:root test-script.pl
$ sudo chmod 5755 test-script.pl
$ ./test-script.pl
./test-script.pl is running as 1000
那么该怎么办呢?一种简单的解决方案是使用 sudo 或通过 root 用户的 crontab 以 root 身份实际运行 perl 脚本。
另一个解决方案是将运行此脚本的用户添加到拥有 /etc/shadow 的组中,如下所示
usermod -a -G shadow yourusernamehere
答案2
使用sudo
:
sudo perl -pi -e 's/^an24:/an24:\*LK*/g' /etc/shadow