루트가 되기 위해 sudo 사용을 비활성화하여 모든 사용자가 sudo 접두어가 붙은 권한 있는 명령을 실행하도록 하고 싶습니다. 이렇게 하면 이러한 모든 명령이 기록되고 액세스 및 수정 기록이 유지됩니다.
이를 달성할 수 있는 솔루션이 있습니까?
답변1
sudoers
예외와 함께 사용자가 실행할 수 있는 명령을 나열할 수 있습니다 .
이것sudoers
매뉴얼 페이지당신이 원하는 것을 거의 수행하는 예도 있습니다(여기에는 데비안에 대한 약간의 조정이 있습니다):
Cmnd_Alias SHELLS = /bin/sh, /bin/bash, /bin/bash, /usr/bin/zsh Cmnd_Alias SU = /bin/su jill SERVERS = /usr/bin/, !SU, !SHELLS
Host_Alias의 모든 시스템에 대해 jill은 Host_Alias 및 Cmnd_Aliases에 속하는 명령을 제외하고
SERVERS
해당 디렉터리의 모든 명령을 실행할 수 있습니다 ./usr/bin/
규칙에 구체적으로 언급되지는 않았지만 Cmnd_Alias의 명령은 모두 noexec 옵션이 설정되어 있습니다.SU
SHELLS
PAGERS
/usr/bin
또한 적용됩니다 ALL
:
someuser ALL=(ALL:ALL) ALL, !SU, !SHELLS
이것을 얻으십시오:
$ sudo -s
Sorry, user someuser is not allowed to execute '/bin/bash' as root on thishost.
$ sudo bash -c "echo please"
Sorry, user someuser is not allowed to execute '/bin/bash -c echo please' as root on thishost.
그리고 sudo -l
이러한 특정 명령을 실행할 수 없다고 말합니다.
기본적으로 무엇이든 실행할 수 있는 경우 모든 셸을 명시적으로 나열해야 합니다. 예를 들어, su
허용되는 경우 사용할 수 있도록 쉘을 실행합니다 sudo su
(일반적으로 쓸모가 없습니다). 위에서 잘못 썼기 때문에 /bin/dash
아직 사용 가능합니다.
어떤 경우에도 그러한 예외를 나열한다고 해서 실제 제한이 되는 것은 아닙니다. 사용자가 다른 이름( )으로 쉘을 복제 sudo cp -a /bin/bash /bin/cash
하거나 실행 sudo vi
하고 클릭하는 것을 막을 수 있는 방법은 없습니다 :shell
. 물론, 누출을 방지하기 위해 편집기 등을 구성할 수는 있지만 모든 구멍을 찾아 막아야 하며 여전히 누출을 막지 못할 수도 있습니다. 그럼에도 불구하고, 이런 시스템을 사용해 본 경험이 있기 때문에 이것이 좋은 생각이라고 생각하는 사람들도 분명히 있습니다.
로깅 외에도 사람들이 모든 명령을 실행하기 위해 권한 있는 셸을 열어두지 않도록 하여 사고를 줄이기 위한 것이라고 생각합니다. 그러나 sudo
명령 앞에 추가해야 한다고 해서 명령의 철자가 틀릴 가능성이 실제로 줄어들지는 않습니다. 여전히 sudo rm -rf *
잘못된 디렉토리에 있거나 실수로 그렇게 /dev/sdd
생각할 수 있습니다./dev/sdf
권한 있는 쉘을 거부하면 관리자에게 실질적인 문제가 발생합니다. 시스템에 관리자의 일반 계정으로 접근할 수 없는 디렉토리가 있는 경우, 권한 있는 쉘을 실행하여 디렉토리에 들어가고, 파일 목록을 보고, 파일 이름에 탭 완성 기능을 사용해야 합니다. 쉘이 없으면 항상 이 작업을 수행해야 하며 sudo ls path/to/dir
(단지 sudo ls
갈 수 없기 때문에 가 아니라) 작업을 수행할 때 파일 이름을 수동으로 복사하여 붙여넣어야 합니다. 이는 매우 성가신 일이지만 모든 것을 느리게 하여 최소한 단위 시간당 오류를 줄일 수 있습니다.
답변2
sudo
나쁜 습관을 버리도록 친절한 알림
따라서 내가 올바르게 이해했다면 당신은 나쁜 습관을 버리도록 친근하게 상기시켜주는 "그냥"을 원할 것입니다. 즉, 간단한 도구를 사용하여 쉽게 제거하거나 해결할 수 있습니다.
이 경우 실제 PATH 디렉토리에 있는 간단한 쉘 스크립트가 sudo
작동해야 합니다. 나는 너에게 제안한다
- 이름을 지어줘
sudo
- 디렉토리에 넣다
/usr/local/bin
- 실행 권한을 부여하세요
이는 귀하 또는 귀하의 동료가 입력할 때 sudo something
시스템이 다음을 찾게 됨을 의미합니다.
/usr/local/bin/sudo # the shellscript
앞으로
/usr/bin/sudo # the real sudo program
쉘 스크립트:
#!/bin/bash
if [ $# -eq 1 ] && ( [ "$1" == "-s" ] || [ "$1" == "-i" ] || [ "$1" == "bash" ] )
then
echo "Please do not use 'sudo $1'"
exit
else
/usr/bin/sudo "$@"
fi
제거하거나 수정하기가 더 어려운 항목이 있으면 알려주세요.. 그렇다면 드릴 말씀이 없으므로 이 답변을 삭제하겠습니다.
답변3
경고: sudo sudo su
질문입니다. sudoers 사용자가 다음 작업을 수행하는 경우
sudo sudo su
그는 루트 쉘에 접근할 수 있습니다!
따라서 /usr/bin/sudo가 Cmnd_Alias에 있어야 합니다.
Cmnd_Alias SHELLS = /bin/sh, /bin/bash, /bin/bash, /usr/bin/zsh
Cmnd_Alias SU = /bin/su,/usr/bin/sudo
아니면 스크립트에서
if [ $# -eq 1 ] && ( [ "$1" == "-s" ] || [ "$1" == "sudo" ] || [ "$1" == "-i" ] || [ "$1" == "bash" ] )
then
echo "Please do not use 'sudo $1'"
exit
else
/usr/bin/sudo "$@"
fi`