Armadilloフォーラム

root権限を持たないユーザでの自動実行

hakaru_plus

2018年4月10日 14時21分

お世話になります。山下と申します。

Armadillo-IoT-G3起動に、root権限を持たないユーザ(hakaru)で自動ログインし、
LED出力制御とSW入力制御を行うプロセス(a.out)を自動実行させる予定です。

自動実行の前に、バックグランドでプロセスが期待通りに動作するかどうかを、
プロンプトに『hakaru@armadillo:~/test$ sudo ./a.out &』を入力して確認したのですが、
プロセスの起動は掛かりませんでした。

フォアグランドでプロセスが期待通りに動作するかどうかを、
プロンプトに『hakaru@armadillo:~/test$ sudo ./a.out』を入力して確認したところ、
期待通りにプロセスが動作しました。
その後、バックグランドでプロセスが期待通りに動作するかどうかを、
プロンプトに『hakaru@armadillo:~/test$ sudo ./a.out &』を入力して確認したところ、
期待通りにプロセスが動作しました。

これらのことから、起動後初めてのプロセス実行で、hakaruユーザ用のパスワードを入力できない事が、
プロセスが起動しない原因だと予想はしたのですが、その解決方法がわかりません。
なにか良い解決方法はないでしょうか?

コメント

at_takumi.ando

2018年4月10日 14時31分

安藤です。

harukaというユーザの権限で、任意のバイナリを実行させたい理由は何でしょうか?

例えば簡単な方法で、rc.local で a.out を呼び出す方法があります。
rootで自動実行したくない理由があるのでしょうか?

hakaru_plus

2018年4月10日 14時54分

安藤さまへ

トピックを作成した山下です。

root権限付きのユーザで自動実行したくない理由は、a.outプロセスが作成したCSVファイルを、FTPやSSHでアクセスするのに、root権限を持たないユーザでログインするため(※1)、パーミッションエラーが発生すると思ったからです。
※1 FTPやSSHでのアクセスは、root権限を持たないユーザで接続した方がセキュリティ上良いという情報が多かった為です。

at_takumi.ando

2018年4月10日 15時15分

a.out でどのようなパーミッションでCSVファイルを生成しているのか分かりませんが、
適切なパーミッションで、適切な場所にCSVファイルを配置すれば
root以外のユーザーでリモートからCSVファイルを取得することができます。

CSVファイルのパーミッションが問題であれば、chmodでパーミッションを変更(harukaがreadできるような権限)し、
ユーザー haruka でリモートからアクセスできるディレクトリのパーミッションが問題であれば、これもchmodで変更するか
SSHやFTPの設定で適切なディレクトリを設定するべきだと思います。

at_takumi.ando

2018年4月10日 15時17分

>ユーザー harukaでリモートからアクセスできるディレクトリ
ユーザー harukaでリモートからアクセスしたいディレクトリ

ですね。誤記修正します。

hakaru_plus

2018年4月10日 15時58分

root権限付きユーザでプロセス(a.out)を実行して、プロセスが作成したCSVファイルは、root権限を持たないユーザがオーナーのディレクトリに、chmodで属性を666にして保存すれば良いといことでしょうか?
試してみます。

at_takumi.ando

2018年4月10日 16時26分

安藤です。

a.out を実行するユーザーが何者であるか ということと、
リモートログインしてCSVファイルを取得するユーザーが何者であるか ということとは関係ありません。

目的は、haruka というユーザーでリモートログインし、a.out が生成したCSVファイルを取得すること
だと認識していますが、合っていますか?
ポイントは、haruka がリモートアクセスできるディレクトリに、CSVファイルを適切なパーミッションで配置する ということです。

a.out はCソースをビルドしたバイナリと予想しますが、a.outのソース中で適切なパーミッションを指定してCSVを生成するようにもできますし、
シェルスクリプトで a.out を実行したあとにchmodする方法もあると思います。

C言語関数としてのchmod
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/chmod.2.html

Linuxコマンドとしてのchmod
https://linuxjm.osdn.jp/html/GNU_fileutils/man1/chmod.1.html

どちらの方法でも rc.local に記述するか、systemdでデーモンとして自動実行するのが一般的でスマートだと思います。

また、
>root権限付きユーザ
とは root のことだと認識していますが、合っていますか?
それともsudoner(sudoを許可されているユーザー)のことでしょうか?

haruka というユーザーがsudonerであるということは、sudoを使えば
root権限でコマンドを実行できるということなので、rootが直接実行するのと変わりません。
(厳密には、sudoで実行できるコマンドに制限を掛けることができるので、差異があります)

at_takumi.ando

2018年4月10日 16時28分

ユーザー名、harukaではなくhakaruですね...
訂正します。

hakaru_plus

2018年4月10日 16時50分

山下です。

詳しくご教授いただき、ありがとうございます。
プロセスが作成するファイルと保存先のディレクトリののパーミッションを確認してみたいと思います。

at_syunya.ohshio

2018年4月10日 14時46分

大塩です。

> 自動実行の前に、バックグランドでプロセスが期待通りに動作するかどうかを、
> プロンプトに『hakaru@armadillo:~/test$ sudo ./a.out &』を入力して確認したのですが、
> プロセスの起動は掛かりませんでした。

上記について、[sudo]を用いたバックグラウンド実行は[&]を使用するのではなく「sudo -b ./a.out」で実行する必要があります。
「sudo -b [コマンド]」で実行した場合、次にユーザのパスワードを要求されるはずなのでプロンプトからの確認ができるかと思います。
「sudo」については[man sudo]コマンドで確認できるmanページを参考にしてください。

以上です。