setuid 비트에 대한 과정을 완료하려고 하며 CentOS 7 VM에서 다음을 수행했습니다(Mac의 Terminal.app을 통해).
program.sh
사용자 adam과 그의 홈 폴더에 파일 생성program.sh
다음을 포함하는 기본 스크립트입니다.echo "This is a test" >> /etc/stickytestfile.txt
설정
chmod 777
뿐만 아니라chmod u+s
및program.sh
/usr/bin/sh
하지만 여전히 "권한이 거부되었습니다"라는 메시지가 나타납니다. 어떻게 진행해야 하나요?
-bash-4.2$ whoami
adam
-bash-4.2$ ls -al
total 32
drwsrwxrwx. 2 adam adam 4096 Oct 7 17:44 .
drwxr-xr-x. 6 root root 58 Oct 7 15:30 ..
-rw-------. 1 adam adam 853 Oct 7 19:26 .bash_history
-rw-r--r--. 1 adam adam 18 Nov 20 2015 .bash_logout
-rw-r--r--. 1 adam adam 193 Nov 20 2015 .bash_profile
-rw-r--r--. 1 adam adam 231 Nov 20 2015 .bashrc
-rw-rw-r--. 1 adam adam 29 Oct 7 16:07 adampersonalfile
-rw-rw-r--. 1 adam adam 27 Oct 7 16:07 adamsharedfile
-rwsrwxrwx. 1 root root 50 Oct 7 17:44 program.sh
-bash-4.2$ whereis sh
sh: /usr/bin/sh /usr/share/man/man1/sh.1.gz
-bash-4.2$ ls -al /usr/bin/sh
lrwxrwxrwx. 1 root root 4 Oct 2 16:05 /usr/bin/sh -> bash
-bash-4.2$ su
Password:
bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
[root@localhost adam]# chmod u+s /usr/bin/sh
[root@localhost adam]# ls -al /usr/bin/sh
lrwxrwxrwx. 1 root root 4 Oct 2 16:05 /usr/bin/sh -> bash
[root@localhost adam]# exit
exit
-bash-4.2$ sh program.sh
program.sh: line 1: /etc/stickytest.txt: Permission denied
답변1
호출 부분을 보세요.bash 매뉴얼 페이지, bash(1):
쉘 시작 시 유효 사용자(그룹) ID가 실제 사용자(그룹) ID와 동일하지 않은 경우-피제공된 옵션이 없습니다. ... 및유효 사용자 ID는 실제 사용자 ID로 설정됩니다.. 만약에-피통화 시 옵션이 제공되고 시작 동작은 동일하지만 유효 사용자 ID는 재설정되지 않습니다.
(강조가 추가되었습니다.)
없이 bash를 실행한다면-p
옵션을 사용하면 setuid(유효 사용자 ID가 실제 사용자 ID와 동일하지 않음)를 실행하는 경우 즉시 "권한을 포기"합니다. 즉, 실제 ID로 되돌아갑니다.
그런데, 잘못된 용어를 사용하고 계십니다. 당신이 말하는 비트는 고정 비트가 아닌 setuid 비트입니다.
추신: 제가 여러분에게 따르기를 바라는 지침은 bash의 초기 모드(권한 비트)를 설정하고 작업이 끝나면 복원하도록 지시합니다.