다양한 사용자에게 별도의 네트워크 네임스페이스를 제공하시겠습니까?

다양한 사용자에게 별도의 네트워크 네임스페이스를 제공하시겠습니까?

저는 노트북에서 Arch Linux를 실행하고 있습니다. 내가 달성하고 싶은 것:

  • 다중 사용자
  • 각 사용자가 하나의 tty에 로그인하면(다른 사용자가 다른 tty에 로그인할 수 있음 - 둘 다 내 것임), 그들은 자신의 네트워크 네임스페이스에 있습니다.
  • VPN 연결을 시작할 수 있지만 VPN 없이도 작동할 수 있습니다(그래서 vopono는 나에게 적합하지 않다고 생각합니다).

참고/제한사항:

  • 디스플레이 관리자가 없습니다. 모든 사용자가 tty에 로그인한 다음 x를 시작합니다. 하지만 더 쉽게 사용할 수 있다면 사용해도 괜찮습니다.
  • 나는 linux-hardened를 사용하므로 CONFIG_USER_NS_UNPRIVILEGED비활성화되어 있으며 sysctl을 통해서도 활성화하고 싶지 않습니다.

내가 보는 것: 나는 다음과 같은 것을 원한다고 생각합니다pam_netns또는pam_user 네트워크하지만 pam_netns는6년 전 일어난 사건, pam_usernet은 4년 동안 업데이트되지 않았습니다.

또는 vopono가 로그인 시 사용자에 대해 별도의 네트워크 네임스페이스를 설정하고 VPN에 연결하지 않는 방법이 있습니까? 사용자가 이 작업을 수동으로 수행하기 위해 로그인 시 스크립트를 실행해야 한다면 괜찮습니다.

답변1

(이 작업을 수행할 수 있는 기존 소프트웨어가 없다는 점이 조금 걱정됩니다. 아마도 여기서 잘못된 문제를 해결하려고 한다는 의미일 수 있습니다. 더 나은 질문을 다시 하겠지만 그동안은 이것이 해결 방법입니다. 나 자신을 개발했습니다.)

다음은 systemd 부분을 시작하게 해준 @Marcus Müller에게 감사드립니다. systemd 및 runit에 대한 솔루션입니다. 요약: agetty를 호출하기 전에 루트로 네트워크 네임스페이스를 생성한 다음 agetty를 호출하면 login이 호출되어 개인 사용자로 전환됩니다. 다른 사람에게 도움이 되는 경우 세부정보는 다음과 같습니다.

체계

  1. 답변을 사용이 스레드/usr/local/sbin/ip-netns.sh예를 들어 호출 방법에 따라 네임스페이스를 생성하거나 삭제하는 스크립트를 작성합니다 .

  2. ~에 따르면아치 위키 페이지, 모든 tty에 대해 이 작업을 수행하거나 tty2에 대해서만 생성합니다(예:). 다음과 같이 말해야 합니다:/etc/systemd/system/[email protected]/override.conf/etc/systemd/system/[email protected]/override.confoverride.conf

    [Service]
    ExecStartPre=/usr/local/sbin/ip-netns.sh create 2
    ExecStart=
    ExecStart=-ip netns exec ns2 /sbin/agetty -o '-p -- \\u' --noclear - $TERM
    ExecStartPost=/usr/local/sbin/ip-netns.sh delete 2
    

노트:

  1. 첫 번째 (비어 있음) 는 from ExecStart=입니다 ExecStart./usr/lib/systemd/system/[email protected]
  2. 모든 네임스페이스에 대해 이 작업을 수행하려면 2위의 예를 대신 전달할 수 있습니다. 각 호출에는 "tty1", "tty2" 등이 순서대로 포함됩니다. 하지만 전달된 이름을 .%Iip-netns.sh%I%Iip-netns.sh

달리다

이는 쉘 스크립트를 직접 편집하기 때문에 더 간단합니다 /etc/runit/sv/agetty-tty*/run. 여기에 전체 네임스페이스 처리 코드를 넣거나 /usr/local/sbin/ip-netns.sh위와 같이 스크립트를 호출할 수 있습니다.

관련 정보