.bashrc
저는 환경을 자동 으로 강제 로드하기 위해 코드를 첨부하는 일부 설치 프로그램의 바람직하지 않은 동작을 제거하는 방법을 찾고 있습니다 . 이 문제는 주로 Conda에서 몇 번 발생했으며 어떤 경우에는 사용자의 계정이 손상되어 더 이상 로그인할 수 없게 되었습니다.
다음과 같이 .bashrc 끝에 닫히지 않은 문서를 추가해 보았습니다.
# .bashrc
#...
: <<'__END__'
작동하지만 구문 분석 오류가 발생하고 성가신 경고가 발생합니다.
.bashrc를 읽기 전용으로 만들지 않고 이를 수행하는 깔끔한 방법은 무엇입니까?
답변1
.bashrc
네가 끝내면
return 0
헤비히터뒤에 추가된 줄은 모두 무시하세요., .bashrc
소스 스크립트처럼 처리되기 때문입니다.
return
.
( ) 내장 함수를 사용하여source
실행된 스크립트의 실행을 종료하는 데에도 사용할 수 있습니다 .N또는 스크립트 내에서 실행된 마지막 명령의 종료 상태를 스크립트의 종료 상태로 사용합니다.
( exit 0
쉘이 종료되는데 이는 원하는 것이 아닙니다.)
답변2
Stephen의 팁은 효과가 있지만 여기서 근본적인 문제는 .bashrc
. 의도적으로 공급망 손상 또는 내부자 위협으로 인한 노골적인 악성 코드에 콜백 스파이웨어를 보냈습니다.
올바른 해결책은 어떤 권한으로도 "설치 프로그램"을 실행하지 않는 것입니다. 대신 일회용 컨테이너 또는 사용자 계정에서 실행한 다음 "스테이징" 환경에서 필요한 파일만 사용하려는 환경으로 복사할 수 있습니다. 저는 제가 작성한 도구를 사용하여 다음과 같은 작업을 수행합니다.우샌드는 새 사용자를 생성하고 네임스페이스를 마운트하는 데 사용되며 unshare
, 네트워크 액세스를 차단하고 현재 디렉터리 외부의 파일과 그 아래의 모든 항목에 대한 쓰기 액세스를 차단합니다. 아직 그다지 유연하지는 않지만 동일한 개념 중 상당수를 적용하여 특정 작업 흐름에 적합한 작업을 수행할 수 있습니다.
답변3
를 사용하면 return
추가 콘텐츠가 실행되는 것을 방지할 수 있지만 시간이 지남에 따라 파일이 모든 쓰레기로 가득 차는 것을 방지할 수는 없습니다. 또한 실수로 아래에 뭔가를 추가 return
하고 변경 사항이 적용되지 않는 이유를 파악해야 하는 문제도 발생합니다 .
이전에 내가 한 일은 끝에 줄을 추가하는 것이었습니다 # END_ACTUAL_CONTENT
. 예를 들어, 해당 태그를 찾아 그 뒤의 모든 것을 제거하고 주기적으로 실행되도록 스크립트를 설정하는 스크립트를 만들었습니다.
다음과 같은 기능을 사용하면 귀찮은 설치 프로그램을 제거할 수도 있습니다.
function bashrc_save() { cp -f ~/.bashrc ~/.bashrc.backup }
function bashrc_restore() { mv -f ~/.bashrc.backup ~/.bashrc }
프로그램을 설치하면 bashrc_save; ./install.sh; bashrc_restore
파일에 대한 모든 변경 사항이 .bashrc
자동으로 롤백됩니다.
나는 현재 한 단계 더 나아갔습니다. 내 .bashrc
파일(및 기타 여러 구성 파일)을 별도의 디렉터리에 저장하고 ~/.configfiles
이러한 파일이 일반적으로 이동하는 위치에 대한 기호 링크를 만듭니다. 이 폴더의 내용은 git 저장소에 있습니다. 시스템 간 동기화를 쉽게 하기 위해 이 작업을 수행했지만 git diff
설치 프로그램에서 변경한 모든 내용을 확인하고 이를 사용하여 git restore
일괄적으로 되돌릴 수 있다는 추가 이점도 있습니다 .