안녕하세요?
잠금을 하는 프로그램 보면 하나의 파일을 잠금하거나 폴더 전체를 잠금하는방법이나
디스크를 잠금하는 방법도 있는데요
제가 하고 싶은 것은 노틸러스를 눌렀을때 잠금이 걸려있었으면 하는데… 어떻게 해야될까요…?
안녕하세요.
노틸러스에서 잠금 아이콘으로 나오는 경우는, 쓰기 권한이 없을 때 표시되는 경우가 일반적입니다. 따라서, 마운트 되어있는 다른 디스크를 잠그고 싶으신 경우는 /etc/fstab 파일을 열어서 마운트 옵션에 Read Only 옵션을 줘서 마운트 하시면 됩니다.
당연한 얘기지만, $HOME 이 있는 파티션이나 /var의 경우는 read only로 마운트 되면 운영체제의 정상적인 사용이 불가능해집니다.
도움이 되셨길 바랍니다.
pysdm라는 프로그램을 사용 하면
노틸러스를 눌렀을때 잠금 화면을 띄울 수 있을까요?
제가 그냥 사용 하려고 하는것이아니라 졸업작품으로 준비 해보려 하는것이라… 중요합니다
방법이 없을까요…?
다른 프로그램을 통해 실행되도록 하면 됩니다.
아니면 앱아머나 selinux와 같은 보안모듈을 사용하시면, 제한하는것은 가능합니다.
다른프로그램을 통해서 어떻게 하면될까요?
노틸러스 실행화일이 다른 프로그램으로 바꾼뒤, 그 프로그램을 실행하면 잠금여부를 확인한뒤 경우에 따라 노틸러스 화일을 실행시키도록 하면 됩니다. 기존 노틸러스 화일은 실행권한을 박탈하고, 필요에 따라 부여하게 하면 됩니다. 유저가 사용하게 하기 위해 셋유아디를 부여하시면 될것 같습니다.
아니면, 노틸러스 실행 퍼미션을 지우시면 됩니다.
selinux나 appamor에서 설정을 해도 될것 같습니다.
이 외에도 노틸러스가 뜨면 강제종료시키거나, 중간에 명령을 가로채도록 해도 됩니다.
졸업작품이라 하셨는데, 이 외에 복잡하고 세련된 방법은 떠오르질 않네요. 너무 간단해서 실망하지 않으셨으면 합니다.
pysdm는 단순한 장치 관리자인것 같네요.
안될것 같습니다.
작업의 대강 코드입니다.
예제1)
[code:28sww8iw]sudo mv /usr/bin/nautilus /usr/bin/nautilus.x
sudo chmod -x /usr/bin/nautilus.x
sudo cat > /usr/bin/nautilus
#!/bin/bash
zenity --info ‘암호를 입력해주세요.’
or=‘(설정할 암호)’
pw=$(zenity --password --text ‘암호를 입력해주세요.’)
if [ "$pw" = "$or" ]; then zenity --info ‘올바른 암호입니다.’; sudo chmod +x /usr/bin/nautilus.x; /usr/bin/nautilus.x & wait; sudo chmod -x /usr/bin/nautilus.x; fi
exit^D
chmod 755 /usr/bin/nautilus[/code:28sww8iw]
예제2)
[code:28sww8iw]
sudo cat > /etc/init.d/055-locknautilus
#!/bin/bash
or=‘(설정할 암호)’
while true; do
if ! [ -e /tmp/.nautius.unlock ]; then
pkill -18 nautilus
pw=$(zenity --password --text ‘암호를 입력해주세요.’)
if [ "$pw" = "$or" ]; then
pkill -18 nautilus
touch /tmp/.nautius.unlock
else
zenity --info ‘잘못된 암호입니다.’
pkill nautilus
fi
else
while :; do
if ! pgrep nautius; then
rm /tmp/.nautius.unlock
break
done
fi
sleep .05
done^d
chmod 755 /etc/init.d/055-locknautilus defaults
sudo update-rc.d /etc/init.d/055-locknautilus defaults[/code:28sww8iw]
리눅스는 파일 별로 권한을 설정하여 접근을 제한합니다.
chmod는 이런 파일별 접근권한을 수정시키는 명령어입니다.
'chmod [권한] [대상]'식으로 사용하며, 권한을 수정시킬려면 해당 파일을 소유자여야 합니다.
'chmod 755 /etc/init.d/055-locknautilus defaults’는 /etc/init.d/055-locknautilus와 defaults란 파일을 소유자는 읽기, 변경, 실행 모두 가능하고, 타인은 읽기와 실행만 가능하게 한다는 의미입니다.
리눅스에서 부팅시 시작되는 스크립트는 /etc/init.d에 위치합니다. 데비안 계열에서는 update-rc.d를 사용하여 실행 스크립트를 등록, 제거할수 있습니다.
'sudo update-rc.d /etc/init.d/055-locknautilus defaults’는 sudo 관리자 권한으로 update-rc.d를 실행시키고, 이 프로그램에 '/etc/init.d/055-locknautilus defaults’란 인자를 넘기란 의미이며, 다시 update-rc.d는 /etc/init.d/055-locknautilus란 대상을 부팅시 실행한다 defaults는 의미로 받아들여 실행합니다.
위 코드에서 chmod defaults는 잘못된 코드이며, 이는 스크립트에서 제외시켜야 합니다. 예제에서 바로 아래에 존재하는 update-rc.d의 인자를 확인해보면, update-rc.d에 인자로 주어져야할 내용을 chmod에 주는 인자로 잘못 타이핑하였음 추측할수 있습니다.
[quote="bluesky277":3q44a30i]다음 줄 sudo update-rc.d /etc/init.d/055-locknautilus defaults을
입력하였을때 update-rc.d: /etc/init.d/ /etc/init.d/055-locknautilus: file dose not exist 라고 나옵니다. [/quote:3q44a30i]라고 뜨는 이유는 해당 위치에 실행등록을 할 대상이 존재하지 않기 때문입니다. 또한, [quote="bluesky277":3q44a30i]마찬가지로 defaults를 빼고 입력하면
usage: update-rc.d [-n] [-f] <basename> remove
update-rc.d [-n] <basename> defaults [NN | SS KK]
update-rc.d [-n] <basename> start|stop NN runlvl [runlvl] […].
update-rc.d [-n] <basename> disable|enable [S|2|3|4|5]
-n: not really
-f: force
The disable|enable API is not stable and might change in the future.[/quote:3q44a30i]라는 결과가 뜨는 이유는 프로그램 수행을 위해서 필요한 인자를 충분하게 주지 않았기 때문입니다. 위 defaults는 데몬을 등록한다는 의미이며, 이것을 빼어 위와 같이 대상만을 지정했기 떄문에 다음 작업을 수행하지 못한 것입니다.
이를 해결하기 위해서는 데몬으로 등록할 프로그램 또는 스크립트를 해당 위치에 실제로 위치시키셔야 합니다. 예제2가 정상적으로 동작하지 않은 이유는 sudo cat란 코드가 잘못구혔되었기 떄문입니다. 위 코드는 sudo란 프로그램에 <<EOF이하의 내용을 재지향 할뿐, 목적한 cat이란 프로그램에 표준입력으로 재지향하지 않습니다. 이를 해결하려면, 관리자 권한으로 cat을 실행시켜 표준입력으로 재지향시켜야 합니다. 예를 들어, [code:3q44a30i]su; cat <<<EOF[/code:3q44a30i]라는 식으로 하셔야 할것입니다.
[quote="bluesky277":3q44a30i]아, 그리고 혹시 이런 zenity 함수를 쓰는 GUI 구현방법 말고
예전에 말씀하신 다른 프로그램을 실행하면 잠금여부를 확인하고 경우에 따라 노틸러스 화일을 실행시키게 하려면 어떻게 해야할까요.? [/quote:3q44a30i]
다른 프로그램을 통해 타겟을 실행 가능을 제어하려면, 두번쨰 예제에 ~.lock이란 파일을 어딘가에 생성시키게 한뒤, 다른 프로그램을 실행시키면, 이 파일이 존재하는가를 확인하여 잠금여부를 확인하고 실행을 결정하게 할수 있습니다. 아니면, 프로세서에서 통신을 하거나… 기타 등등…
질문자가 요구하는 사항을 질문자 스스로 충족하는 비교적 좋은 방법은 타인에게 완전한 코드를 작성해줄것을 의뢰하는 것이라… 사료됩니다.