Linux 사용자 시스템 파일의 예약 정책을 변경하는 방법은 무엇입니까?

Linux 사용자 시스템 파일의 예약 정책을 변경하는 방법은 무엇입니까?

사용자 수준 시스템 서비스가 실행 중입니다.~/.config/systemd/user/

하지만 이 서비스의 예약 정책을 독립적인 방식으로 변경하고 싶습니다. 즉, 시작 시 설정하고 CLI에서 수동으로 아무것도 수행하고 싶지 않습니다.

하지만 아래에 이 두 가지 방향을 추가하면[Serivice]

CPUSchedulingPolicy=fifo
CPUSchedulingPriority=99

하지만 이 문제가 발생합니다.

hyegar.service: Control process exited, code=exited, status=214/SETSCHEDULER

답변1

이러한 설정을 사용하려면 CPUSchedulingPolicy루트이거나 이 기능이 있어야 합니다 CAP_SYS_NICE. 불행하게도 모든 Linux 배포판이 기능 메커니즘을 구현하는 것은 아니며 자세히 문서화하지는 않습니다.

사용자 수준 서비스는 분명히 스스로 기능을 지정할 수 없습니다. 이는 올바른 기능을 요청하는 것만으로도 모든 사용자가 루트가 될 수 있도록 효과적으로 허용하기 때문입니다.

사용자 수준 시스템 서비스의 "상위"는 이름이 자동으로 생성된 시스템 수준 서비스입니다 user@<your-UID>.service. 몇 번의 실험 끝에 실제로 /etc/systemd/system/user@<your-UID>.service.d/override.conf다음 내용이 포함된 파일을 만들 수 있다는 사실을 발견했습니다 .

[Service]
AmbientCapabilities=CAP_SYS_NICE

그런 다음 을 실행하고 systemctl daemon-reload로그오프한 다음 재부팅하거나 다른 사용자로 로그인하여 user@<your-UID>.service이전 세션이 시스템에서 더 이상 활성 상태가 아닌지 확인하십시오. 이제 자신으로 다시 로그인하면 사용자 수준 서비스 에서 모든 사용자 계정 CAP_SYS_NICE에 사용할 수 있는 기능을 갖게 됩니다.

예를 들어, 내 UID는 1000이므로 내가 만드는 파일의 이름이 지정되고 내 세션에 해당 PID가 포함되어 있으며 이를 사용하여 기능 상태를 쿼리합니다./etc/systemd/system/[email protected]/override.confgvfs-daemon.service/sbin/getpcaps

$ systemctl --user status gvfs-daemon
● gvfs-daemon.service - Virtual filesystem service
   Loaded: loaded (/usr/lib/systemd/user/gvfs-daemon.service; static; vendor preset: enabled)
   Active: active (running) since Fri 2020-05-29 11:07:28 EEST; 50s ago
 Main PID: 11467 (gvfsd)
   CGroup: /user.slice/user-1000.slice/[email protected]/gvfs-daemon.service
           └─11467 /usr/lib/gvfs/gvfsd
[...]
$ /sbin/getpcaps 11467
Capabilities for `11467': = cap_sys_nice+eip

따라서 이제 유효, 상속 가능 및 허용 기능을 사용할 수 있습니다. 이 테스트는 Debian 10에서 수행되었습니다.

사용자 수준 서비스에서 필요한 기능을 사용할 수 있게 되면 해당 옵션 systemd의 사용을 적극적으로 차단하지 않는 한 사용자 수준 서비스의 옵션을 사용할 수 있습니다.CPUSchedulingPolicyCPUSchedulingPolicy

Debian 기반 배포판에서는 AmbientCapabilities모든 사용자의 서비스가 이러한 기능을 사용할 수 있도록 루트 권한을 추가할 수 있습니다./lib/systemd/system/[email protected]

CAP_SYS_NICE그러나 이 기능을 사용하면 프로세스 변경을 허용하는 좋은 값과 일정 전략이 있다는 점을 알아야 합니다.시스템의 모든 프로세스. 이는 서비스 거부 공격이나 권한 있는 프로세스가 가능한 모든 경쟁 조건을 쉽게 이길 수 있도록 하는 방법으로 악의적으로 사용될 수 있으며, 이미 루트 권한이 아닌 액세스 권한을 가진 공격자가 루트 권한을 더 쉽게 얻을 수 있습니다. 따라서 신뢰할 수 있는 사용자에게만 이 기능을 제공하려고 합니다.

관련 정보