質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Q&A

解決済

2回答

1725閲覧

ubuntu環境でRustのwebアプリを実行するとPermissionDeniedエラーが出る。

ajaj

総合スコア12

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

0グッド

0クリップ

投稿2021/05/22 13:31

Rustでwebアプリを作っています。
AWSのLightsail、ubuntu環境で実行しようとすると、下記のようなエラーが出ます。

Error: Os { code: 13, kind: PermissionDenied, message: "Permission denied" }

ローカル環境では実行まで確認済です。
PermissionDeniedエラーについては他の皆様も質問されているようですが、Rust環境での質問は見当たりませんでした。

検索してみたところ、権限がないためエラーが出ていると予想ができましたので、他の言語のエラーログを対処法を試してみましたが解決に至りませんでした。

試したことはchmod777の権限の許可は試してみました。
また、Cargo.tomlのauthorをubuntuに変えたりしてみました。

また、ls -lによる、権限を確認すると。
-rwxrwxr-x 2 ubuntu ubuntu 139175184 May 22 06:42 アプリ名⇦実行ファイル
のように、実行権限はあることを確認しました。

お力添えのほどよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

〜追伸〜
注意!!:ここに書いてある解決策は強行手段のようなものです。セキュリティの面で問題があります。参考にするときはコメント欄にある方法を試してみて下さい。

追加コメントにも書いた、問題が解決しました。
まず、問題点はアプリ起動が443ポートでできないことでした。
勘違いしていたことは、3桁のポートに繋ぐときにプログラム側に特別な処理がいると勘違いしたことです。

しかし、実際には実行の際に管理者権限で行えばいいだけの話でした。(例えばsudoコマンド)
今回の経験で4桁のポート、3桁のポートで実行の権限が違うことを学びました。

無知とは、怖いものですね。
回答くださった方には、再度お礼申し上げます。(いろいろとアプリの起動、権限について学ぶことができました。)

投稿2021/05/24 08:20

編集2021/05/24 23:02
ajaj

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatsuya6502

2021/05/24 09:08

> 今回の経験で4桁のポート、3桁のポートで実行の権限が違うことを学びました。 正しくは1023以下のポートになります。これらのポートは特権(privileged)サービス用に予約されていて、特権ポート、または、well-knownポートと呼ばれます。 古いLinuxカーネルでは、これらのポートを使うためにはsudoなどを使ってプログラムを管理者権限で実行する必要がありました。が、これですと、プログラムに必要以上の権限を与えてしまうという問題がありました。 現在のLinuxカーネルにはケーパビリティ(capability)という仕組みがあり、必要最低限の権限を与えることができます。 以下のコマンドは、指定したファイルパスにあるバイナリーに、特権ポートを使用(bind)するのに必要なケーパビリティを与えます。 sudo setcap CAP_NET_BIND_SERVICE+ep ファイルパス なお、バイナリーにケーパビリティをつけるときは、ファイル作成者以外のユーザーがそのバイナリーを実行できないようにした方が安全です。chmod go-x ファイルパス などでそれらのユーザーの実行権限を外してください。 参考: http://roguer.info/2012/07/23/5727/ https://nojima.hatenablog.com/entry/2016/12/03/000000
ajaj

2021/05/24 10:05

わざわざ、ご指摘くださりありがとうございます。 私の間違った情報で他の人を邪魔してしまうとこでした。 今後は情報発信の時も気をつけたいと思います! いつもサポートしていただきありがとうございます、
ice-creamer

2021/05/24 19:17

解決に至って何よりです。 ここで、ひとつ老婆心ながらアドバイスをするとすれば、ご自身が無知であったことや誤った情報発信をしたことを恥じないでほしいということです。 かくいう私にしても何でもこたえられるほど知識が豊富なわけでもなく、間違った情報発信も過去に何度でも行ったことがあります。 大事なのは、自分自身が無知であることを認識できるということと、間違いを犯した場合に素直に非を認め改めることです。 これは、簡単なようでかなり難しい。 今回の一件で得られた情報(知見)や調べたことは必ずあなたの血となり肉となるはずです。 これからも、知らないことがあればどんどん質問してください。 知ったつもりになることが一番怖いことですので。
ajaj

2021/05/24 22:57

お心遣いに、感謝いたします。 これからもたくさん質問させていたたきます!
guest

0

ベストアンサー

一口に権限がないといっても、何に対してどのような権限が有るかあるいは無いかはwebアプリの振る舞いによっても異なります。

例えば、今回のようにwebアプリの権限を拝見しても、そこから読み取れるのは、webアプリそのものに対してオーナーやグループには読み書き実行の権限が有ること、その他のユーザーには読み込みと実行の権限が与えられていることが分かるだけです。

ですので、webアプリがどのような操作をシステム(AWS)に行っているのか思い返して、特定の領域(ファイルやディレクトリなど)の設定を確認して、読み込みや書き込みができる権限が付与されているかどうかを確認してみてください。

追伸
よく、chmod777を設定してもダメでしたという方がいらっしゃいますが、これは必ずしも何でもありの権限を与えているわけではないものの、セキュリティーの観点からお勧めはできません。

何のために権限を制限しているのかを思い返して、777を設定しないと動作しないのはどこかしらに設計ミスが潜んでいる場合がありますので、ご注意を。

投稿2021/05/22 15:19

ice-creamer

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ajaj

2021/05/23 03:54

回答ありがおつございます。 貴重なご意見いただき、いろいろ調べてみました。サーバーにファイルを置くだけでは表示されないこと、ファイル、ディレクトリの権限の設定の仕方など。 実際に試してみましたが、まだ、解決には至っておりません。もちろん、権限の確認がしっかりとできていないことも考えられますが、もう一つ疑問点が出てきました。 それは、現在、Actix-webで開発していますが、メイン関数のなかの、bind関数(ポートを紐づける関数と認識)に0.0.0.0:8080を設定すると、起動を確認しましたが、0.0.0.0:443では起動ができないことです。 AWSでhttpsの443を設定はしています。 また、3桁のポート設定には特別な設定が必要そうであることも、調べてみてわかりました。 しかし、プログラムの書き方がまだわかりません。 回答いただいて、大変恐縮ですが、もしご存知であれば教えていただけないでしょうか? よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問