10 Haziran 2020 Çarşamba

sudo komutu

Giriş
sudo "substitude user do" veya "switch user do" olarak hatırlanabilir.

Güvenlik
sudo sürekli root kullanıcı olarak çalışmaktan alıkoyduğu için bir nevi güvenlik tedbiri gibi de düşünülebilir.  Açıklaması şöyle.
Usually, when you're on Linux, you're acting as a non-root user. A lot of things, like installing packages with apt, need root/sudo permission to be used. The sudo binary is there to give the normal user permissions to use root level actions like apt install.

You should not be using Linux all the time as root. This is because if you're compromised, the attacker would have root access to your system, which means they can do pretty much anything on your system. Instead, you run Linux as a non-root user, so that even if your account gets compromised, the attacker can't immediately get root access.
Sudo Nasıl Çalışır
1. sudo komutunu çalıştırınca aslında iki tane uygulama çalışıyor. İlki sudo, diğeri ise sudo'ya geçtiğimiz uygulama ismi. sudo root olarak başlar çünkü setuid kullanır. Açıklaması şöyle
/usr/bin/sudo is setuid root, so it automatically becomes root when you type sudo. If it weren't setuid root, it won't be able to switch to root.

But I suggest you don't set random commands setuid root. sudo was designed to use that way and it makes many security checks before actually let you run the command. By definition, if you type a command name in the terminal, you are running that command as your current user ID (unless the command elevates privileges by itself, eg. by being setuid root, or using sudo internally as in Tony's solution). sudo is there to clearly distinguish command being run as non-root from command being run as root. 
Örneğin şöyle yaparız.
sudo ./myapp -i aparam
2. sudo önce fork() çağrısı ile kendi kopyasını yaratıyor. Daha sonra sonra execve() ile belirttiğimiz uygulamayı çalıştırıyor. Ağaç olarak bakarsak şöyledir.
       ├─bash───sudo───myapp
  child of bash--^      ^--child of sudo
Ortam Değişkenleri
SUDO_ASKPASS
Örnek
Şöyle yaparız
sudo_response=$(SUDO_ASKPASS=/bin/false sudo -A whoami 2>&1 | wc -l)
if [ $sudo_response = 2 ]; then
    can_sudo=1
elif [ $sudo_response = 1 ]; then
    can_sudo=0
else
    echo "Unexpected sudo response: $sudo_response" >&2
    exit 1
fi

Redirection
Örnek
Elimizde şöyle bir kod olsun. Bu kod hata verir.
$ sudo echo "Include thing" >> /etc/httpd/conf.d/vhosts.conf
-bash: /etc/httpd/conf.d/vhosts.conf: Permission denied
Açıklaması şöyle.
Sudo elevates the process it calls, it does not elevate any of the current shell's processing like redirection, globbing, etc.

The file redirection >> /etc/httpd/conf.d/vhosts.conf is being processed by your current shell, which is still running under your current privileges.
Her şeyi tek tırnak içine alarak sorun çözülebilir. Şöyle yaparız.
sudo bash -c 'echo "Include thing" >> /etc/httpd/conf.d/vhosts.conf'
sudo ve su
sudo komutunun su komutundan daha güvenli olduğu söyleniyor.

sudoers dosyası
sudoers dosyası yazısına bakabilirsiniz.

-H seçeneği
Normalde bu seçeneği kullanmaya gerek yok. HOME ortam değişkenini hedef kullanıcının dizini yapar.
Örnek
Şöyle yaparız.
$ sudo printenv HOME  # Shows root's home, even without -H or -i.
/root
$ sudo -u as printenv HOME  # Shows as's home, even without -H or -i.
/home/as
$ sudo -H printenv HOME  # Also shows root's home.
/root
$ sudo -Hu as printenv HOME  # Also shows as's home.
/home/as
-i seçeneği
Açıklaması şöyle.
-i, --login
  Run the shell specified by the target user's password database entry as a login shell.
root olarak shell açabilmek için root'a atanmış bir shell olması gerekir. /etc/passwd dosyasında root için olan satır genelde şöyledir
root:x:0:0:root:/root:/bin/bash
Eğer root için shell atanmasaydı yani şöyle olsaydı bu seçenek işe yaramazdı
root:x:0:0:root:/root:/usr/sbin/nologin
-k seçeneği
Açıklaması şöyle. Tekrar şifre sorulmasını sağlar.
When used alone, the -k (kill) option to sudo invalidates the user's cached credentials. The next time sudo is run a password will be required. This option does not require a password and was added to allow a user to revoke sudo permissions from a .logout file. Not all security policies support credential caching.
        When used in conjunction with a command or an option that may require a password, the -k option will cause sudo to ignore the user's cached credentials. As a result, sudo will prompt for a password (if one is required by the security policy) and will not update the user's cached credentials.
-u seçeneği
Kullanıcı adını belirtir. Açıklaması şöyle. sudo sadece root olarak çalışmak zorunda değildir.
-u user, --user=user

Run the command as a user other than the default target user (usually root).
Örnek
Elimizde şöyle bir komut olsun. Bu komut yetki hatası veriyor.
sudo -u chris ls /root
ls: cannot open directory '/root': Permission denied
Açıklaması şöyle
sudo -u chris runs the given command as user chris, not as root with USER set to chris. So if chris can’t access /root, sudo -u chris won’t change that.
Örnek
Şöyle yaparız.
sudo -u user command
Örnek
$HOME ortam değişkeni belirtilen kullanıcı gibi olur. Şöyle yaparız.
$ sudo printenv HOME  # Shows root's home, even without -H or -i.
/root
$ sudo -u as printenv HOME  # Shows as's home, even without -H or -i.
/home/as

Hiç yorum yok:

Yorum Gönder