임의접근제어 (DAC : Discretionary Access Control)라는 용어가 있다.
단어가 좀 어려운데 요약하자면 파일에 대한 접근을 사용자/그룹으로 제한하겠다는 거다.
누가 최초로 Discretionary 단어를 '임의'라고 해석했는지 모르겠는데 다른 의미인 '자유재량'이 더 이해하기 쉽다.
즉, 소유자가 '자유재량'으로 다른 사용자/그룹에 대한 권한을 제어할 수 있다는 것이다.
사용자와 그룹의 생성
아래 두 파일로 관리된다.
- 사용자 : /etc/passwd
- 그룹 : /etc/group
아래 명령으로 사용자와 그룹을 추가할 수 있다. 당연히 한 사용자는 여러 그룹에 소속될 수 있다.
# 사용자 추가
$ useradd kkangeva
# 사용자 패스워드 지정 혹은 변경
$ passwd kkangeva
# 사용자 삭제
$ userdel kkangeva
# 사용자 그룹 조회
$ groups kkangeva
# 그룹 추가
$ groupadd my_group
# 그룹 제거
$ groupdel my_group
# 사용자를 여러 그룹에 추가
$ useradd kkangeva -G work,home,school
리소스/파일의 Permission
'ls' 명령으로 특정파일을 확인하면 아래와 같이 출력이된다. 소유 사용자, 소유 그룹, 다른 모든 사용자의 권한을 확인할 수 있다.
아래 명령을 통해서 소유 사용자, 소유 그룹을 수정할 수 있다. 파일의 소유 사용자이거나 root 권한을 이용해서 수행해야 한다.
$ chown <user> <filename>
$ chown <user>:<group> <filename>
# -R 옵션을 이용해서 재귀적으로 모든 파일/디렉토리의 소유권을 변경할 수도 있다.
$ chown -R <user> <dirname>
아래 명령을 통해서 Permission을 수정할 수 있다. 마찬가지로 적절한 권한이 있어야 아래 명령을 수행 가능하다.
$ chmod <permission> <filename>
# 소유 사용자에게 모든 권한을 부여할때
$ chmod 700 my_file
# 좋은 방식은 아니지만 귀차니즘에 자주 사용하는...
$ chmod 777 *
디바이스 파일의 경우, udev rule에 의해서 소유 사용자, 소유 그룹이 정의되기도 한다.
이 경우, 아래 파일을 접근하기 위한 프로세스는 적절한 사용자, 그룹으로 수행되어야 한다.
# Set owner and permissions for /dev/uinput
KERNEL=="uinput", MODE="0660", OWNER="input", GROUP="input"
systemd에서의 user/group
부팅시에 1번 프로세스 역할을 수행하는 systemd는 시스템 서비스들의 parent 프로세스이다.
사용자가 직접 실행하는 프로세스는 해당 사용자의 권한을 상속받게 되지만 부팅시에 실행되는 프로세스들은 명시적으로 사용자와 그룹을 지정할 수 있다.
아래 예제 서비스파일에서 User와 Group에 해당하는 것이 이에 해당한다.
참고로 SupplementaryGroups 옵션을 통해서 추가적인 그룹을 지정할 수 있다.
아래는 uinput 디바이스를 접근하기 위한 예제이다.
$ cat /etc/systemd/system/run-as-user.service
[Unit]
Description=Run service as user deepak
DefaultDependencies=no
After=network.target
[Service]
Type=simple
User=deepak
Group=admin
SupplementaryGroups=input
ExecStart=/opt/golinuxcloud/startup_script.sh
TimeoutStartSec=0
RemainAfterExit=yes
[Install]
WantedBy=default.target
참고자료
'소프트웨어 > 리눅스' 카테고리의 다른 글
리눅스 부팅시 특정 서비스 제어하기 (systemd) (0) | 2023.08.27 |
---|---|
Boost.Program_options을 통한 명령줄 파싱방법 (0) | 2023.08.27 |
리눅스 '정적/동적 라이브러리'의 대해서 (.so, .a, dlopen) (0) | 2023.08.08 |