디렉토리에 대해 sudo를 활성화하는 방법

디렉토리에 대해 sudo를 활성화하는 방법

6.3이 있고 Redhat, 및 명령을 활성화하고 싶기 sudo때문에 루트 사용자로 다음을 수행했습니다.chownkillchmod

visudo
#add the following line
aabuhasna ALL=(ALL) NOPASSWD: /usr/bin/kill, /bin/chmod, /bin/chown

사용자가 aabuhasna실행할 수 있는 추가된 줄을 기반으로 모든 디렉터리나 파일을 chmod포함 chown하지만 이를 하나의 디렉터리로 제한하고 싶습니다. 예를 들어 명령을 사용하면 chown aabuhasna:aabuhasna /test_dir/*작동하지만 사용하면 chown aabuhasna:aabuhasna /opt/*실패합니다 chmod.

답변1

sudo 명령의 와일드카드는 약간 위험합니다. 보안이 제공되는 것처럼 보이지만 실제로는 그렇지 않습니다. 에게 sudo,* 그것은 의미하지 않는다쉘에서와 같이 "이 디렉토리의 모든 파일"입니다. 오히려 "추가 옵션"을 의미하며 단독으로 사용해야 합니다. 불행하게도 sudo에서는 부분 인수를 제한할 수 없으며 안전하지 않습니다(사용자가 ../../어느 것이 의도를 무너뜨릴지 지정할 수 있기 때문입니다).

따라서 당신이 해야 할 일은 명령줄 인수의 유효성을 주의 깊게 확인하고 ../. 한 가지 더: 악의적인 사용자가 당신의 의도를 무너뜨릴 수 있는 방법이 많기 때문에 bash는 이 상황에서 좋지 않은 선택입니다. 그래서 여기에 제가 테스트했고 귀하의 요구에 맞는 Perl 예제가 있습니다(사용자 정의하고 echo빈 문자열로 바꾼 후).

#!/usr/bin/perl -w
my $user = "aabuhasna";
my $group = "aabuhasna";
my $prefix = "/test_dir";

$mode=shift @ARGV or die "Please provide a mode for the new file";
die "Invalid chmod input: $mode" unless $mode =~ /^[0-9]+$/;
$mode = oct($mode);
die "Invalid permissions in mode: $mode" if $mode != ($mode & 0777);
my $uid = (getpwnam($owner))[2] or die "Unknown user: $user";
my $gid = (getpwnam($group))[2] or die "Unknown group: $group";
foreach (@ARGV) {
   die "Invalid Directory Argument: $_" if m:\.\./:;
   next if -l $prefix."/".$_;
   push @files,$prefix."/".$_;
}
die "No files specified!" unless @files;

chmod $mode, @files;
chown $uid, @gid, @files;

/usr/local/bin/changemodeowner입력이 단순 하다고 가정할 때 이 스크립트의 sudo 항목은 다음과 같습니다 .

aabuhasna ALL=(ALL) NOPASSWD: /usr/local/bin/changemodeowner

여기서는 필요하지 않습니다 *.

관련 정보