ホーム » 「sudo」タグがついた投稿
タグアーカイブ: sudo
Ubuntu 25.10 へのアップグレード
Ubuntu 25.10 も公開されたので、do-release-upgrade を実行。X.org が使えなくなり Wayland だけになるとのことであったが、ssh x-forward で使うのがほとんどだし影響も少ないだろうと更新を行ってみた。
dovecot が動かない
最初のトラブルは、dovecot 。設定ファイルの変更が原因。dovecot って、設定ファイルの基本的な書式で動かなくなることが多い。
メールボックスを Maildir 形式 に変更と、SSL の設定ファイルを変更
((( /etc/dovecot/conf.d/10-mail.conf )))
#mail_driver = mbox
#mail_home = /home/%{user|username}
#mail_path = %{home}/mail
#mail_inbox_path = /var/mail/%{user}
mail_driver = maildir
mail_path = ~/Maildir
## mail_inbox_path = ~/Maildir/.INBOX -- 設定ミス(自宅サーバでは.INBOXはナシ)
mail_inbox_path = ~/Maildir
((( /etc/dovecot/conf.d/10-ssl.conf )))
# Preferred permissions: root:root 0444
ssl_server_cert_file = /var/lib/dehydrated/certs/tsaitoh.net/fullchain.pem
# Preferred permissions: root:root 0400
ssl_server_key_file = /var/lib/dehydrated/certs/tsaitoh.net/privkey.pem
sudo-rs で CIDR記法が使えない
Ubuntu 25.10 での大きな特徴では、sudo が Rust で書かれた sudo-rs に移行したことらしい。んで、Host_Alias で の文法やセキュリティが厳格になったようだ。
Host_Alias LOCAL = 127.0.0.1 , 192.168.11.0/24
といった書き方で記載してあったが、コンマ空白区切りが、厳密にコンマか空白で区切るようになり ” , ” のような前後空白コンマなどがエラーになる。また、自宅内ネットワークからという意味で、CIDR 記法を使っていたが、Host_Alias では CIDR 記法が使えなくなった。自宅ネットワークなら OK といった雑な指定はセキュリティ的にまずいということらしく、CIDR 記法が使える部分に制限が加わった様子。今回は、localhost だけに変更しておいた。
LEDバッジが動かない(11/16追記)
自宅でスケジュール表示などに活用していた LED バッジが動かなくなった。
Perl で書いてあるし、今までの OS のアップグレードでは、ほぼ問題なく移行できていたのに…
Kernel が Linux 6.14.x から 6.17 に更新された影響かと思い grub メニューで 6.14 で起動したけど改善せず。Kernel が原因ではないのかな。
ユーザとリモート処理
Linux ではユーザを切替えながら処理を実行したり、ネットワークを越えて命令を実行することができる。外部から攻撃を受けてバックドアが仕掛けられていて不正侵入をうけているのか確認する時に、どういったユーザの処理を実行しているのか把握し、リモート接続で処理ができるような状態なのか知ることが重要。
ユーザとユーザの切り替え
ユーザ,グループの管理
unix では、ユーザ情報は /etc/passwd , /etc/group で管理している。passwdファイル先頭の、ユーザ番号 0 は、なんでもできる権限を持つシステム管理者 root となっている。ユーザ番号 1~999 は、システムを動かすための特殊なユーザとなっている。1000以上は、実際のユーザに割り当てることが多い。
((( /etc/passwd ))) root:x:0:0:root:/root:/bin/bash sshd:x:111:65534::/var/run/sshd:/usr/sbin/nologin tsaitoh:x:1000:1000:Tohru Saitoh,,,:/home/tsaitoh:/bin/zsh | tsaitoh = ユーザ名 | x = 昔はパスワードが書いてあった, *ならアカウントロック | 1000 = ユーザ番号 | 1000 = グループ番号 | Tohru Saitoh,,, = ユーザの名前など | /home/tsaitoh = ホームディレクトリ | /bin/zsh = シェル ((( /etc/group ))) root:x:0: ssh:x:112: home:x:1000:tsaitoh | home = グループ名 | x = 昔はパスワードが書いてあった, *ならアカウントロック | 1000 = グループ番号 | tsaitoh = グループに所属するユーザ名(コンマ区切り)
ただし、/etc/passwd, /etc/group は、全ユーザが読めるファイルで、暗号化されたパスワードを覚えるには不向きなので、/etc/shadow , /etc/gshadow に保存されている。
ユーザの確認
自分の情報を確認するには、whoami , id , finger コマンドを用いる。
$ whoami # ユーザ名を表示 tsaitoh $ id # UIDやGIDなどの情報を表示 uid=1000(tsaitoh) gid=1000(home) .... $ finger # ユーザの詳しい情報を表示 Login Name Tty Idle Login Time Office Office Phone tsaitoh Tohru Saitoh pts/0 Feb 17 22:47 (192.168.11.xx) 12-3456
su コマンド
ユーザを切り替えるには、su コマンドを用いる(Set User)。別ユーザで命令を実行することもできる。ただし、その別ユーザのパスワードが必要。
$ su root Password: ●●●●●●●● # exit $ su -c whoami root Password: ●●●●●●●● root
システム管理者での作業は、危険な命令も実行できる状態なので、作業ミスを減らすためにプロンプトが、# に切り替わる。
ただし、su コマンドは、切り替えるユーザのパスワードが必要である。システム管理作業を複数人で行う場合、管理者パスワードを複数人に教えることになり、セキュリティ的に危険である。
sudo コマンド
そこで、管理者などに登録した人であれば、自分のパスワードで管理者権限を得ることができる sudo (set user do) コマンドを使うのが一般的である。
$ sudo bash Password: ●●●●●●●● 自分のパスワード # exit $ sudo whoami # 管理者で whoami を実行 root $ sudo -u foobar # ユーザ foobar に変更 $ whoami foobar $ exit $ whoami tsaitoh
システム管理者になれるユーザの設定は、/etc/sudoers に記載されている。一般的に、sudo グループに所属していれば、管理者になれるように設定されていることが多い。
su id bit / スティッキービット
パスワードを変更するpasswdコマンドでは自分のパスワードを変更でき、/etc/passwd や /etc/shadow が書き換えられる。unixのr,w,xの権限だけの知識だと、通常ユーザ自身がpasswd,shadowファイルを書き換えられるのなら、同じファイルに記録されている他のユーザ情報(特にパスワードを変更できるはずである。であれば、他人のパスワードも変更できてしまうのではないのか? 当然、こんなことはできてはいけない。
実は、一時的に他のユーザ権限を借りて作業をするため(システム管理者の権限を借りて作業するため)に、su id bit (スティッキービット)という属性がある。
$ sudo bash $ passwd Password: ●●●●●●● Re enter Password: ●●●●●●● $ which passwd /usr/bin/passwd ls -al /bin/ls -rwxr-xr-x 1 root root 138856 8月 7 2019 /bin/ls $ ls -al /bin/passwd -rwsr-xr-x 1 root root 63960 2月 7 23:54 /usr/bin/passwd
上記の passwd コマンドでは、ファイル属性が – rws r-x r-x となっている。(通常の ls コマンドでは、– rwx r-x r-x となっている。)
su id bit が ON になっているコマンドは、一時的に そのファイル所有者 (/usr/bin/passwd の所有者は root) の権限を借りて命令を実行できる。
ただし、スティッキービットが ON だと、管理者権限で命令を実行することができるが、そのコマンドに不備(脆弱性)があると、システムを乗っ取るためにクラッカーが悪用する場合がある。
((( suid ビットが ON のファイルを探す ))) $ find /usr/bin -perl /u=s -print /usr/bin/password
リモート作業
ネットワークを越えて命令を実行するには、telnet や rsh や ssh コマンドを使う。telnet や rsh コマンドは、通信内容が暗号化されていないため、パケットキャプチャを使われると、パスワードなどを盗むこともできるため、通常は使ってはならない。
telnet (暗号化なしのリモート接続)
$ telnet remote-host # remote-host という名前のコンピュータに telnet で接続 login: ユーザ名 password: パスワード $ exit
ssh (暗号化されたリモート接続)
ssh は、通信内容を暗号化して安全にリモートコンピュータで命令を実行するコマンド。リモートコンピュータへの接続(slogin)、リモートコンピュータで命令の実行(ssh)、リモートコンピュータとのファイル転送(scp) などができる。
$ slogin remote-host # 別コンピュータにlogin Password: ●●●●●●●● $ hostname # 使っているコンピュータ名を調べるコマンド remote-host $ exit $ slogin foobar@remote-host # 指定したユーザ名(foobar)で接続 Password: foobarのパスワード $ whoami foobar $ exit $ ssh remote-host ls # remote-host 上で ls を実行 Maildir $ ssh foobar@remote-host whoami foobar $ scp test.c remote-host:~ # ファイル test.c を remote-host のホームディレクトリにコピー(アップロード) $ scp foobar@remote-host:hoge.txt dest-dir # リモートホストの hoge.txt を、dest-dir にコピー(ダウンロード)


