sudo를 사용하여 사용자 홈에 파일 쓰기

sudo를 사용하여 사용자 홈에 파일 쓰기

처음에 $HOME다음을 사용하여 로그인했습니다./home/oleg

sudo를 사용하여 명령을 실행해야 합니다. 이는 npm install 명령입니다.

sudo npm install -g suman

그러나 suman 모듈의 설치 후 스크립트(현재 구성됨)는 원래 사용자의 홈 디렉터리에 기록합니다 /home/oleg/.suman. 하지만 sudo를 사용하여 위의 npm install 명령을 실행하고 있으므로 해당 디렉터리에 액세스할 수 없습니다 /home/oleg/.suman.

/home/oleg/.suman이 디렉토리 에 루트 액세스 권한을 부여할 수 있습니까 ?

아니면 suman의 설치 후 스크립트를 단순히 루트 사용자의 홈 디렉터리에 설치해야 합니까?

내가 suman을 쓴 이후로 :) 777로 .suman 디렉토리의 내용을 쓸 수 있고 그런 식으로 루트 사용자에게 전체 액세스 권한을 부여할 수 있습니다. 루트 및 로그인한 사용자에게만 읽기/쓰기/실행 액세스를 제공하기 위해 .suman 디렉터리에 대해 정의하려는 최소 파일 권한은 무엇입니까?

답변1

TL,DR: 당신의 제안 중 좋은 것은 하나도 없습니다. 대신 루트로 실행할 때 상태 파일을 아래에 저장하십시오 /var( 와 유사 /var/lib/suman).

루트에 이미 권한이 있습니다

루트는 시스템의 모든 파일에 액세스할 수 있습니다. 따라서 디렉토리의 권한을 변경하지 마십시오. 이는 루트에는 영향을 미치지 않지만 다른 사용자는 디렉토리에서 읽고 쓸 수 있습니다. 대중의 믿음에도 불구하고, chmod 777유용한 일을 하는 것은 극히 드뭅니다.

루트에는허용하다시스템의 모든 파일에 액세스합니다. 일반적으로 이것으로 충분합니다. "일반" 파일 시스템과 다르게 사용자를 처리하는 특정 파일 시스템 유형과 관련된 몇 가지 예외가 있습니다. 두 가지 주요 사례는 다음과 같습니다.

  • NFS: 클라이언트의 루트는 일반적으로 서버의 다른 사용자에게 매핑됩니다 nobody. 이는 일반적으로 루트가 파일을 열 때 nobody.
  • FUSE(일반적으로 홈 디렉터리를 암호화하는 데 사용되는 ecryptfs 포함): 달리 구성하지 않는 한( allow_other루트에만 사용할 수 있는 옵션 사용) FUSE 파일 시스템은 이를 마운트한 사용자만 사용할 수 있습니다.

이러한 경우 루트의 명백한 권한에도 불구하고 일부 파일은 직접 액세스할 수 없습니다. 루트는 파일을 소유한 계정으로 전환하여 파일에 효과적으로 액세스할 수 있습니다. 이는 보안 제한이 아니라 구현 제한이지만 약간 불편합니다.

하지만 루트는 이 권한을 주의해서 사용해야 합니다.

일반적으로 루트로 호출되지만 다른 사용자의 홈 디렉터리에 설정된 프로그램이 있는 경우 HOME해당 사용자가 액세스할 수 없는 사용자의 홈 디렉터리에 파일을 생성하지 않도록 해야 합니다.

이미 존재하고 oleg가 소유한 경우 /home/oleg/.suman디렉터리 소유자는 항상 해당 디렉터리의 파일을 삭제할 수 있으므로 파일을 어디에 쓰는지는 중요하지 않습니다. 필요한 것은 쓰기 권한이며 소유자는 항상 자신에게 이를 부여할 수 있습니다. ). oleg는 동일한 프로그램을 실행할 때 덮어써야 하는 경우 루트 소유 파일을 대체합니다. 그러나 하위 디렉터리를 생성하지 마십시오. oleg는 하위 디렉터리가 비어 있어도 해당 하위 디렉터리에 액세스하거나 삭제할 수 없습니다.

문제는 처음으로 루트로 프로그램을 실행하면 /home/oleg/.suman.

해결책

실행하면 sudo -H환경 HOME변수가 루트의 홈 디렉터리로 설정되므로 프로그램이 해당 디렉터리에 액세스할 수 없습니다 /home/oleg.

그러나 때로는 프로그램을 루트로 실행하고(루트 권한이 필요하기 때문에) 홈 디렉터리를 자신의 디렉터리로 설정하는 것이 합리적일 때도 있습니다(구성 파일을 읽기 위해). 물론 이것은 루트로 실행되는 프로그램이 구성 파일을 읽을 수 있는 경우에만 작동합니다. 사용자 인터페이스 사용자 정의는 괜찮지만 구성 파일에는 실행 코드와 같은 것이 포함되어서는 안 됩니다(예: 전처리기를 통한 쉘 전송 없음). 이 경우 프로그램은 다음과 같아야합니다.읽다파일은 다음에서 왔으나 $HOME기록되지 않았습니다.

프로그램이 일부 상태 파일을 저장해야 하는 경우 루트로 실행될 때 해당 파일을 /var사용자의 홈 디렉터리가 아닌 시스템 디렉터리( 아래)에 저장해야 합니다.

답변2

당신이 찾고 있는 것은 sudo의 -H, --set-home 매개변수입니다.

sudo 매뉴얼 페이지에서:

-H, --set-home HOME 환경 변수를 대상 사용자의 비밀번호 데이터베이스 항목에 지정된 홈 디렉토리로 설정하도록 보안 정책을 요청합니다. 정책에 따라 이는 기본 동작일 수 있습니다.

관련 정보