Linuxでプログラムを作成する場合は、プログラムの実行権限を設定する2つの方法があります。
- 呼び出し元の権限で実行できます(誰がプログラムを実行しても関係ありません)。
- 私の権限に従って実行するためにsetuidを使用できます。
Linuxで実行するようにプログラムの権限を設定する他のオプションはありますか?
答え1
個々のLinux権限を「機能」といいます。機能の完全な説明が多すぎる可能性がありますが、上記の2つのオプションの代わりに、権限のないユーザーに管理権限を提供するファイルベースの機能を設定できます。
[root@localhost]/home# setcap cap_chown+ep /bin/chown
[root@localhost]/home# sudo -iu testUser
[testUser@localhost ~]$ ll /etc/rc.local
-rwxr--r--. 1 root root 0 Jan 27 22:29 /etc/rc.local
[testUser@localhost ~]$ chown testUser /etc/rc.local
[testUser@localhost ~]$ ll /etc/rc.local
-rwxr--r--. 1 testUser root 0 Jan 27 22:29 /etc/rc.local
[testUser@localhost ~]$
上記のように、chown
I runのおかげで、このシステムで実行しているすべての人は、このタスクを実行するために必要な権限(「CAP_CHOWN」)を持っていますsetcap
。 anから+ep
anに変更し、ログイン時に特定のユーザーにのみ権限を付与すると、+ei
より多くの選択性が得られます。pam_cap.so
chown
上記のコードは、rootとして実行されず、権限のないユーザーとして実行されることに注意してください。ユーザーがこのプログラム以外のプログラムを実行するとこの権限が付与されず、実行可能ファイルが変更されるとすべてのファイルベースの機能が消去されます。
答え2
明示的な権限の割り当てがない場合、プログラムまたはスクリプトは呼び出し元として実行されます。
Setuidはファイル所有者のユーザー権限でプログラムを実行します。 Setgidはファイルグループのグループ権限でプログラムを実行します。どちらもスクリプトでは直接使用できません。
sudo
sudo設定ファイルで決定した権限で、プログラム(またはスクリプト)の実行などのユーティリティを使用できます。
私はSELinuxのようなセキュリティサブシステムがアクセスを許可するのではなく制限していると思います。
ACLを使用してランタイム権限を付与できるかどうかわかりません。調べる必要もありませんでした。