다음 명령은 루트가 아닌 사용자가 실행합니다.
perl -pi -e 's/^an24:/an24:\*LK*/g' /etc/shadow
허가가 거부되었습니다.
이는 일부 권한 문제를 나타냅니다.
그러한 명령을 실행할 수 있습니까?
이 명령을 실행하는 스크립트에서 setuid 및 그룹 ID를 설정해 보았으나 성공하지 못했습니다.
운영 체제는 솔라리스 10입니다.
답변1
따라서 루트가 아닌 사용자는 섀도우 파일을 읽을 수 없으므로 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를 사용하거나 루트 사용자의 crontab을 통해 루트로 Perl 스크립트를 실행하는 것입니다.
또 다른 해결책은 다음과 같이 /etc/shadow를 소유한 그룹에 이 스크립트를 실행하는 사용자를 추가하는 것입니다.
usermod -a -G shadow yourusernamehere
답변2
사용 sudo
:
sudo perl -pi -e 's/^an24:/an24:\*LK*/g' /etc/shadow