rootユーザーに対するシステム権限の問題

rootユーザーに対するシステム権限の問題

rpmファイルまたはソースコードを使用してFedoraでhylafax +を設定しようとしています。 hylafax+はsystemdに用意されていないため、ubuntuとOpensuseでうまく機能する次のファイル/etc/systemd/system/hylafax-faxgetty-ttyACM0.serviceを作成しました。

[Unit]
Description=HylaFAX faxgetty for ttyACM0, ...

[Service]
User=root
Group=root
Restart=always
RestartSec=30
ExecStart=/usr/sbin/faxgetty ttyACM0

[Install]
WantedBy=multi-user.target

しかし、私にエラーが発生しました」権限(uid)を設定できません。"Fedoraで。コードを実行すると:

/usr/sbin/faxgetty -D ttyACM0

rootとして手動で実行するとうまくいくようです(プロセスはまだ存在します)。

hylafax +のソースコードでエラーメッセージが生成された単一の場所を見つけて、少し修正して、次のように詳細情報を提供しました。

faxApp::setupPermissions(void)
{
    if (getuid() != 0)
        faxApp::fatal("The fax server must run with real uid root.\n");
    uid_t euid = geteuid();
    const passwd* pwd = getpwnam(FAX_USER);
    if (!pwd)
        faxApp::fatal("No fax user \"%s\" defined on your system!\n"
            "This software is not installed properly!", FAX_USER);
    if (euid == 0) {
        if (initgroups(pwd->pw_name, pwd->pw_gid) != 0)
            faxApp::fatal("Can not setup permissions (supplementary groups)");
        if (setegid(pwd->pw_gid) < 0)
            faxApp::fatal("Can not setup permissions (gid)");
        if (seteuid(pwd->pw_uid) < 0) {
            char buf[50];
            sprintf(buf,"Perm.for %s %d euid: %d",FAX_USER, pwd->pw_uid, euid);
//          faxApp::fatal("Can not setup permissions (uid)");
            faxApp::fatal(buf);
        }

今それは私に次のものを与えます:

FaxGetty[6359]: Perm.for uucp 10 euid: 0

私のパスワードファイルに対応するもの:/ etc / passwd:

uucp:x:10:10:Facsimile Agent:/var/spool/hylafax:/bin/bash

/etc/グループ:

uucp:x:10:uucp

誰でも何が間違っている可能性があるか教えてもらえますか?

答え1

出力結果によると、次のようなことが発生しているようです。

  • あなたのアプリケーションはrootとして実行されています。
  • グループを権限の低いグループに変更する機能があります。
  • 権限の低いユーザーに切り替えようとしましたが失敗します。

まず、セットシステムコールの割り当て設定と同じです。エラー番号これは実際のエラーを伝えます。失敗の実際の原因を調べるには、エラーメッセージの一部として印刷するのが最善です。

ただし、これは権限エラーである可能性が高いです。あなたが知っている限り、権限エラーはその権限があることを示し(ルートには奇妙です。何でもできるはずです)、これはselinux(またはapparmourなどの同様のサービス)が機能していることを示します。これは、rootユーザーが特定のタスクを実行するのを防ぐことができる唯一のサービスです。

selinuxに問題があるかどうかを確認する最速の方法(私は衣類について知らない)がオンになっていること(例:「強制」)を確認することです。

sestatus

次に、監査ログでavcの拒否を確認します。

sudo grep avc /var/log/audit/audit.log

何も返されない場合は selinux が何かをブロックしているのです。一時的にtiを許可に設定して、selinuxであることをさらに証明できます。

sudo setenforce 0

今の要件を満たすことができれば確かにselinuxです。今、2つのオプションがあります。selinuxを永久に寛大に設定システムセキュリティを下げる(推奨しない)アプリケーションに必要なルールの作成

答え2

サービスファイルにUser=rootおよびを維持する必要があります。Group=rootシステムサービスで開始されたプロセス(すでにrootで始まる)には必要ありません。プロセスが別のeuidに変更されると、問題が発生する可能性があります。

関連情報